1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00
fog--fog/tests/brightbox/requests/compute/helper.rb
2012-11-01 17:49:54 +00:00

680 lines
26 KiB
Ruby

module Fog
module Brightbox
module Nullable
module Account; end
module FirewallPolicy; end
module Image; end
module Interface; end
module LoadBalancer; end
module Server; end
module ServerGroup; end
module Zone; end
end
end
end
Hash.send :include, Fog::Brightbox::Nullable::Account
NilClass.send :include, Fog::Brightbox::Nullable::Account
Hash.send :include, Fog::Brightbox::Nullable::FirewallPolicy
NilClass.send :include, Fog::Brightbox::Nullable::FirewallPolicy
Hash.send :include, Fog::Brightbox::Nullable::Image
NilClass.send :include, Fog::Brightbox::Nullable::Image
Hash.send :include, Fog::Brightbox::Nullable::Interface
NilClass.send :include, Fog::Brightbox::Nullable::Interface
Hash.send :include, Fog::Brightbox::Nullable::LoadBalancer
NilClass.send :include, Fog::Brightbox::Nullable::LoadBalancer
Hash.send :include, Fog::Brightbox::Nullable::Server
NilClass.send :include, Fog::Brightbox::Nullable::Server
Hash.send :include, Fog::Brightbox::Nullable::ServerGroup
NilClass.send :include, Fog::Brightbox::Nullable::ServerGroup
Hash.send :include, Fog::Brightbox::Nullable::Zone
NilClass.send :include, Fog::Brightbox::Nullable::Zone
class Brightbox
module Compute
module TestSupport
# Find a suitable image for testing with
# For speed of server building we're using an empty image
#
# Unless the tester has credentials this will fail so we rescue
# any errors and return nil.
#
# This is used in the shared file +tests/compute/helper.rb+ so unfortunately
# makes all tests reliant on hardcoded values and each other
#
# @return [String,NilClass] the most suitable test image's identifier or nil
def self.image_id
return @image_id unless @image_id.nil?
image = select_testing_image_from_api
@image_id = image["id"]
rescue
@image_id = nil
end
# Prepare a test server, wait for it to be usable but raise if it fails
def self.get_test_server
test_server_options = {:image_id => image_id}
server = Fog::Compute[:brightbox].servers.create(test_server_options)
server.wait_for {
raise "Test server failed to build" if state == "failed"
ready?
}
server
end
private
def self.select_testing_image_from_api
images = Fog::Compute[:brightbox].list_images
raise "No available images!" if images.empty?
images.select { |img| img["official"] && img["virtual_size"] != 0 }.sort_by { |img| img["disk_size"] }.first || images.first
end
end
module Formats
module Struct
CIP_PORT_TRANSLATOR = {
"protocol" => String,
"incoming" => Integer,
"outgoing" => Integer
}
LB_LISTENER = {
"in" => Integer,
"out" => Integer,
"protocol" => String,
"timeout" => Integer
}
LB_HEALTHCHECK = {
"type" => String,
"request" => String,
"port" => Integer,
"interval" => Integer,
"timeout" => Integer,
"threshold_up" => Integer,
"threshold_down" => Integer
}
end
module Nested
ACCOUNT = {
"name" => String,
"resource_type" => String,
"url" => String,
"id" => String,
"status" => String
}
API_CLIENT = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"description" => String,
"revoked_at" => Fog::Nullable::String
}
CLOUD_IP = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => Fog::Nullable::String,
"public_ip" => String,
"status" => String,
"reverse_dns" => String
}
FIREWALL_POLICY = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"default" => Fog::Boolean,
"created_at" => String,
"description" => Fog::Nullable::String
}
FIREWALL_RULE = {
"id" => String,
"resource_type" => String,
"url" => String,
"source" => Fog::Nullable::String,
"source_port" => Fog::Nullable::String,
"destination" => Fog::Nullable::String,
"destination_port" => Fog::Nullable::String,
"protocol" => String,
"icmp_type_name" => Fog::Nullable::String,
"description" => Fog::Nullable::String
}
IMAGE = {
"name" => String,
"created_at" => String,
"resource_type" => String,
"arch" => String,
"url" => String,
"id" => String,
"description" => String,
"source" => String,
"status" => String,
"owner" => String,
"username" => Fog::Nullable::String
}
INTERFACE = {
"resource_type" => String,
"url" => String,
"id" => String,
"ipv4_address" => String,
"ipv6_address" => Fog::Nullable::String,
"mac_address" => String
}
LOAD_BALANCER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"created_at" => String,
"deleted_at" => Fog::Nullable::String
}
SERVER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"hostname" => String,
"fqdn" => String,
"created_at" => String,
"started_at" => Fog::Nullable::String,
"deleted_at" => Fog::Nullable::String,
"username" => Fog::Nullable::String
}
SERVER_GROUP = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => Fog::Nullable::String,
"created_at" => String,
"default" => Fog::Boolean,
"description" => Fog::Nullable::String,
"created_at" => String
}
SERVER_TYPE = {
"name" => String,
"handle" => Fog::Nullable::String,
"cores" => Integer,
"resource_type" => String,
"disk_size" => Integer,
"url" => String,
"id" => String,
"ram" => Integer,
"status" => String
}
USER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"email_address" => String
}
ZONE = {
"id" => String,
"resource_type" => String,
"url" => String,
"handle" => Fog::Nullable::String
}
end
module Collected
ACCOUNT = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"vat_registration_number" => Fog::Nullable::String,
"telephone_number" => Fog::Nullable::String,
"telephone_verified" => Fog::Nullable::Boolean,
"ram_limit" => Integer,
"ram_used" => Integer,
"cloud_ips_limit" => Integer,
"cloud_ips_used" => Integer,
"load_balancers_limit" => Integer,
"load_balancers_used" => Integer,
"library_ftp_password" => Fog::Nullable::String,
"verified_telephone" => Fog::Nullable::String,
"verified_at" => Fog::Nullable::String,
"verified_ip" => Fog::Nullable::String,
"owner" => Brightbox::Compute::Formats::Nested::USER,
"users" => [Brightbox::Compute::Formats::Nested::USER],
"clients" => [Brightbox::Compute::Formats::Nested::API_CLIENT],
"servers" => [Brightbox::Compute::Formats::Nested::SERVER],
"load_balancers" => [Brightbox::Compute::Formats::Nested::LOAD_BALANCER],
"cloud_ips" => [Brightbox::Compute::Formats::Nested::CLOUD_IP],
"server_groups" => [Brightbox::Compute::Formats::Nested::SERVER_GROUP],
"firewall_policies" => [Brightbox::Compute::Formats::Nested::FIREWALL_POLICY],
"images" => [Brightbox::Compute::Formats::Nested::IMAGE],
"zones" => [Brightbox::Compute::Formats::Nested::ZONE]
}
API_CLIENT = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"description" => String,
"revoked_at" => Fog::Nullable::String,
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT
}
APPLICATION = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => Fog::Nullable::String
}
CLOUD_IP = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => Fog::Nullable::String,
"public_ip" => String,
"status" => String,
"reverse_dns" => String,
"port_translators" => [Brightbox::Compute::Formats::Struct::CIP_PORT_TRANSLATOR],
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
"interface" => Fog::Brightbox::Nullable::Interface,
"load_balancer" => Fog::Brightbox::Nullable::LoadBalancer,
"server" => Fog::Brightbox::Nullable::Server,
"server_group" => Fog::Brightbox::Nullable::ServerGroup
}
FIREWALL_POLICY = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"description" => Fog::Nullable::String,
"default" => Fog::Boolean,
"server_group" => Brightbox::Compute::Formats::Nested::SERVER_GROUP,
"rules" => [Brightbox::Compute::Formats::Nested::FIREWALL_RULE]
}
FIREWALL_RULE = {
"id" => String,
"resource_type" => String,
"url" => String,
"source" => String,
"source_port" => String,
"destination" => String,
"destination_port" => String,
"protocol" => String,
"icmp_type_name" => String,
"description" => Fog::Nullable::String,
"firewall_policy" => Brightbox::Compute::Formats::Nested::FIREWALL_POLICY
}
IMAGE = {
"name" => String,
"created_at" => String,
"resource_type" => String,
"arch" => String,
"url" => String,
"id" => String,
"description" => String,
"source" => String,
"source_type" => String,
"status" => String,
"owner" => String,
"username" => Fog::Nullable::String,
"public" => Fog::Boolean,
"official" => Fog::Boolean,
"compatibility_mode" => Fog::Boolean,
"virtual_size" => Integer,
"disk_size" => Integer,
"min_ram" => Fog::Nullable::Integer,
"ancestor" => Fog::Brightbox::Nullable::Image,
"username" => Fog::Nullable::String
}
LOAD_BALANCER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"created_at" => String,
"deleted_at" => Fog::Nullable::String,
"cloud_ips" => [Brightbox::Compute::Formats::Nested::CLOUD_IP],
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
"listeners" => [Brightbox::Compute::Formats::Struct::LB_LISTENER],
"nodes" => [Brightbox::Compute::Formats::Nested::SERVER]
}
SERVER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"hostname" => String,
"fqdn" => String,
"created_at" => String,
"started_at" => Fog::Nullable::String,
"deleted_at" => Fog::Nullable::String,
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
"server_type" => Brightbox::Compute::Formats::Nested::SERVER_TYPE,
"cloud_ips" => [Brightbox::Compute::Formats::Nested::CLOUD_IP],
"image" => Brightbox::Compute::Formats::Nested::IMAGE,
"server_groups" => [Brightbox::Compute::Formats::Nested::SERVER_GROUP],
"snapshots" => [Brightbox::Compute::Formats::Nested::IMAGE],
"interfaces" => [Brightbox::Compute::Formats::Nested::INTERFACE],
"zone" => Fog::Brightbox::Nullable::Zone,
"username" => Fog::Nullable::String
}
SERVER_GROUP = {
"created_at" => String,
"id" => String,
"resource_type" => String,
"url" => String,
"name" => Fog::Nullable::String,
"description" => Fog::Nullable::String,
"default" => Fog::Boolean,
"created_at" => String,
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
"servers" => [Brightbox::Compute::Formats::Nested::SERVER],
"firewall_policy" => Fog::Brightbox::Nullable::FirewallPolicy
}
SERVER_TYPE = {
"id" => String,
"resource_type" => String,
"url" => String,
"handle" => Fog::Nullable::String,
"name" => String,
"status" => String,
"cores" => Integer,
"ram" => Integer,
"disk_size" => Integer
}
USER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"email_address" => String,
"email_verified" => Fog::Boolean,
"accounts" => [Brightbox::Compute::Formats::Nested::ACCOUNT],
"default_account" => NilClass
}
ZONE = {
"id" => String,
"resource_type" => String,
"url" => String,
"handle" => Fog::Nullable::String
}
end
module Full
ACCOUNT = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"address_1" => String,
"address_2" => String,
"city" => String,
"county" => String,
"postcode" => String,
"country_code" => String,
"country_name" => String,
"vat_registration_number" => Fog::Nullable::String,
"telephone_number" => String,
"telephone_verified" => Fog::Boolean,
"created_at" => String,
"ram_limit" => Integer,
"ram_used" => Integer,
"cloud_ips_limit" => Integer,
"cloud_ips_used" => Integer,
"load_balancers_limit" => Integer,
"load_balancers_used" => Integer,
"library_ftp_host" => String,
"library_ftp_user" => String,
"library_ftp_password" => Fog::Nullable::String,
"verified_telephone" => Fog::Nullable::String,
"verified_at" => Fog::Nullable::String,
"verified_ip" => Fog::Nullable::String,
"valid_credit_card" => Fog::Boolean,
"owner" => Brightbox::Compute::Formats::Nested::USER,
"users" => [Brightbox::Compute::Formats::Nested::USER],
"clients" => [Brightbox::Compute::Formats::Nested::API_CLIENT],
"servers" => [Brightbox::Compute::Formats::Nested::SERVER],
"load_balancers" => [Brightbox::Compute::Formats::Nested::LOAD_BALANCER],
"cloud_ips" => [Brightbox::Compute::Formats::Nested::CLOUD_IP],
"server_groups" => [Brightbox::Compute::Formats::Nested::SERVER_GROUP],
"firewall_policies" => [Brightbox::Compute::Formats::Nested::FIREWALL_POLICY],
"images" => [Brightbox::Compute::Formats::Nested::IMAGE],
"zones" => [Brightbox::Compute::Formats::Nested::ZONE]
}
API_CLIENT = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"description" => String,
"revoked_at" => Fog::Nullable::String,
"secret" => Fog::Nullable::String,
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT
}
APPLICATION = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => Fog::Nullable::String,
"secret" => Fog::Nullable::String
}
CLOUD_IP = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => Fog::Nullable::String,
"public_ip" => String,
"status" => String,
"reverse_dns" => String,
"port_translators" => [Brightbox::Compute::Formats::Struct::CIP_PORT_TRANSLATOR],
"account" => Fog::Brightbox::Nullable::Account,
"interface" => Fog::Brightbox::Nullable::Interface,
"load_balancer" => Fog::Brightbox::Nullable::LoadBalancer,
"server" => Fog::Brightbox::Nullable::Server,
"server_group" => Fog::Brightbox::Nullable::ServerGroup
}
FIREWALL_POLICY = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"description" => Fog::Nullable::String,
"default" => Fog::Boolean,
"server_group" => Brightbox::Compute::Formats::Nested::SERVER_GROUP,
"rules" => [Brightbox::Compute::Formats::Nested::FIREWALL_RULE]
}
FIREWALL_RULE = {
"id" => String,
"resource_type" => String,
"url" => String,
"source" => String,
"source_port" => String,
"destination" => String,
"destination_port" => String,
"protocol" => String,
"icmp_type_name" => String,
"description" => Fog::Nullable::String
}
IMAGE = {
"name" => String,
"created_at" => String,
"resource_type" => String,
"arch" => String,
"url" => String,
"id" => String,
"description" => String,
"source" => String,
"source_type" => String,
"status" => String,
"owner" => String, # Account ID not object
"username" => Fog::Nullable::String,
"public" => Fog::Boolean,
"official" => Fog::Boolean,
"compatibility_mode" => Fog::Boolean,
"virtual_size" => Integer,
"disk_size" => Integer,
"min_ram" => Fog::Nullable::Integer,
"ancestor" => Fog::Brightbox::Nullable::Image,
"username" => Fog::Nullable::String,
"licence_name" => Fog::Nullable::String
}
INTERFACE = {
"resource_type" => String,
"url" => String,
"id" => String,
"ipv4_address" => String,
"ipv6_address" => Fog::Nullable::String,
"mac_address" => String,
"server" => Brightbox::Compute::Formats::Nested::SERVER
}
LOAD_BALANCER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"listeners" => [Brightbox::Compute::Formats::Struct::LB_LISTENER],
"policy" => String,
"healthcheck" => Brightbox::Compute::Formats::Struct::LB_HEALTHCHECK,
"created_at" => String,
"deleted_at" => Fog::Nullable::String,
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
"nodes" => [Brightbox::Compute::Formats::Nested::SERVER],
"cloud_ips" => [Brightbox::Compute::Formats::Nested::CLOUD_IP]
}
SERVER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"status" => String,
"hostname" => String,
"fqdn" => String,
"created_at" => String,
"started_at" => Fog::Nullable::String,
"deleted_at" => Fog::Nullable::String,
"user_data" => Fog::Nullable::String,
"console_url" => Fog::Nullable::String,
"console_token" => Fog::Nullable::String,
"console_token_expires" => Fog::Nullable::String,
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
"server_type" => Brightbox::Compute::Formats::Nested::SERVER_TYPE,
"cloud_ips" => [Brightbox::Compute::Formats::Nested::CLOUD_IP],
"image" => Brightbox::Compute::Formats::Nested::IMAGE,
"snapshots" => [Brightbox::Compute::Formats::Nested::IMAGE],
"server_groups" => [Brightbox::Compute::Formats::Nested::SERVER_GROUP],
"interfaces" => [Brightbox::Compute::Formats::Nested::INTERFACE],
"zone" => Fog::Brightbox::Nullable::Zone,
"licence_name" => Fog::Nullable::String,
"username" => Fog::Nullable::String
}
SERVER_GROUP = {
"created_at" => String,
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"description" => Fog::Nullable::String,
"default" => Fog::Boolean,
"created_at" => String,
"account" => Brightbox::Compute::Formats::Nested::ACCOUNT,
"servers" => [Brightbox::Compute::Formats::Nested::SERVER],
"firewall_policy" => Fog::Brightbox::Nullable::FirewallPolicy
}
SERVER_TYPE = {
"id" => String,
"resource_type" => String,
"url" => String,
"handle" => Fog::Nullable::String,
"name" => String,
"status" => String,
"cores" => Integer,
"ram" => Integer,
"disk_size" => Integer
}
USER = {
"id" => String,
"resource_type" => String,
"url" => String,
"name" => String,
"email_address" => String,
"email_verified" => Fog::Boolean,
"accounts" => [Brightbox::Compute::Formats::Nested::ACCOUNT],
"default_account" => Fog::Brightbox::Nullable::Account,
"ssh_key" => Fog::Nullable::String,
"messaging_pref" => Fog::Boolean
}
ZONE = {
"id" => String,
"resource_type" => String,
"url" => String,
"handle" => String
}
end
module Collection
ACCOUNTS = [Brightbox::Compute::Formats::Collected::ACCOUNT]
API_CLIENTS = [Brightbox::Compute::Formats::Collected::API_CLIENT]
APPLICATION = [Brightbox::Compute::Formats::Collected::APPLICATION]
CLOUD_IPS = [Brightbox::Compute::Formats::Collected::CLOUD_IP]
IMAGES = [Brightbox::Compute::Formats::Collected::IMAGE]
FIREWALL_POLICIES = [Brightbox::Compute::Formats::Collected::FIREWALL_POLICY]
FIREWALL_RULES = [Brightbox::Compute::Formats::Collected::FIREWALL_RULE]
LOAD_BALANCERS = [Brightbox::Compute::Formats::Collected::LOAD_BALANCER]
SERVERS = [Brightbox::Compute::Formats::Collected::SERVER]
SERVER_GROUPS = [Brightbox::Compute::Formats::Collected::SERVER_GROUP]
SERVER_TYPES = [Brightbox::Compute::Formats::Collected::SERVER_TYPE]
USERS = [Brightbox::Compute::Formats::Collected::USER]
ZONES = [Brightbox::Compute::Formats::Collected::ZONE]
end
end
end
end