From b9af7b26f09dbf88bb376446bbe496c2c3911da4 Mon Sep 17 00:00:00 2001 From: Wesley Beary Date: Sun, 19 Jul 2009 16:50:19 -0700 Subject: [PATCH] fixing up run/terminate instances docs/specs/etc --- lib/fog/aws/parsers/ec2/run_instances.rb | 14 ++++++---- .../aws/parsers/ec2/terminate_instances.rb | 10 ++++--- lib/fog/aws/requests/ec2/run_instances.rb | 25 ++++++++++++++++- .../aws/requests/ec2/terminate_instances.rb | 14 ++++++++-- spec/aws/ec2/run_instances_spec.rb | 28 +++++++++++++++++-- spec/aws/ec2/terminate_instances_spec.rb | 14 ++++++++-- 6 files changed, 87 insertions(+), 18 deletions(-) diff --git a/lib/fog/aws/parsers/ec2/run_instances.rb b/lib/fog/aws/parsers/ec2/run_instances.rb index 975ae8141..4c08612bc 100644 --- a/lib/fog/aws/parsers/ec2/run_instances.rb +++ b/lib/fog/aws/parsers/ec2/run_instances.rb @@ -6,8 +6,8 @@ module Fog class RunInstances < Fog::Parsers::Base def reset - @instance = { :monitoring => {}, :placement => {}, :product_codes => [] } - @response = { :group_set => [], :instance_set => [] } + @instance = { :instance_state => {}, :monitoring => {}, :placement => {}, :product_codes => [] } + @response = { :group_set => [], :instances_set => [] } end def start_element(name, attrs = []) @@ -25,6 +25,8 @@ module Fog @instance[:ami_launch_index] = @value when 'availabilityZone' @instance[:placement][:availability_zone] = @value + when 'code' + @instance[:instance_state][:code] = @value.to_i when 'dnsName' @instance[:dns_name] = @value when 'groupId' @@ -37,19 +39,19 @@ module Fog @instance[:image_id] = @value when 'instanceId' @instance[:instance_id] = @value - when 'instanceState' - @instance[:instance_state] = @value when 'instanceType' @instance[:instance_type] = @value when 'item' unless @in_group_set || @in_product_codes - @response[:instance_set] << @instance - @instance = { :monitoring => {}, :placement => {}, :product_codes => [] } + @response[:instances_set] << @instance + @instance = { :instance_state => {}, :monitoring => {}, :placement => {}, :product_codes => [] } end when 'kernelId' @instance[:kernel_id] = @value when 'launchTime' @instance[:launch_time] = Time.parse(@value) + when 'name' + @instance[:instance_state][:name] = @value when 'ownerId' @response[:owner_id] = @value when 'platform' diff --git a/lib/fog/aws/parsers/ec2/terminate_instances.rb b/lib/fog/aws/parsers/ec2/terminate_instances.rb index 0cf17df4c..a2a8d79e4 100644 --- a/lib/fog/aws/parsers/ec2/terminate_instances.rb +++ b/lib/fog/aws/parsers/ec2/terminate_instances.rb @@ -7,7 +7,7 @@ module Fog def reset @instance = { :previous_state => {}, :shutdown_state => {} } - @response = { :instance_set => [] } + @response = { :instances_set => [] } end def start_element(name, attrs = []) @@ -21,14 +21,16 @@ module Fog def end_element(name) case name + when 'instanceId' + @instance[:instance_id] = @value when 'item' - @response[:instance_set] << @instance + @response[:instances_set] << @instance @instance = { :previous_state => {}, :shutdown_state => {} } when 'code' if @in_previous_state - @instance[:previous_state][:code] = @value + @instance[:previous_state][:code] = @value.to_i elsif @in_shutdown_state - @instance[:shutdown_state][:code] = @value + @instance[:shutdown_state][:code] = @value.to_i end when 'name' if @in_previous_state diff --git a/lib/fog/aws/requests/ec2/run_instances.rb b/lib/fog/aws/requests/ec2/run_instances.rb index d64f2495f..3b916fb84 100644 --- a/lib/fog/aws/requests/ec2/run_instances.rb +++ b/lib/fog/aws/requests/ec2/run_instances.rb @@ -33,7 +33,30 @@ module Fog # * :virtual_name<~String> - ? # # ==== Returns - # FIXME: docs + # * response<~Fog::AWS::Response>: + # * body<~Hash>: + # * :group_set<~Array>: groups the instances are members in + # * group_name<~String> - Name of group + # * :instances_set<~Array>: returned instances + # * instance<~Hash>: + # * :ami_launch_index<~String> - reference to instance in launch group + # * :dns_name<~String> - public dns name, blank until instance is running + # * :image_id<~String> - image id of ami used to launch instance + # * :instance_id<~String> - id of the instance + # * :instance_state<~Hash>: + # * :code<~Integer> - current status code + # * :name<~String> - current status name + # * :instance_type<~String> - type of instance + # * :key_name<~String> - name of key used launch instances or blank + # * :launch_time<~Time> - time instance was launched + # * :monitoring<~Hash>: + # * :state<~Boolean - state of monitoring + # * :placement<~Hash>: + # * :availability_zone<~String> - Availability zone of the instance + # * :private_dns_name<~String> - private dns name, blank until instance is running + # * :reason<~String> - reason for most recent state transition, or blank + # * :owner_id<~String> - Id of owner + # * :request_id<~String> - Id of request def run_instances(image_id, min_count, max_count, options = {}) request({ 'Action' => 'RunInstances', diff --git a/lib/fog/aws/requests/ec2/terminate_instances.rb b/lib/fog/aws/requests/ec2/terminate_instances.rb index 18264ca81..58227a206 100644 --- a/lib/fog/aws/requests/ec2/terminate_instances.rb +++ b/lib/fog/aws/requests/ec2/terminate_instances.rb @@ -2,13 +2,23 @@ module Fog module AWS class EC2 - # Launch specified instances + # Terminate specified instances # # ==== Parameters # * instance_id<~Array> - Ids of instances to terminates # # ==== Returns - # FIXME: docs + # # * response<~Fog::AWS::Response>: + # * body<~Hash>: + # * :request_id<~String> - Id of request + # * :instances_set<~Array>: + # * :instance_id<~String> - id of the terminated instance + # * :previous_state<~Hash>: previous state of instance + # * :code<~Integer> - previous status code + # * :name<~String> - name of previous state + # * :shutdown_state<~Hash>: shutdown state of instance + # * :code<~Integer> - current status code + # * :name<~String> - name of current state def terminate_instances(instance_id = []) params = indexed_params('InstanceId', instance_id) request({ diff --git a/spec/aws/ec2/run_instances_spec.rb b/spec/aws/ec2/run_instances_spec.rb index c5b9ed487..76dd35c6d 100644 --- a/spec/aws/ec2/run_instances_spec.rb +++ b/spec/aws/ec2/run_instances_spec.rb @@ -3,13 +3,35 @@ require File.dirname(__FILE__) + '/../../spec_helper' describe 'EC2.run_instances' do after(:all) do - p ec2.terminate_instances([@instance_id]) + ec2.terminate_instances([@instance_id]) end it "should return proper attributes" do actual = ec2.run_instances('ami-5ee70037', 1, 1) - @instance_id = actual.body[:instance_set].first[:instance_id] - p actual + @instance_id = actual.body[:instances_set].first[:instance_id] + actual.body[:group_set].should be_an(Array) + actual.body[:group_set].first.should be_a(String) + actual.body[:instances_set].should be_an(Array) + instance = actual.body[:instances_set].first + instance[:ami_launch_index].should be_a(String) + instance[:dns_name].should be_a(String) + instance[:image_id].should be_a(String) + instance[:instance_id].should be_a(String) + instance[:instance_state].should be_an(Hash) + instance[:instance_state][:code].should be_an(Integer) + instance[:instance_state][:name].should be_an(String) + instance[:instance_type].should be_a(String) + # instance[:key_name].should be_a(String) + instance[:launch_time].should be_a(Time) + instance[:monitoring].should be_a(Hash) + [false, true].should include(instance[:monitoring][:state]) + instance[:placement].should be_a(Hash) + instance[:placement][:availability_zone].should be_a(String) + instance[:private_dns_name].should be_a(String) + instance[:reason].should be_a(String) + actual.body[:owner_id].should be_a(String) + actual.body[:request_id].should be_a(String) + actual.body[:reservation_id].should be_a(String) end end diff --git a/spec/aws/ec2/terminate_instances_spec.rb b/spec/aws/ec2/terminate_instances_spec.rb index f47457f8c..629bcf5e4 100644 --- a/spec/aws/ec2/terminate_instances_spec.rb +++ b/spec/aws/ec2/terminate_instances_spec.rb @@ -3,12 +3,22 @@ require File.dirname(__FILE__) + '/../../spec_helper' describe 'EC2.terminate_instances' do before(:all) do - @instance_id = ec2.run_instances('ami-5ee70037', 1, 1).body[:instance_set].first[:instance_id] + @instance_id = ec2.run_instances('ami-5ee70037', 1, 1).body[:instances_set].first[:instance_id] end it "should return proper attributes" do actual = ec2.terminate_instances([@instance_id]) - p actual + actual.body[:request_id].should be_a(String) + actual.body[:instances_set].should be_an(Array) + instance = actual.body[:instances_set].select {|instance| instance[:instance_id] == @instance_id}.first + instance[:previous_state].should be_a(Hash) + previous_state = instance[:previous_state] + previous_state[:code].should be_a(Integer) + previous_state[:name].should be_a(String) + instance[:shutdown_state].should be_a(Hash) + shutdown_state = instance[:shutdown_state] + shutdown_state[:code].should be_a(Integer) + shutdown_state[:name].should be_a(String) end end