From 00ec36aa7ec8c46e491348d3995cd08529163dff Mon Sep 17 00:00:00 2001 From: Eugene Howe Date: Tue, 3 Jun 2014 15:49:48 -0400 Subject: [PATCH] support r3 instances & expose virtualization type --- lib/fog/aws/models/compute/flavors.rb | 50 +++++++++++++++++++ lib/fog/aws/models/compute/image.rb | 1 + .../aws/parsers/compute/describe_instances.rb | 2 +- .../requests/compute/describe_instances.rb | 2 +- lib/fog/aws/requests/compute/run_instances.rb | 1 + tests/aws/requests/compute/instance_tests.rb | 3 +- 6 files changed, 56 insertions(+), 3 deletions(-) diff --git a/lib/fog/aws/models/compute/flavors.rb b/lib/fog/aws/models/compute/flavors.rb index e4b60dc07..7fadb9e3f 100644 --- a/lib/fog/aws/models/compute/flavors.rb +++ b/lib/fog/aws/models/compute/flavors.rb @@ -304,6 +304,56 @@ module Fog :ram => 249856, :ebs_optimized_available => false, :instance_store_volumes => 8 + }, + { + :id => "r3.large", + :name => "R3 Large", + :bits => 64, + :cores => 2, + :ram => 15360, + :disk => 32, + :ebs_optimized_available => true, + :instance_store_volumes => 1 + }, + { + :id => "r3.xlarge", + :name => "R3 Extra Large", + :bits => 64, + :cores => 4, + :ram => 31232, + :disk => 80, + :ebs_optimized_available => true, + :instance_store_volumes => 1 + }, + { + :id => "r3.2xlarge", + :name => "R3 Double Extra Large", + :bits => 64, + :cores => 8, + :ram => 62464, + :disk => 160, + :ebs_optimized_available => true, + :instance_store_volumes => 1 + }, + { + :id => "r3.4xlarge", + :name => "R3 Quadruple Extra Large", + :bits => 64, + :cores => 16, + :ram => 124928, + :disk => 320, + :ebs_optimized_available => true, + :instance_store_volumes => 1 + }, + { + :id => "r3.8xlarge", + :name => "R3 Eight Extra Large", + :bits => 64, + :cores => 32, + :ram => 249856, + :disk => 640, + :ebs_optimized_available => true, + :instance_store_volumes => 2 } ] diff --git a/lib/fog/aws/models/compute/image.rb b/lib/fog/aws/models/compute/image.rb index 3d5406186..7255644c2 100644 --- a/lib/fog/aws/models/compute/image.rb +++ b/lib/fog/aws/models/compute/image.rb @@ -23,6 +23,7 @@ module Fog attribute :root_device_name, :aliases => 'rootDeviceName' attribute :tags, :aliases => 'tagSet' attribute :name + attribute :virtualization_type, :aliases => 'virtualizationType' def deregister(delete_snapshot = false) service.deregister_image(id) diff --git a/lib/fog/aws/parsers/compute/describe_instances.rb b/lib/fog/aws/parsers/compute/describe_instances.rb index 9d770a56e..c9f1b125d 100644 --- a/lib/fog/aws/parsers/compute/describe_instances.rb +++ b/lib/fog/aws/parsers/compute/describe_instances.rb @@ -32,7 +32,7 @@ module Fog when 'architecture', 'clientToken', 'dnsName', 'hypervisor', 'imageId', 'instanceId', 'instanceType', 'ipAddress', 'kernelId', 'keyName', 'instanceLifecycle', 'platform', 'privateDnsName', 'privateIpAddress', 'ramdiskId', - 'reason', 'requesterId', 'rootDeviceType', + 'reason', 'requesterId', 'rootDeviceName', 'rootDeviceType', 'spotInstanceRequestId', 'virtualizationType' @instance[name] = value when 'attachTime' diff --git a/lib/fog/aws/requests/compute/describe_instances.rb b/lib/fog/aws/requests/compute/describe_instances.rb index 6d51b16ff..47d57b5eb 100644 --- a/lib/fog/aws/requests/compute/describe_instances.rb +++ b/lib/fog/aws/requests/compute/describe_instances.rb @@ -236,7 +236,7 @@ module Fog 'ownerId' => instance['ownerId'], 'reservationId' => instance['reservationId'] } - 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']]) + 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', 'rootDeviceName', 'rootDeviceType', 'stateReason', 'virtualizationType'].include?(key)}.merge('tagSet' => self.data[:tag_sets][instance['instanceId']]) end end diff --git a/lib/fog/aws/requests/compute/run_instances.rb b/lib/fog/aws/requests/compute/run_instances.rb index 751177d72..ba576f1d7 100644 --- a/lib/fog/aws/requests/compute/run_instances.rb +++ b/lib/fog/aws/requests/compute/run_instances.rb @@ -238,6 +238,7 @@ module Fog 'privateDnsName' => nil, 'productCodes' => [], 'reason' => nil, + 'rootDeviceName' => block_device_mapping.first && block_device_mapping.first["deviceName"], 'rootDeviceType' => 'instance-store', 'virtualizationType' => 'paravirtual' } diff --git a/tests/aws/requests/compute/instance_tests.rb b/tests/aws/requests/compute/instance_tests.rb index a8d2d8802..030277663 100644 --- a/tests/aws/requests/compute/instance_tests.rb +++ b/tests/aws/requests/compute/instance_tests.rb @@ -28,6 +28,7 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do 'privateDnsName' => NilClass, 'productCodes' => Array, 'reason' => Fog::Nullable::String, + 'rootDeviceName' => Fog::Nullable::String, 'rootDeviceType' => String, 'sourceDestCheck' => Fog::Nullable::Boolean, 'subnetId' => Fog::Nullable::String, @@ -175,7 +176,7 @@ Shindo.tests('Fog::Compute[:aws] | instance requests', ['aws']) do key = Fog::Compute[:aws].key_pairs.create(:name => key_name) tests("#run_instances").formats(@run_instances_format) do - data = Fog::Compute[:aws].run_instances(@ami, 1, 1, 'InstanceType' => 't1.micro', 'KeyName' => key_name).body + data = Fog::Compute[:aws].run_instances(@ami, 1, 1, 'InstanceType' => 't1.micro', 'KeyName' => key_name, 'BlockDeviceMapping' => [{"DeviceName" => "/dev/sdp1", "VirtualName" => nil, "Ebs.VolumeSize" => 15}]).body @instance_id = data['instancesSet'].first['instanceId'] data end