add_aggregate_host(_uuid, _host_uuid)
click to toggle source
def add_aggregate_host(_uuid, _host_uuid)
response = Excon::Response.new
response.status = 200
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
add_fixed_ip(_server_id, _network_id)
click to toggle source
def add_fixed_ip(_server_id, _network_id)
true
end
add_flavor_access(flavor_ref, tenant_id)
click to toggle source
def add_flavor_access(flavor_ref, tenant_id)
response = Excon::Response.new
response.status = 200
response.body = {
"flavor_access" => [{"tenant_id" => tenant_id.to_s, "flavor_id" => flavor_ref.to_s}]
}
response
end
add_security_group(_server_id, _group_name)
click to toggle source
def add_security_group(_server_id, _group_name)
response = Excon::Response.new
response.status = 200
response
end
allocate_address(_pool = nil)
click to toggle source
def allocate_address(_pool = nil)
response = Excon::Response.new
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26",
"Content-Type" => "application/json",
"Content-Length" => "105",
"Date" => Date.new
}
response.body = {
"floating_ip" => {
"instance_id" => nil,
"ip" => "192.168.27.132",
"fixed_ip" => nil,
"id" => 4,
"pool" => "nova"
}
}
response
end
associate_address(server_id, ip_address)
click to toggle source
def associate_address(server_id, ip_address)
server = data[:servers][server_id]
server["addresses"]['mocknet'] ||= []
ip_hash = {"OS-EXT-IPS-MAC:mac_addr" => "fa:16:3e:85:47:40", "version" => 4, "addr" => ip_address, "OS-EXT-IPS:type" => "floating"}
server["addresses"]['mocknet'] << ip_hash
response = Excon::Response.new
response.status = 202
response.headers = {
"Content-Type" => "text/html, charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
attach_volume(volume_id, server_id, device)
click to toggle source
def attach_volume(volume_id, server_id, device)
response = Excon::Response.new
response.status = 200
data = {
'id' => volume_id,
'volumeId' => volume_id,
'serverId' => server_id,
'device' => device
}
self.data[:volumes][volume_id]['attachments'] << data
self.data[:volumes][volume_id]['status'] = 'in-use'
response.body = {'volumeAttachment' => data}
response
end
change_server_password(_server_id, _admin_password)
click to toggle source
def change_server_password(_server_id, _admin_password)
response = Excon::Response.new
response.status = 202
response
end
confirm_resize_server(_server_id)
click to toggle source
def confirm_resize_server(_server_id)
response = Excon::Response.new
response.status = 204
response
end
create_aggregate(_name, _options = {})
click to toggle source
def create_aggregate(_name, _options = {})
response = Excon::Response.new
response.status = 200
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response.body = {'aggregate' => data[:aggregates].first}
response
end
create_flavor(attributes)
click to toggle source
def create_flavor(attributes)
response = Excon::Response.new
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-fdc6f99e-55a2-4ab1-8904-0892753828cf",
"Content-Type" => "application/json",
"Content-Length" => "356",
"Date" => Date.new
}
response.body = {
"flavor" => {
"vcpus" => attributes[:vcpus],
"disk" => attributes[:disk],
"name" => attributes[:name],
"links" => [
{
"href" => "http://192.168.27.100:8774/v1.1/6733e93c5f5c4eb1bcabc6902ba208d6/flavors/11",
"rel" => "self"
},
{
"href" => "http://192.168.27.100:8774/6733e93c5f5c4eb1bcabc6902ba208d6/flavors/11",
"rel" => "bookmark"
}
],
"rxtx_factor" => attributes[:rxtx_factor] || 1.0,
"OS-FLV-EXT-DATA:ephemeral" => attributes[:ephemeral] || 0,
"os-flavor-access:is_public" => attributes[:is_public] || false,
"OS-FLV-DISABLED:disabled" => attributes[:disabled] || false,
"ram" => attributes[:ram],
"id" => "11",
"swap" => attributes[:swap] || ""
}
}
response
end
create_image(server_id, name, metadata = {})
click to toggle source
def create_image(server_id, name, metadata = {})
response = Excon::Response.new
response.status = 202
img_id = Fog::Mock.random_numbers(6).to_s
data = {
'id' => img_id,
'server' => {"id" => "3", "links" => [{"href" => "http://nova1:8774/admin/servers/#{server_id}", "rel" => "bookmark"}]},
'links' => [{"href" => "http://nova1:8774/v1.1/admin/images/#{img_id}", "rel" => "self"}, {"href" => "http://nova1:8774/admin/images/#{img_id}", "rel" => "bookmark"}],
'metadata' => metadata || {},
'name' => name || "server_#{rand(999)}",
'progress' => 0,
'status' => 'SAVING',
'minDisk' => 0,
'minRam' => 0,
'updated' => "",
'created' => ""
}
self.data[:last_modified][:images][data['id']] = Time.now
self.data[:images][data['id']] = data
response.body = {'image' => data}
response
end
create_key_pair(key_name, _public_key = nil)
click to toggle source
def create_key_pair(key_name, _public_key = nil)
response = Excon::Response.new
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be",
"Content-Type" => "application/json",
"Content-Length" => "1289",
"Date" => Date.new
}
response.body = {
"keypair" => {
"public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjljntJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02GWBS45rcuboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7j4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n",
"private_key" => "-----BEGIN RSA PRIVATE KEY-----\nMIICXgIBAAKBgQDCdAZLjljn1tJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02\nGWBS45rcuHboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FQG1QZNtLPsx7\nj4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWez0Z1+9qOq9ngdaoW+YClfQIDAQAB\nAoGBALBoT9m1vuQ82EONQf2RONqHAsfUzi/SMhEZRgOlv9AemXZkcWyl4uPvxmtd\nEcreiTystAtCHjw7lhCExXthipevUjtIAAt+b3pMn6Oyjad3IRvde6atMdjrje43\n/nftYtuXYyJTsvwEvLYqSioLQ0Nn/XDKhOpcM5tejDHOH35lAkEA+H4r7y9X521u\nIABVAezBWaT/wvdMjx5cwfyYEQjnI1bxfRIqkgoY5gDDBdVbT75UTsHHbHLORQcw\nRjRvS2zgewJBAMhT6eyMonJvHHvC5RcchcY+dWkscIKoOzeyUKMb+7tERQa9/UN2\njYb+jdM0VyL0ruLFwYtl2m34gfmhcXgIvGcCQGzKMEnjHEUBr7jq7EyPbobkqeSd\niDMQQ+PZxmmO0EK0ib0L+v881HG926PuKK/cz+Q7Cif8iznFT+ksg50t6YkCQQC9\nwfcAskqieSuS9A9LcCIrojhXctf0e+T0Ij2N89DlF4sHEuqXf/IZ4IB5gsfTfdE3\nUDnAkK9yogaEbu/r0uKbAkEAy5kl71bIqvKTKsY2mES9ziVxfftl/9UIi5LI+QHb\nmC/c6cTrGVCM71fi2GMxGgBeEea4+7xwoWTL4CxA00kmTg==\n-----END RSA PRIVATE KEY-----\n",
"user_id" => "admin",
"name" => key_name,
"fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad"
}
}
response
end
create_os_interface(server_id, options={})
click to toggle source
def create_os_interface(server_id, options={})
Excon::Response.new(
:body => {'interfaceAttachment' => data[:os_interfaces].first},
:status => 200
)
end
create_security_group(name, description)
click to toggle source
def create_security_group(name, description)
Fog::Identity::OpenStack.new(:openstack_auth_url => credentials[:openstack_auth_url])
tenant_id = Fog::Identity::OpenStack::V2::Mock.data[current_tenant][:tenants].keys.first
security_group_id = Fog::Mock.random_numbers(2).to_i + 1
data[:security_groups][security_group_id.to_s] = {
'tenant_id' => tenant_id,
'rules' => [],
'id' => security_group_id,
'name' => name,
'description' => description
}
response = Excon::Response.new
response.status = 200
response.headers = {
'X-Compute-Request-Id' => "req-#{Fog::Mock.random_hex(32)}",
'Content-Type' => 'application/json',
'Content-Length' => Fog::Mock.random_numbers(3).to_s,
'Date' => Date.new
}
response.body = {
'security_group' => data[:security_groups][security_group_id.to_s]
}
response
end
create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id = nil)
click to toggle source
def create_security_group_rule(parent_group_id, ip_protocol, from_port, to_port, cidr, group_id = nil)
parent_group_id = parent_group_id.to_i
response = Excon::Response.new
response.status = 200
response.headers = {
'X-Compute-Request-Id' => "req-#{Fog::Mock.random_hex(32)}",
'Content-Type' => 'application/json',
'Content-Length' => Fog::Mock.random_numbers(3).to_s,
'Date' => Date.new
}
rule = {
'id' => Fog::Mock.random_numbers(2).to_i,
'from_port' => from_port,
'group' => group_id || {},
'ip_protocol' => ip_protocol,
'to_port' => to_port,
'parent_group_id' => parent_group_id,
'ip_range' => {
'cidr' => cidr
}
}
data[:security_groups][parent_group_id.to_s]['rules'].push(rule)
response.body = {
'security_group_rule' => rule
}
response
end
create_server(name, image_ref, flavor_ref, options = {})
click to toggle source
def create_server(name, image_ref, flavor_ref, options = {})
response = Excon::Response.new
response.status = 202
server_id = Fog::Mock.random_numbers(6).to_s
identity = Fog::Identity::OpenStack.new :openstack_auth_url => credentials[:openstack_auth_url]
user = identity.users.find do |u|
u.name == @openstack_username
end
user_id = if user
user.id
else
response = identity.create_user(@openstack_username,
'password',
"#{@openstack_username}@example.com")
response.body["user"]["id"]
end
mock_data = {
'addresses' => {"Private" => [{"addr" => Fog::Mock.random_ip}]},
'flavor' => {"id" => flavor_ref, "links" => [{"href" => "http://nova1:8774/admin/flavors/1", "rel" => "bookmark"}]},
'id' => server_id,
'image' => {"id" => image_ref, "links" => [{"href" => "http://nova1:8774/admin/images/#{image_ref}", "rel" => "bookmark"}]},
'links' => [{"href" => "http://nova1:8774/v1.1/admin/servers/5", "rel" => "self"}, {"href" => "http://nova1:8774/admin/servers/5", "rel" => "bookmark"}],
'hostId' => "123456789ABCDEF01234567890ABCDEF",
'metadata' => options['metadata'] || {},
'name' => name || "server_#{rand(999)}",
'accessIPv4' => options['accessIPv4'] || "",
'accessIPv6' => options['accessIPv6'] || "",
'progress' => 0,
'status' => 'BUILD',
'created' => '2012-09-27T00:04:18Z',
'updated' => '2012-09-27T00:04:27Z',
'user_id' => user_id,
'config_drive' => options['config_drive'] || '',
}
nics = options['nics']
if nics
nics.each do |_nic|
mock_data["addresses"].merge!(
"Public" => [{'addr' => Fog::Mock.random_ip}]
)
end
end
response_data = if options['return_reservation_id'] == 'True'
{'reservation_id' => "r-#{Fog::Mock.random_numbers(6)}"}
else
{
'adminPass' => 'password',
'id' => server_id,
'links' => mock_data['links'],
}
end
if block_devices = options["block_device_mapping_v2"]
block_devices.each { |bd| volumes.get(bd[:uuid]).attach(server_id, bd[:device_name]) }
elsif block_device = options["block_device_mapping"]
volumes.get(block_device[:volume_id]).attach(server_id, block_device[:device_name])
end
data[:last_modified][:servers][server_id] = Time.now
data[:servers][server_id] = mock_data
security_groups = options['security_groups']
if security_groups
groups = Array(security_groups).map do |sg|
if sg.kind_of?(Fog::Compute::OpenStack::SecurityGroup)
sg.name
else
sg
end
end
data[:server_security_group_map][server_id] = groups
response_data['security_groups'] = groups
end
if options['os:scheduler_hints'] && options['os:scheduler_hints']['group']
group = data[:server_groups][options['os:scheduler_hints']['group']]
group[:members] << server_id if group
end
response.body = if options['return_reservation_id'] == 'True'
response_data
else
{'server' => response_data}
end
response
end
create_server_group(name, policy)
click to toggle source
def create_server_group(name, policy)
Fog::Compute::OpenStack::ServerGroup.validate_server_group_policy policy
id = SecureRandom.uuid
data[:server_groups][id] = {:name => name, :policies => [policy], :members => []}
get_server_group id
end
create_snapshot(volume_id, name, description, _force = false)
click to toggle source
def create_snapshot(volume_id, name, description, _force = false)
volume_response = get_volume_details(volume_id)
volume = volume_response.data[:body]['volume']
if volume.nil?
raise Fog::Compute::OpenStack::NotFound
else
response = Excon::Response.new
data = {
"status" => "availble",
"name" => name,
"created_at" => Time.now,
"description" => description,
"volume_id" => volume_id,
"id" => Fog::Mock.random_numbers(2),
"size" => volume['size']
}
self.data[:snapshots][data['id']] = data
response.body = {"snapshot" => data}
response.status = 202
response
end
end
create_volume(name, description, size, options = {})
click to toggle source
def create_volume(name, description, size, options = {})
response = Excon::Response.new
response.status = 202
data = {'id' => Fog::Mock.random_numbers(2),
'displayName' => name,
'displayDescription' => description,
'size' => size,
'status' => 'creating',
'snapshotId' => options[:snapshot_id],
'volumeType' => options[:volume_type] || 'None',
'availabilityZone' => options[:availability_zone] || 'nova',
'createdAt' => Time.now.strftime('%FT%T.%6N'),
'attachments' => [], 'metadata' => options[:metadata] || {}}
self.data[:volumes][data['id']] = data
response.body = {'volume' => data}
response
end
data()
click to toggle source
def data
self.class.data["#{@openstack_username}-#{@current_tenant}"]
end
delete_aggregate(_uuid)
click to toggle source
def delete_aggregate(_uuid)
response = Excon::Response.new
response.status = 200
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
delete_flavor(_flavor_id)
click to toggle source
def delete_flavor(_flavor_id)
response = Excon::Response.new
response.status = 202
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
delete_image(image_id)
click to toggle source
def delete_image(image_id)
response = Excon::Response.new
image = list_images_detail.body['images'].find { |im| im['id'] == image_id }
if image
if image['status'] == 'SAVING'
response.status = 409
raise(Excon::Errors.status_error({:expects => 202}, response))
else
data[:last_modified][:images].delete(image_id)
data[:images].delete(image_id)
response.status = 202
end
response
else
response.status = 400
raise(Excon::Errors.status_error({:expects => 202}, response))
end
end
delete_key_pair(_key_name)
click to toggle source
def delete_key_pair(_key_name)
response = Excon::Response.new
response.status = 202
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response.body = {}
response
end
delete_os_interface(server_id, port_id)
click to toggle source
def delete_os_interface(server_id, port_id)
true
end
delete_security_group(security_group_id)
click to toggle source
def delete_security_group(security_group_id)
data[:security_groups].delete security_group_id.to_s
response = Excon::Response.new
response.status = 202
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response.body = {}
response
end
delete_security_group_rule(security_group_rule_id)
click to toggle source
def delete_security_group_rule(security_group_rule_id)
security_group = data[:security_groups].values.find { |sg| sg["rules"].find { |sgr| sgr["id"].to_s == security_group_rule_id.to_s } }
security_group["rules"].reject! { |sgr| sgr["id"] == security_group_rule_id }
response = Excon::Response.new
response.status = 202
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response.body = {}
response
end
delete_server(server_id)
click to toggle source
def delete_server(server_id)
response = Excon::Response.new
server = list_servers_detail.body['servers'].find { |srv| srv['id'] == server_id }
if server
if server['status'] == 'BUILD'
response.status = 409
raise(Excon::Errors.status_error({:expects => 204}, response))
else
data[:last_modified][:servers].delete(server_id)
data[:servers].delete(server_id)
response.status = 204
server_groups = data[:server_groups]
if server_groups
group_id, = server_groups.find { |_id, grp| grp[:members].include?(server_id) }
server_groups[group_id][:members] -= [server_id] if group_id
end
end
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
delete_server_group(group_id)
click to toggle source
def delete_server_group(group_id)
response = Excon::Response.new
response.status = data[:server_groups].delete(group_id) ? 204 : 404
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
delete_service(_host, _binary, _optional_params = nil)
click to toggle source
def delete_service(_host, _binary, _optional_params = nil)
response = Excon::Response.new
response.status = 204
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
delete_snapshot(snapshot_id)
click to toggle source
def delete_snapshot(snapshot_id)
response = Excon::Response.new
response.status = 204
if list_snapshots_detail.body['snapshots'].find { |snap| snap['id'] == snapshot_id }
data[:snapshots].delete(snapshot_id)
else
raise Fog::Compute::OpenStack::NotFound
end
response
end
delete_volume(volume_id)
click to toggle source
def delete_volume(volume_id)
response = Excon::Response.new
if list_volumes.body['volumes'].map { |v| v['id'] }.include? volume_id
data[:volumes].delete(volume_id)
response.status = 204
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
detach_volume(server_id, attachment_id)
click to toggle source
def detach_volume(server_id, attachment_id)
response = Excon::Response.new
if data[:volumes][attachment_id] &&
data[:volumes][attachment_id]['attachments'].reject! { |attachment| attachment['serverId'] == server_id }
data[:volumes][attachment_id]['status'] = 'available'
response.status = 202
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
disable_service(_host, _binary, _optional_params = nil)
click to toggle source
def disable_service(_host, _binary, _optional_params = nil)
response = Excon::Response.new
response.status = 200
response.body = {
"service" => {
"host" => "host1",
"binary" => "nova-compute",
"status" => "disabled"
}
}
response
end
disable_service_log_reason(_host, _binary, _disabled_reason, _optional_params = nil)
click to toggle source
def disable_service_log_reason(_host, _binary, _disabled_reason, _optional_params = nil)
response = Excon::Response.new
response.status = 200
response.body = {
"service" => {
"host" => "host1",
"binary" => "nova-compute",
"status" => "disabled",
"disabled_reason" => "test2"
}
}
response
end
disassociate_address(_server_id, _ip_address)
click to toggle source
def disassociate_address(_server_id, _ip_address)
response = Excon::Response.new
response.status = 202
response.headers = {
"Content-Type" => "text/html, charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
enable_service(_host, _binary, _optional_params = nil)
click to toggle source
def enable_service(_host, _binary, _optional_params = nil)
response = Excon::Response.new
response.status = 200
response.body = {
"service" => {
"host" => "host1",
"binary" => "nova-compute",
"status" => "enabled"
}
}
response
end
evacuate_server(_server_id, _host, _on_shared_storage, _admin_password = nil)
click to toggle source
def evacuate_server(_server_id, _host, _on_shared_storage, _admin_password = nil)
response = Excon::Response.new
response.status = 202
response
end
get_address(_address_id)
click to toggle source
def get_address(_address_id)
response = Excon::Response.new
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26",
"Content-Type" => "application/json",
"Content-Length" => "105",
"Date" => Date.new
}
response.body = {
"floating_ip" => {
"instance_id" => nil,
"ip" => "192.168.27.129",
"fixed_ip" => nil,
"id" => 1,
"pool" => "nova"
}
}
response
end
get_aggregate(_uuid)
click to toggle source
def get_aggregate(_uuid)
response = Excon::Response.new
response.status = 2040
response.body = {'aggregate' => data[:aggregates].first.merge("hosts" => [])}
response
end
get_console_output(_server_id, _log_length)
click to toggle source
def get_console_output(_server_id, _log_length)
response = Excon::Response.new
response.status = 200
response
end
get_flavor_details(flavor_ref)
click to toggle source
def get_flavor_details(flavor_ref)
response = Excon::Response.new
flavor = {
'1' => {'id' => '1', 'name' => '256 server', 'ram' => 256, 'disk' => 10, 'swap' => '1', 'vcpus' => 1, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
'2' => {'id' => '2', 'name' => '512 server', 'ram' => 512, 'disk' => 20, 'swap' => '1', 'vcpus' => 2, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
'3' => {'id' => '3', 'name' => '1GB server', 'ram' => 1024, 'disk' => 40, 'swap' => '2', 'vcpus' => 2, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
'4' => {'id' => '4', 'name' => '2GB server', 'ram' => 2048, 'disk' => 80, 'swap' => '4', 'vcpus' => 4, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
'5' => {'id' => '5', 'name' => '4GB server', 'ram' => 4096, 'disk' => 160, 'swap' => '8', 'vcpus' => 8, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
'6' => {'id' => '6', 'name' => '8GB server', 'ram' => 8192, 'disk' => 320, 'swap' => '16', 'vcpus' => 16, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
'7' => {'id' => '7', 'name' => '15.5GB server', 'ram' => 15872, 'disk' => 620, 'swap' => '32', 'vcpus' => 32, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []}
}[flavor_ref]
if flavor
response.status = 200
response.body = {
'flavor' => flavor
}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
get_host_details(_host)
click to toggle source
def get_host_details(_host)
response = Excon::Response.new
response.status = 200
response.body = {"host" => [
{"resource" => {
"project" => "(total)",
"memory_mb" => 64427,
"host" => "cn28.la-1-3.morphcloud.net",
"cpu" => 12,
"disk_gb" => 1608
}},
{"resource" => {
"project" => "(used_now)",
"memory_mb" => 1753,
"host" => "cn28.la-1-3.morphcloud.net",
"cpu" => 3,
"disk_gb" => 33
}},
{"resource" => {
"project" => "(used_max)",
"memory_mb" => 7168,
"host" => "cn28.la-1-3.morphcloud.net",
"cpu" => 3,
"disk_gb" => 45
}},
{"resource" => {
"project" => "bf8301f5164f4790889a1bc2bfb16d99",
"memory_mb" => 5120,
"host" => "cn28.la-1-3.morphcloud.net",
"cpu" => 2,
"disk_gb" => 35
}},
{"resource" => {
"project" => "3bb4d0301c5f47d5b4d96a361fcf96f4",
"memory_mb" => 2048,
"host" => "cn28.la-1-3.morphcloud.net",
"cpu" => 1,
"disk_gb" => 10
}}
]}
response
end
get_hypervisor(hypervisor_id)
click to toggle source
def get_hypervisor(hypervisor_id)
response = Excon::Response.new
response.status = 200
response.body = {
"hypervisor" => {
"cpu_info" => {
"arch" => "x86_64",
"model" => "Nehalem",
"vendor" => "Intel",
"features" => [
"pge",
"clflush"
],
"topology" => {
"cores" => 1,
"threads" => 1,
"sockets" => 4
}
},
"current_workload" => 0,
"status" => "enabled",
"state" => "up",
"disk_available_least" => 0,
"host_ip" => "1.1.1.1",
"free_disk_gb" => 1028,
"free_ram_mb" => 7680,
"hypervisor_hostname" => "fake-mini",
"hypervisor_type" => "fake",
"hypervisor_version" => 1000,
"id" => hypervisor_id,
"local_gb" => 1028,
"local_gb_used" => 0,
"memory_mb" => 8192,
"memory_mb_used" => 512,
"running_vms" => 0,
"service" => {
"host" => "host1",
"id" => 7,
"disabled_reason" => null
},
"vcpus" => 1,
"vcpus_used" => 0
}
}
response
end
get_hypervisor_statistics(_tenant_id)
click to toggle source
def get_hypervisor_statistics(_tenant_id)
response = Excon::Response.new
response.status = 200
response.body = {
"hypervisor_statistics" => {
"count" => 1,
"current_workload" => 0,
"disk_available_least" => 0,
"free_disk_gb" => 1028,
"free_ram_mb" => 7680,
"local_gb" => 1028,
"local_gb_used" => 0,
"memory_mb" => 8192,
"memory_mb_used" => 512,
"running_vms" => 0,
"vcpus" => 1,
"vcpus_used" => 0
}
}
response
end
get_image_details(image_id)
click to toggle source
def get_image_details(image_id)
response = Excon::Response.new
image = list_images_detail.body['images'].find { |im| im['id'] == image_id }
if image
response.status = [200, 203][rand(2)]
response.body = {'image' => image}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
get_limits(_options = {})
click to toggle source
def get_limits(_options = {})
rate_limits = [
{'regex' => '.*',
'limit' => [
{'next-available' => '2012-11-22T16:13:44Z',
'unit' => 'MINUTE',
'verb' => 'POST',
'remaining' => 9,
'value' => 10},
{'next-available' => '2012-11-23T00:46:14Z',
'unit' => 'MINUTE',
'verb' => 'PUT',
'remaining' => 10,
'value' => 10},
{'next-available' => '2012-11-22T16:14:30Z',
'unit' => 'MINUTE',
'verb' => 'DELETE',
'remaining' => 99,
'value' => 100}
],
'uri' => '*'},
{'regex' => '^/servers',
'limit' => [
{'next-available' => '2012-11-23T00:46:14Z',
'unit' => 'DAY',
'verb' => 'POST',
'remaining' => 50,
'value' => 50}
],
'uri' => '*/servers'},
{'regex' => '.*changes-since.*',
'limit' => [
{'next-available' => '2012-11-23T00:46:14Z',
'unit' => 'MINUTE',
'verb' => 'GET',
'remaining' => 3,
'value' => 3}
],
'uri' => '*changes-since*'}
]
absolute_limits = {
'maxServerMeta' => 128,
'maxTotalInstances' => 10,
'maxPersonality' => 5,
'maxImageMeta' => 128,
'maxPersonalitySize' => 10240,
'maxSecurityGroupRules' => 20,
'maxTotalKeypairs' => 100,
'maxSecurityGroups' => 10,
'maxTotalCores' => 20,
'maxTotalFloatingIps' => 10,
'maxTotalRAMSize' => 51200,
'totalCoresUsed' => -1,
'totalRAMUsed' => -2048,
'totalInstancesUsed' => -1,
'totalSecurityGroupsUsed' => 0,
'totalFloatingIpsUsed' => 0
}
Excon::Response.new(
:status => 200,
:body => {
'limits' => {
'rate' => rate_limits,
'absolute' => absolute_limits
}
}
)
end
get_os_interface(server_id,port_id)
click to toggle source
def get_os_interface(server_id,port_id)
Excon::Response.new(
:body => {'interfaceAttachment' => data[:os_interfaces].first},
:status => 200
)
end
get_quota(tenant_id)
click to toggle source
def get_quota(tenant_id)
response = Excon::Response.new
response.status = 200
response.body = {
'quota_set' => (data[:quota_updated] || data[:quota]).merge('id' => tenant_id)
}
response
end
get_quota_defaults(tenant_id)
click to toggle source
def get_quota_defaults(tenant_id)
response = Excon::Response.new
response.status = 200
response.body = {
'quota_set' => data[:quota].merge('id' => tenant_id)
}
response
end
get_security_group(security_group_id)
click to toggle source
def get_security_group(security_group_id)
security_group = data[:security_groups][security_group_id.to_s]
response = Excon::Response.new
if security_group
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-63a90344-7c4d-42e2-936c-fd748bced1b3",
"Content-Type" => "application/json",
"Content-Length" => "167",
"Date" => Date.new
}
response.body = {
"security_group" => security_group
}
else
raise Fog::Compute::OpenStack::NotFound, "Security group #{security_group_id} does not exist"
end
response
end
get_security_group_rule(security_group_rule_id)
click to toggle source
def get_security_group_rule(security_group_rule_id)
security_group_rule = nil
data[:security_groups].find { |_id, sg| security_group_rule = sg["rules"].find { |sgr| sgr["id"].to_s == security_group_rule_id.to_s } }
response = Excon::Response.new
if security_group_rule
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-63a90344-7c4d-42e2-936c-fd748bced1b3",
"Content-Type" => "application/json",
"Content-Length" => "167",
"Date" => Date.new
}
response.body = {
"security_group_rule" => security_group_rule
}
else
raise Fog::Compute::OpenStack::NotFound, "Security group rule #{security_group_rule_id} does not exist"
end
response
end
get_server_details(server_id)
click to toggle source
def get_server_details(server_id)
response = Excon::Response.new
server = list_servers_detail.body['servers'].find { |srv| srv['id'] == server_id }
if server
response.status = [200, 203][rand(2)]
response.body = {'server' => server}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
get_server_group(group_id)
click to toggle source
def get_server_group(group_id)
grp = data[:server_groups][group_id]
response = Excon::Response.new
response.status = 200
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response.body = {'server_group' => {
'id' => group_id,
'name' => grp[:name],
'policies' => grp[:policies],
'members' => grp[:members],
'metadata' => {},
'project_id' => 'test-project',
'user_id' => 'test-user'
}}
response
end
get_server_password(server_id)
click to toggle source
def get_server_password(server_id)
response = Excon::Response.new
server = list_servers_detail.body['servers'].find { |srv| srv['id'] == server_id }
if server
response.status = [200, 203][rand(2)]
response.body = {'server' => server}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
get_server_volumes(server_id)
click to toggle source
def get_server_volumes(server_id)
response = Excon::Response.new
response.status = 200
data = self.data[:volumes].values.select do |vol|
vol['attachments'].find { |attachment| attachment["serverId"] == server_id }
end
response.body = {'volumeAttachments' => data.map! { |vol| vol['attachments'] }.flatten(1)}
response
end
get_snapshot_details(snapshot_id)
click to toggle source
def get_snapshot_details(snapshot_id)
response = Excon::Response.new
if snapshot = list_snapshots_detail.body['snapshots'].find do |snap|
snap['id'] == snapshot_id
end
response.status = 200
response.body = {'snapshot' => snapshot}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
get_usage(tenant_id, date_start, date_end)
click to toggle source
def get_usage(tenant_id, date_start, date_end)
response = Excon::Response.new
response.status = 200
response.body = {"tenant_usage" =>
{"total_memory_mb_usage" => 0.0,
"total_vcpus_usage" => 0.0,
"total_hours" => 0.0,
"tenant_id" => tenant_id,
"stop" => date_start,
"start" => date_end,
"total_local_gb_usage" => 0.0,
"server_usages" => [{
"hours" => 0.0,
"uptime" => 69180,
"local_gb" => 0,
"ended_at" => nil,
"name" => "test server",
"tenant_id" => tenant_id,
"vcpus" => 1,
"memory_mb" => 512,
"state" => "active",
"flavor" => "m1.tiny",
"started_at" => "2012-03-05 09:11:44"
}]}}
response
end
get_vnc_console(_server_id, _console_type)
click to toggle source
def get_vnc_console(_server_id, _console_type)
response = Excon::Response.new
response.status = 200
response.body = {
"console" => {
"url" => "http://192.168.27.100:6080/vnc_auto.html?token=c3606020-d1b7-445d-a88f-f7af48dd6a20",
"type" => "novnc"
}
}
response
end
get_volume_details(volume_id)
click to toggle source
def get_volume_details(volume_id)
response = Excon::Response.new
if data = self.data[:volumes][volume_id]
if data['status'] == 'creating' && Time.now - Time.parse(data['createdAt']) >= Fog::Mock.delay
data['status'] = 'available'
end
response.status = 200
response.body = {'volume' => data}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
list_address_pools()
click to toggle source
def list_address_pools
response = Excon::Response.new
response.status = 200
response.body = {
'floating_ip_pools' => [
{'name' => 'nova'}
]
}
response
end
list_addresses(server_id)
click to toggle source
def list_addresses(server_id)
response = Excon::Response.new
server = list_servers_detail.body['servers'].find { |srv| srv['id'] == server_id }
if server
response.status = [200, 203][rand(2)]
response.body = {'addresses' => server['addresses']}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
list_aggregates(_options = {})
click to toggle source
def list_aggregates(_options = {})
response = Excon::Response.new
response.status = 200
response.body = {'aggregates' => [{
"availability_zone" => "nova",
"created_at" => "2012-11-16T06:22:23.032493",
"deleted" => false,
"deleted_at" => nil,
"metadata" => {
"availability_zone" => "nova"
},
"id" => 1,
"name" => "name",
"updated_at" => nil
}]}
response
end
list_all_addresses(_options = {})
click to toggle source
def list_all_addresses(_options = {})
response = Excon::Response.new
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-d4a21158-a86c-44a6-983a-e25645907f26",
"Content-Type" => "application/json",
"Content-Length" => "378",
"Date" => Date.new
}
response.body = {
"floating_ips" => [
{
"instance_id" => nil,
"ip" => "192.168.27.129",
"fixed_ip" => nil,
"id" => 1,
"pool" => "nova"
},
{
"instance_id" => nil,
"ip" => "192.168.27.130",
"fixed_ip" => nil,
"id" => 2,
"pool" => "nova"
},
{
"instance_id" => nil,
"ip" => "192.168.27.131",
"fixed_ip" => nil,
"id" => 3,
"pool" => "nova"
},
{
"instance_id" => nil,
"ip" => "192.168.27.132",
"fixed_ip" => nil,
"id" => 4,
"pool" => "nova"
}
]
}
response
end
list_endpoints()
click to toggle source
list_flavors(_options = {})
click to toggle source
def list_flavors(_options = {})
response = Excon::Response.new
response.status = 200
response.body = {
'flavors' => [
{'name' => '256 server', 'id' => '1', 'links' => ['https://itdoesntmatterwhatshere.heh']},
{'name' => '512 server', 'id' => '2', 'links' => ['https://itdoesntmatterwhatshere.heh']},
{'name' => '1GB server', 'id' => '3', 'links' => ['https://itdoesntmatterwhatshere.heh']},
{'name' => '2GB server', 'id' => '4', 'links' => ['https://itdoesntmatterwhatshere.heh']},
{'name' => '4GB server', 'id' => '5', 'links' => ['https://itdoesntmatterwhatshere.heh']},
{'name' => '8GB server', 'id' => '6', 'links' => ['https://itdoesntmatterwhatshere.heh']},
{'name' => '15.5GB server', 'id' => '7', 'links' => ['https://itdoesntmatterwhatshere.heh']}
]
}
response
end
list_flavors_detail(_options = {})
click to toggle source
def list_flavors_detail(_options = {})
response = Excon::Response.new
response.status = 200
response.body = {
'flavors' => [
{'id' => '1', 'name' => '256 server', 'ram' => 256, 'disk' => 10, 'swap' => '1', 'vcpus' => 1, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
{'id' => '2', 'name' => '512 server', 'ram' => 512, 'disk' => 20, 'swap' => '1', 'vcpus' => 2, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
{'id' => '3', 'name' => '1GB server', 'ram' => 1024, 'disk' => 40, 'swap' => '2', 'vcpus' => 2, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
{'id' => '4', 'name' => '2GB server', 'ram' => 2048, 'disk' => 80, 'swap' => '4', 'vcpus' => 4, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
{'id' => '5', 'name' => '4GB server', 'ram' => 4096, 'disk' => 160, 'swap' => '8', 'vcpus' => 8, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
{'id' => '6', 'name' => '8GB server', 'ram' => 8192, 'disk' => 320, 'swap' => '16', 'vcpus' => 16, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []},
{'id' => '7', 'name' => '15.5GB server', 'ram' => 15872, 'disk' => 620, 'swap' => '32', 'vcpus' => 32, 'OS-FLV-EXT-DATA:ephemeral' => 1, 'links' => []}
]
}
response
end
list_hosts(_options = {})
click to toggle source
def list_hosts(_options = {})
response = Excon::Response.new
response.status = 200
response.body = {"hosts" => [
{"host_name" => "host.test.net", "service" => "compute", "zone" => "az1"}
]}
response
end
list_hypervisor_servers(hypervisor_id, _options = {})
click to toggle source
def list_hypervisor_servers(hypervisor_id, _options = {})
response = Excon::Response.new
response.status = 200
response.body = {'hypervisors' => [
{
"hypervisor_hostname" => "fake-mini",
"id" => hypervisor_id,
"state" => "up",
"status" => "enabled",
"servers" => [
{
"name" => "test_server1",
"uuid" => "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
},
{
"name" => "test_server2",
"uuid" => "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
}
]
}
]}
response
end
list_hypervisors(_options = {})
click to toggle source
def list_hypervisors(_options = {})
response = Excon::Response.new
response.status = 200
response.body = {'hypervisors' => [
{"hypervisor_hostname" => "fake-mini", "id" => 2, "state" => "up", "status" => "enabled"}
]}
response
end
list_hypervisors_detail(_options = {})
click to toggle source
def list_hypervisors_detail(_options = {})
response = Excon::Response.new
response.status = 200
response.body = {
"hypervisors" => [{
"cpu_info" => {
"arch" => "x86_64",
"model" => "Nehalem",
"vendor" => "Intel",
"features" => [
"pge",
"clflush"
],
"topology" => {
"cores" => 1,
"threads" => 1,
"sockets" => 4
}
},
"current_workload" => 0,
"status" => "enabled",
"state" => "up",
"disk_available_least" => 0,
"host_ip" => "1.1.1.1",
"free_disk_gb" => 1028,
"free_ram_mb" => 7680,
"hypervisor_hostname" => "fake-mini",
"hypervisor_type" => "fake",
"hypervisor_version" => 1000,
"id" => 2,
"local_gb" => 1028,
"local_gb_used" => 0,
"memory_mb" => 8192,
"memory_mb_used" => 512,
"running_vms" => 0,
"service" => {
"host" => "host1",
"id" => 7,
"disabled_reason" => null
},
"vcpus" => 1,
"vcpus_used" => 0
}],
"hypervisors_links" => [
{
"href" => "http://openstack.example.com/v2.1/6f70656e737461636b20342065766572/hypervisors/detail?limit=1&marker=2",
"rel" => "next"
}
]
}
response
end
list_images()
click to toggle source
def list_images
response = Excon::Response.new
data = list_images_detail.body['images']
images = []
data.each do |image|
images << image.reject { |key, _value| !['id', 'name', 'links'].include?(key) }
end
response.status = [200, 203][rand(2)]
response.body = {'images' => images}
response
end
list_images_detail(_filters = {})
click to toggle source
def list_images_detail(_filters = {})
response = Excon::Response.new
images = data[:images].values
images.each do |image|
case image['status']
when 'SAVING'
if Time.now - data[:last_modified][:images][image['id']] >= Fog::Mock.delay
image['status'] = 'ACTIVE'
end
end
end
response.status = [200, 203][rand(2)]
response.body = {'images' => images.map { |image| image.reject { |key, _value| !['id', 'name', 'links', 'minRam', 'minDisk', 'metadata', 'status', 'updated'].include?(key) } }}
response
end
list_key_pairs(_options = {})
click to toggle source
def list_key_pairs(_options = {})
response = Excon::Response.new
response.status = 200
response.headers = {
"X-Compute-Request-Id" => "req-c373a42c-2825-4e60-8d34-99416ea850be",
"Content-Type" => "application/json",
"Content-Length" => "360",
"Date" => Date.new
}
response.body = {
"keypairs" => [{
"keypair" => {
"public_key" => "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgQDCdAZLjln1tJbLVVkNHjWFSoKen2nZbk39ZfqhZJOMdeFdz02GWBS4rcuHboeGg/gozKRwsLu4N6NLPlYtbK/NapJIvgO/djBp+FG1QZNtLPsx7j4hVJac3yISGms+Xtu4cEv6j5sFDzAgTQbWz0Z1+9qOq9ngdaoW+YClfQ== vagrant@nova\n",
"name" => "test_key",
"fingerprint" => "97:86:f4:15:68:0c:7b:a7:e5:8f:f0:bd:1f:27:65:ad"
}
}]
}
response
end
list_os_interfaces(server_id)
click to toggle source
def list_os_interfaces(server_id)
Excon::Response.new(
:body => {'interfaceAttachments' => data[:os_interfaces]},
:status => 200
)
end
list_private_addresses(server_id)
click to toggle source
def list_private_addresses(server_id)
response = Excon::Response.new
server = list_servers_detail.body['servers'].find { |srv| srv['id'] == server_id }
if server
response.status = [200, 203][rand(2)]
response.body = {'private' => server['addresses']['private']}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
list_public_addresses(server_id)
click to toggle source
def list_public_addresses(server_id)
response = Excon::Response.new
server = list_servers_detail.body['servers'].find { |srv| srv['id'] == server_id }
if server
response.status = [200, 203][rand(2)]
response.body = {'public' => server['addresses']['public']}
response
else
raise Fog::Compute::OpenStack::NotFound
end
end
list_security_groups(options = {})
click to toggle source
def list_security_groups(options = {})
server_id = if options.kind_of?(Hash)
options.delete(:server_id)
else
options
end
security_groups = data[:security_groups].values
groups = if server_id
server_group_names =
Array(data[:server_security_group_map][server_id])
server_group_names.map do |name|
security_groups.find do |sg|
sg['name'] == name
end
end.compact
else
security_groups
end
Excon::Response.new(
:body => {'security_groups' => groups},
:headers => {
"X-Compute-Request-Id" => "req-#{Fog::Mock.random_base64(36)}",
"Content-Type" => "application/json",
"Date" => Date.new
},
:status => 200
)
end
list_server_groups(_options = {})
click to toggle source
def list_server_groups(_options = {})
groups = data[:server_groups].map do |id, group|
group.merge('id' => id, 'project_id' => 'test-project', 'user_id' => 'test-user')
end
Excon::Response.new(
:body => {'server_groups' => groups},
:status => 200
)
end
list_servers(_options = {})
click to toggle source
def list_servers(_options = {})
response = Excon::Response.new
data = list_servers_detail.body['servers']
servers = []
data.each do |server|
servers << server.reject { |key, _value| !['id', 'name', 'links'].include?(key) }
end
response.status = [200, 203][rand(2)]
response.body = {'servers' => servers}
response
end
list_servers_detail(_filters = {})
click to toggle source
def list_servers_detail(_filters = {})
response = Excon::Response.new
servers = data[:servers].values
servers.each do |server|
case server['status']
when 'BUILD'
if Time.now - data[:last_modified][:servers][server['id']] > Fog::Mock.delay * 2
server['status'] = 'ACTIVE'
end
end
end
response.status = [200, 203][rand(2)]
response.body = {'servers' => servers}
response
end
list_services(_parameters = nil)
click to toggle source
def list_services(_parameters = nil)
response = Excon::Response.new
response.status = 200
response.body = {
"services" => [{
"id" => 1,
"binary" => "nova-scheduler",
"host" => "host1",
"state" => "up",
"status" => "disabled",
"updated_at" => "2012-10-29T13:42:02.000000",
"zone" => "internal",
"disabled_reason" => "test2"
},
{
"id" => 2,
"binary" => "nova-compute",
"host" => "host1",
"state" => "up",
"status" => "disabled",
"updated_at" => "2012-10-29T13:42:05.000000",
"zone" => "nova",
"disabled_reason" => "test2"
},
{
"id" => 3,
"binary" => "nova-scheduler",
"host" => "host2",
"state" => "down",
"status" => "enabled",
"updated_at" => "2012-09-19T06:55:34.000000",
"zone" => "internal",
"disabled_reason" => "nil"
},
{
"id" => 4,
"binary" => "nova-compute",
"host" => "host2",
"state" => "down",
"status" => "disabled",
"updated_at" => "2012-09-18T08:03:38.000000",
"zone" => "nova",
"disabled_reason" => "test2"
}]
}
response
end
list_snapshots(_options = true)
click to toggle source
def list_snapshots(_options = true)
response = Excon::Response.new
response.status = 200
snapshots = data[:snapshots].values
response.body = {'snapshots' => snapshots}
response
end
list_snapshots_detail(_options = {})
click to toggle source
def list_snapshots_detail(_options = {})
response = Excon::Response.new
response.status = 200
snapshots = data[:snapshots].values
response.body = {'snapshots' => snapshots}
response
end
list_tenants()
click to toggle source
def list_tenants
response = Excon::Response.new
response.status = [200, 204][rand(2)]
response.body = {
'tenants_links' => [],
'tenants' => [
{'id' => '1',
'description' => 'Has access to everything',
'enabled' => true,
'name' => 'admin'},
{'id' => '2',
'description' => 'Normal tenant',
'enabled' => true,
'name' => 'default'},
{'id' => '3',
'description' => 'Disabled tenant',
'enabled' => false,
'name' => 'disabled'}
]
}
response
end
list_tenants_with_flavor_access(flavor_ref)
click to toggle source
def list_tenants_with_flavor_access(flavor_ref)
response = Excon::Response.new
response.status = 200
response.body = {
"flavor_access" => [{"tenant_id" => Fog::Mock.random_hex(33), "flavor_id" => flavor_ref.to_s}]
}
response
end
list_usages(_date_start = nil, _date_end = nil, _detailed = false)
click to toggle source
def list_usages(_date_start = nil, _date_end = nil, _detailed = false)
response = Excon::Response.new
response.status = 200
response.body = {"tenant_usages" => [{
"total_memory_mb_usage" => 0.00036124444444444445,
"total_vcpus_usage" => 7.055555555555556e-07,
"start" => "2012-03-06 05:05:56.349001",
"tenant_id" => "b97c8abba0c44a0987c63b858a4823e5",
"stop" => "2012-03-06 05:05:56.349255",
"total_hours" => 7.055555555555556e-07,
"total_local_gb_usage" => 0.0
}]}
response
end
list_volume_attachments(server_id)
click to toggle source
def list_volume_attachments(server_id)
Excon::Response.new(
:body => {
:volumeAttachments => [{
:device => '/dev/vdd',
:serverId => server_id,
:id => '24011ca7-9937-41e4-b19b-141307d1b656',
:volumeId => '24011ca7-9937-41e4-b19b-141307d1b656'
}]
},
:status => 200
)
end
list_volumes(_options = true)
click to toggle source
def list_volumes(_options = true)
Excon::Response.new(
:body => {'volumes' => data[:volumes].values},
:status => 200
)
end
list_volumes_detail(_options = {})
click to toggle source
def list_volumes_detail(_options = {})
Excon::Response.new(
:body => {'volumes' => data[:volumes].values},
:status => 200
)
end
list_zones(_options = {})
click to toggle source
def list_zones(_options = {})
Excon::Response.new(
:body => {"availabilityZoneInfo" => [
{
"zoneState" => {
"available" => true
},
"hosts" => nil,
"zoneName" => "nova"
}
]},
:status => 200
)
end
list_zones_detailed(_options = {})
click to toggle source
def list_zones_detailed(_options = {})
Excon::Response.new(
:body => {
"availabilityZoneInfo" => [
{
"zoneState" => {
"available" => true
},
"hosts" => {
"instack.localdomain" => {
"nova-conductor" => {
"available" => true,
"active" => true,
"updated_at" => "2015-07-22T07:40:08.000000"
},
"nova-scheduler" => {
"available" => true,
"active" => true,
"updated_at" => "2015-07-22T07:40:04.000000"
},
"nova-consoleauth" => {
"available" => true,
"active" => true,
"updated_at" => "2015-07-22T07:40:09.000000"
}
}
},
"zoneName" => "internal"
},
{
"zoneState" => {
"available" => true
},
"hosts" => {
"instack.localdomain" => {
"nova-compute" => {
"available" => true,
"active" => true,
"updated_at" => "2015-07-22T07:40:04.000000"
}
}
},
"zoneName" => "nova"
}
]
},
:status => 200
)
end
live_migrate_server(_server_id, _host, _block_migration, _disk_over_commit)
click to toggle source
def live_migrate_server(_server_id, _host, _block_migration, _disk_over_commit)
response = Excon::Response.new
response.status = 202
response
end
migrate_server(_server_id)
click to toggle source
def migrate_server(_server_id)
response = Excon::Response.new
response.status = 202
response
end
pause_server(_server_id)
click to toggle source
def pause_server(_server_id)
true
end
reboot_server(_server_id, _type = 'SOFT')
click to toggle source
def reboot_server(_server_id, _type = 'SOFT')
response = Excon::Response.new
response.status = 202
response
end
rebuild_server(server_id, _image_ref, _name, _admin_pass = nil, _metadata = nil, _personality = nil)
click to toggle source
def rebuild_server(server_id, _image_ref, _name, _admin_pass = nil, _metadata = nil, _personality = nil)
response = get_server_details(server_id)
response.body['server']['status'] = "REBUILD"
response
end
release_address(_address_id)
click to toggle source
def release_address(_address_id)
response = Excon::Response.new
response.status = 202
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response.body = {}
response
end
remove_aggregate_host(_uuid, _host_uuid)
click to toggle source
def remove_aggregate_host(_uuid, _host_uuid)
response = Excon::Response.new
response.status = 200
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response
end
remove_fixed_ip(_server_id, _address)
click to toggle source
def remove_fixed_ip(_server_id, _address)
true
end
remove_flavor_access(_flavor_ref, _tenant_id)
click to toggle source
def remove_flavor_access(_flavor_ref, _tenant_id)
response = Excon::Response.new
response.status = 200
response.body = {
"flavor_access" => []
}
response
end
remove_security_group(_server_id, _group_name)
click to toggle source
def remove_security_group(_server_id, _group_name)
response = Excon::Response.new
response.status = 200
response
end
rescue_server(_server_id)
click to toggle source
def rescue_server(_server_id)
true
end
reset_data()
click to toggle source
def reset_data
self.class.data.delete("#{@openstack_username}-#{@current_tenant}")
end
reset_server_state(server_id, status)
click to toggle source
def reset_server_state(server_id, status)
response = get_server_details(server_id)
response.body['server']['status'] = status.upcase
response
end
resize_server(_server_id, _flavor_ref)
click to toggle source
def resize_server(_server_id, _flavor_ref)
response = Excon::Response.new
response.status = 202
response
end
resume_server(_server_id)
click to toggle source
def resume_server(_server_id)
true
end
revert_resize_server(server_id)
click to toggle source
def revert_resize_server(server_id)
response = Excon::Response.new
response.status = 202
data[:servers][server_id]['flavorId'] = data[:servers][server_id]['old_flavorId']
data[:servers][server_id].delete('old_flavorId')
data[:last_modified][:servers][server_id] = Time.now
data[:servers][server_id]['status'] = 'ACTIVE'
response
end
server_actions(server_id)
click to toggle source
def server_actions(server_id)
response = Excon::Response.new
response.status = 200
response.body = [{
'instance_uuid' => server_id,
'user_id' => '7067d67a2b23435ca2366588680b66c3',
'start_time' => Time.now.iso8601,
'request_id' => "req-#{server_id}",
'action' => 'stop',
'message' => nil,
'project_id' => '9d5d0b877cf449fdae078659cfa12e86'
}]
response
end
server_diagnostics(server_id)
click to toggle source
def server_diagnostics(server_id)
end
set_tenant(_tenant)
click to toggle source
def set_tenant(_tenant)
true
end
shelve_offload_server(_server_id)
click to toggle source
def shelve_offload_server(_server_id)
true
end
shelve_server(_server_id)
click to toggle source
def shelve_server(_server_id)
true
end
start_server(_server_id)
click to toggle source
def start_server(_server_id)
true
end
stop_server(_server_id)
click to toggle source
def stop_server(_server_id)
true
end
suspend_server(_server_id)
click to toggle source
def suspend_server(_server_id)
true
end
unpause_server(_server_id)
click to toggle source
def unpause_server(_server_id)
true
end
unshelve_server(_server_id)
click to toggle source
def unshelve_server(_server_id)
true
end
update_aggregate(_uuid, _options = {})
click to toggle source
def update_aggregate(_uuid, _options = {})
response = Excon::Response.new
response.status = 200
response.headers = {
"Content-Type" => "text/html; charset=UTF-8",
"Content-Length" => "0",
"Date" => Date.new
}
response.body = {'aggregate' => data[:aggregates].first}
response
end
update_quota(_tenant_id, options = {})
click to toggle source
def update_quota(_tenant_id, options = {})
data[:quota_updated] = data[:quota].merge options
response = Excon::Response.new
response.status = 200
response.body = {'quota_set' => data[:quota_updated]}
response
end
update_server(server_id, options = {})
click to toggle source
def update_server(server_id, options = {})
response = Excon::Response.new
server = list_servers_detail.body['servers'].find { |srv| srv['id'] == server_id }
if server
if options['name']
server['name'] = options['name']
end
response.status = 200
response
else
raise Fog::Compute::OpenStack::NotFound
end
end