1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

[AWS] adds 'hypervisor', 'lifecycle', 'requester_id', 'source_dest_check', 'spot_instance_request_id', 'virtualization_type' attributes to instances, also fixes instance tests to work in non-mocking mode

This commit is contained in:
Eric Stonfer 2013-05-13 10:17:55 -04:00
parent 55c720ba9f
commit 8defd8d9ff
6 changed files with 108 additions and 96 deletions

View file

@ -20,12 +20,14 @@ module Fog
attribute :ebs_optimized, :aliases => 'ebsOptimized' attribute :ebs_optimized, :aliases => 'ebsOptimized'
attribute :groups attribute :groups
attribute :flavor_id, :aliases => 'instanceType' attribute :flavor_id, :aliases => 'instanceType'
attribute :hypervisor
attribute :iam_instance_profile, :aliases => 'iamInstanceProfile' attribute :iam_instance_profile, :aliases => 'iamInstanceProfile'
attribute :image_id, :aliases => 'imageId' attribute :image_id, :aliases => 'imageId'
attr_accessor :instance_initiated_shutdown_behavior attr_accessor :instance_initiated_shutdown_behavior
attribute :kernel_id, :aliases => 'kernelId' attribute :kernel_id, :aliases => 'kernelId'
attribute :key_name, :aliases => 'keyName' attribute :key_name, :aliases => 'keyName'
attribute :created_at, :aliases => 'launchTime' attribute :created_at, :aliases => 'launchTime'
attribute :lifecycle, :aliases => 'instanceLifecycle'
attribute :monitoring, :squash => 'state' attribute :monitoring, :squash => 'state'
attribute :placement_group, :aliases => 'groupName' attribute :placement_group, :aliases => 'groupName'
attribute :platform, :aliases => 'platform' attribute :platform, :aliases => 'platform'
@ -35,15 +37,19 @@ module Fog
attribute :public_ip_address, :aliases => 'ipAddress' attribute :public_ip_address, :aliases => 'ipAddress'
attribute :ramdisk_id, :aliases => 'ramdiskId' attribute :ramdisk_id, :aliases => 'ramdiskId'
attribute :reason attribute :reason
attribute :requester_id, :aliases => 'requesterId'
attribute :root_device_name, :aliases => 'rootDeviceName' attribute :root_device_name, :aliases => 'rootDeviceName'
attribute :root_device_type, :aliases => 'rootDeviceType' attribute :root_device_type, :aliases => 'rootDeviceType'
attribute :security_group_ids, :aliases => 'securityGroupIds' attribute :security_group_ids, :aliases => 'securityGroupIds'
attribute :source_dest_check, :aliases => 'sourceDestCheck'
attribute :spot_instance_request_id, :aliases => 'spotInstanceRequestId'
attribute :state, :aliases => 'instanceState', :squash => 'name' attribute :state, :aliases => 'instanceState', :squash => 'name'
attribute :state_reason, :aliases => 'stateReason' attribute :state_reason, :aliases => 'stateReason'
attribute :subnet_id, :aliases => 'subnetId' attribute :subnet_id, :aliases => 'subnetId'
attribute :tenancy attribute :tenancy
attribute :tags, :aliases => 'tagSet' attribute :tags, :aliases => 'tagSet'
attribute :user_data attribute :user_data
attribute :virtualization_type, :aliases => 'virtualizationType'
attribute :vpc_id, :aliases => 'vpcId' attribute :vpc_id, :aliases => 'vpcId'
attr_accessor :password attr_accessor :password

View file

@ -31,10 +31,11 @@ module Fog
@instance[@context.last][name] = value @instance[@context.last][name] = value
when 'availabilityZone', 'tenancy' when 'availabilityZone', 'tenancy'
@instance['placement'][name] = value @instance['placement'][name] = value
when 'architecture', 'clientToken', 'dnsName', 'imageId', when 'architecture', 'clientToken', 'dnsName', 'hypervisor', 'imageId',
'instanceId', 'instanceType', 'ipAddress', 'kernelId', 'instanceId', 'instanceType', 'ipAddress', 'kernelId', 'keyName',
'keyName', 'platform', 'privateDnsName', 'privateIpAddress', 'ramdiskId', 'instanceLifecycle', 'platform', 'privateDnsName', 'privateIpAddress', 'ramdiskId',
'reason', 'rootDeviceType', 'virtualizationType' 'reason', 'requesterId', 'rootDeviceType',
'spotInstanceRequestId', 'virtualizationType'
@instance[name] = value @instance[name] = value
when 'attachTime' when 'attachTime'
@block_device_mapping[name] = Time.parse(value) @block_device_mapping[name] = Time.parse(value)
@ -103,6 +104,12 @@ module Fog
@instance['monitoring'][name] = (value == 'enabled') @instance['monitoring'][name] = (value == 'enabled')
when 'ebsOptimized' when 'ebsOptimized'
@instance['ebsOptimized'] = (value == 'true') @instance['ebsOptimized'] = (value == 'true')
when 'sourceDestCheck'
if value == 'true'
@instance[name] = true
else
@instance[name] = false
end
# Eucalyptus passes status in schema non conforming way # Eucalyptus passes status in schema non conforming way
when 'stateCode' when 'stateCode'
@instance['instanceState']['code'] = value @instance['instanceState']['code'] = value

View file

@ -24,10 +24,11 @@ module Fog
case name case name
when 'amiLaunchIndex' when 'amiLaunchIndex'
@instance[name] = value.to_i @instance[name] = value.to_i
when 'architecture', 'clientToken', 'dnsName', 'imageId', when 'architecture', 'clientToken', 'dnsName', 'hypervisor', 'imageId',
'instanceId', 'instanceType', 'ipAddress', 'kernelId', 'instanceId', 'instanceType', 'ipAddress', 'kernelId', 'keyName',
'keyName', 'privateDnsName', 'privateIpAddress', 'ramdiskId', 'instanceLifecycle', 'privateDnsName', 'privateIpAddress', 'ramdiskId',
'reason', 'rootDeviceType' 'reason', 'requesterId', 'rootDeviceType', 'sourceDestCheck',
'spotInstanceRequestId', 'virtualizationType'
@instance[name] = value @instance[name] = value
when 'availabilityZone', 'tenancy' when 'availabilityZone', 'tenancy'
@instance['placement'][name] = value @instance['placement'][name] = value

View file

@ -212,7 +212,7 @@ module Fog
'ownerId' => instance['ownerId'], 'ownerId' => instance['ownerId'],
'reservationId' => instance['reservationId'] 'reservationId' => instance['reservationId']
} }
reservation_set[instance['reservationId']]['instancesSet'] << instance.reject{|key,value| !['amiLaunchIndex', 'architecture', 'blockDeviceMapping', 'clientToken', 'dnsName', 'ebsOptimized', 'iamInstanceProfile', 'imageId', 'instanceId', 'instanceState', 'instanceType', 'ipAddress', 'kernelId', 'keyName', 'launchTime', 'monitoring', 'networkInterfaces', 'ownerId', 'placement', 'platform', 'privateDnsName', 'privateIpAddress', 'productCodes', 'ramdiskId', 'reason', 'rootDeviceType', 'stateReason'].include?(key)}.merge('tagSet' => self.data[:tag_sets][instance['instanceId']]) reservation_set[instance['reservationId']]['instancesSet'] << instance.reject{|key,value| !['amiLaunchIndex', 'architecture', 'blockDeviceMapping', 'clientToken', 'dnsName', 'ebsOptimized', 'hypervisor', 'iamInstanceProfile', 'imageId', 'instanceId', 'instanceState', 'instanceType', 'ipAddress', 'kernelId', 'keyName', 'launchTime', 'monitoring', 'networkInterfaces', 'ownerId', 'placement', 'platform', 'privateDnsName', 'privateIpAddress', 'productCodes', 'ramdiskId', 'reason', 'rootDeviceType', 'stateReason', 'virtualizationType'].include?(key)}.merge('tagSet' => self.data[:tag_sets][instance['instanceId']])
end end
end end

View file

@ -143,6 +143,8 @@ module Fog
'blockDeviceMapping' => [], 'blockDeviceMapping' => [],
'clientToken' => options['clientToken'], 'clientToken' => options['clientToken'],
'dnsName' => nil, 'dnsName' => nil,
'ebsOptimized' => options['EbsOptimized'] || false,
'hypervisor' => 'xen',
'imageId' => image_id, 'imageId' => image_id,
'instanceId' => instance_id, 'instanceId' => instance_id,
'instanceState' => { 'code' => 0, 'name' => 'pending' }, 'instanceState' => { 'code' => 0, 'name' => 'pending' },
@ -156,7 +158,7 @@ module Fog
'productCodes' => [], 'productCodes' => [],
'reason' => nil, 'reason' => nil,
'rootDeviceType' => 'instance-store', 'rootDeviceType' => 'instance-store',
'ebsOptimized' => options['EbsOptimized'] || false 'virtualizationType' => 'paravirtual'
} }
instances_set << instance instances_set << instance
self.data[:instances][instance_id] = instance.merge({ self.data[:instances][instance_id] = instance.merge({

View file

@ -3,7 +3,8 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
@instance_format = { @instance_format = {
'architecture' => String, 'architecture' => String,
'amiLaunchIndex' => Integer, 'amiLaunchIndex' => Integer,
'blockDeviceMapping' => [], 'attachmentId' => Fog::Nullable::String,
'blockDeviceMapping' => [Fog::Nullable::Hash],
'clientToken' => Fog::Nullable::String, 'clientToken' => Fog::Nullable::String,
'dnsName' => NilClass, 'dnsName' => NilClass,
'ebsOptimized' => Fog::Boolean, 'ebsOptimized' => Fog::Boolean,
@ -11,11 +12,11 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
'instanceId' => String, 'instanceId' => String,
'instanceState' => {'code' => Integer, 'name' => String}, 'instanceState' => {'code' => Integer, 'name' => String},
'instanceType' => String, 'instanceType' => String,
# 'ipAddress' => String,
'kernelId' => Fog::Nullable::String, 'kernelId' => Fog::Nullable::String,
'keyName' => Fog::Nullable::String, 'keyName' => Fog::Nullable::String,
'launchTime' => Time, 'launchTime' => Time,
'monitoring' => {'state' => Fog::Boolean}, 'monitoring' => {'state' => Fog::Boolean},
'networkInterfaceId' => Fog::Nullable::String,
'placement' => { 'placement' => {
'availabilityZone' => String, 'availabilityZone' => String,
'groupName' => Fog::Nullable::String, 'groupName' => Fog::Nullable::String,
@ -23,12 +24,12 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
}, },
'platform' => Fog::Nullable::String, 'platform' => Fog::Nullable::String,
'privateDnsName' => NilClass, 'privateDnsName' => NilClass,
# 'privateIpAddress' => String, 'productCodes' => Array,
'productCodes' => [],
# 'ramdiskId' => Fog::Nullable::String,
'reason' => Fog::Nullable::String, 'reason' => Fog::Nullable::String,
# 'rootDeviceName' => String,
'rootDeviceType' => String, 'rootDeviceType' => String,
'sourceDestCheck' => Fog::Nullable::Boolean,
'subnetId' => Fog::Nullable::String,
'vpcId' => Fog::Nullable::String
} }
@run_instances_format = { @run_instances_format = {
@ -46,14 +47,16 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
'instancesSet' => [@instance_format.merge( 'instancesSet' => [@instance_format.merge(
'architecture' => String, 'architecture' => String,
'dnsName' => Fog::Nullable::String, 'dnsName' => Fog::Nullable::String,
'iamInstanceProfile' => {}, 'hypervisor' => String,
'iamInstanceProfile' => Hash,
'ipAddress' => Fog::Nullable::String, 'ipAddress' => Fog::Nullable::String,
'networkInterfaces' => [], 'networkInterfaces' => Array,
'ownerId' => String, 'ownerId' => String,
'privateDnsName' => Fog::Nullable::String, 'privateDnsName' => Fog::Nullable::String,
'privateIpAddress' => Fog::Nullable::String, 'privateIpAddress' => Fog::Nullable::String,
'stateReason' => Hash, 'stateReason' => Hash,
'tagSet' => Hash 'tagSet' => Hash,
'virtualizationType' => String
)], )],
'ownerId' => Fog::Nullable::String, 'ownerId' => Fog::Nullable::String,
'reservationId' => String 'reservationId' => String
@ -152,21 +155,14 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
'status' => String 'status' => String
}] }]
}, },
'eventsSet' => [{ 'eventsSet' => [Fog::Nullable::Hash],
'code' => String,
'description' => String,
'notBefore' => Time,
'notAfter' => Time
}] }]
}]
} }
tests('success') do tests('success') do
@instance_id = nil @instance_id = nil
@ami = if ENV['FASTER_TEST_PLEASE'] @ami = if ENV['FASTER_TEST_PLEASE']
'ami-6bbb1302' # ubuntu 12.04 daily build 20120728 'ami-79c0ae10' # ubuntu 12.04 daily build 20120728
else else
# Use a MS Windows AMI to test #get_password_data # Use a MS Windows AMI to test #get_password_data
'ami-71b50018' # Amazon Public Images - Windows_Server-2008-SP2-English-64Bit-Base-2012.07.11 'ami-71b50018' # Amazon Public Images - Windows_Server-2008-SP2-English-64Bit-Base-2012.07.11
@ -197,8 +193,8 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do
# Launch another instance to test filters # Launch another instance to test filters
another_server = Fog::Compute[:aws].servers.create another_server = Fog::Compute[:aws].servers.create
tests("#describe_instances('instance-id' => '#{@instance_id}')").formats(@describe_instances_format) do tests("#describe_instances('instance-id' => '#{@instance_id}'").formats(@describe_instances_format) do
body = Fog::Compute[:aws].describe_instances('instance-id' => @instance_id).body body = Fog::Compute[:aws].describe_instances('instance-id' => "#{@instance_id}").body
tests("returns 1 instance").returns(1) { body['reservationSet'].size } tests("returns 1 instance").returns(1) { body['reservationSet'].size }
body body
end end