Skip to content
This repository has been archived by the owner on Jan 20, 2019. It is now read-only.

Commit

Permalink
Merge branch 'instance_attributes' of https://github.com/nstielau/ama…
Browse files Browse the repository at this point in the history
…zon-ec2 into nstielau-instance_attributes
  • Loading branch information
grempe committed Nov 21, 2010
2 parents 5be297c + bdbdfc5 commit da53f4b
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 9 deletions.
45 changes: 36 additions & 9 deletions lib/AWS/EC2/instances.rb
Expand Up @@ -92,30 +92,57 @@ def describe_instances( options = {} )
end


# Not yet implemented
# Returns information about an attribute of an instance.
#
# @todo Implement this method
# @option options [String] :instance_id (nil) ID of the instance on which the attribute will be queried.
# @option options [String] :attribute (nil) Specifies the attribute to query..
#
def describe_instance_attribute( options = {} )
raise "Not yet implemented"
raise ArgumentError, "No :instance_id provided" if options[:instance_id].nil? || options[:instance_id].empty?
raise ArgumentError, "No :attribute provided" if options[:attribute].nil? || options[:attribute].empty?
valid_attributes = %w(instanceType kernel ramdisk userData disableApiTermination instanceInitiatedShutdownBehavior rootDevice blockDeviceMapping)
raise ArgumentError, "Invalid :attribute provided" unless valid_attributes.include?(options[:attribute].to_s)
params = {}
params["InstanceId"] = options[:instance_id]
params["Attribute"] = options[:attribute]
return response_generator(:action => "DescribeInstanceAttribute", :params => params)
end


# Not yet implemented
# Modifies an attribute of an instance.
#
# @todo Implement this method
# @option options [String] :instance_id (nil) ID of the instance on which the attribute will be modified.
# @option options [String] :attribute (nil) Specifies the attribute to modify.
# @option options [String] :value (nil) The value of the attribute being modified.
#
def modify_instance_attribute( options = {} )
raise "Not yet implemented"
raise ArgumentError, "No :instance_id provided" if options[:instance_id].nil? || options[:instance_id].empty?
raise ArgumentError, "No :attribute provided" if options[:attribute].nil? || options[:attribute].empty?
raise ArgumentError, "No :value provided" if options[:value].nil?
valid_attributes = %w(instanceType kernel ramdisk userData disableApiTermination instanceInitiatedShutdownBehavior rootDevice blockDeviceMapping)
raise ArgumentError, "Invalid :attribute provided" unless valid_attributes.include?(options[:attribute].to_s)
params = {}
params["InstanceId"] = options[:instance_id]
params["Attribute"] = options[:attribute]
params["Value"] = options[:value].to_s
return response_generator(:action => "ModifyInstanceAttribute", :params => params)
end


# Not yet implemented
# Resets an attribute of an instance to its default value.
#
# @todo Implement this method
# @option options [String] :instance_id (nil) ID of the instance on which the attribute will be reset.
# @option options [String] :attribute (nil) The instance attribute to reset to the default value.
#
def reset_instance_attribute( options = {} )
raise "Not yet implemented"
raise ArgumentError, "No :instance_id provided" if options[:instance_id].nil? || options[:instance_id].empty?
raise ArgumentError, "No :attribute provided" if options[:attribute].nil? || options[:attribute].empty?
valid_attributes = %w(kernel ramdisk)
raise ArgumentError, "Invalid :attribute provided" unless valid_attributes.include?(options[:attribute].to_s)
params = {}
params["InstanceId"] = options[:instance_id]
params["Attribute"] = options[:attribute]
return response_generator(:action => "ResetInstanceAttribute", :params => params)
end


Expand Down
89 changes: 89 additions & 0 deletions test/test_EC2_instances.rb
Expand Up @@ -217,6 +217,27 @@
</UnmonitorInstancesResponse>
RESPONSE

@describe_instance_attribute_response_body = <<-RESPONSE
<DescribeInstanceAttributeResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
<instanceId>i-10a64379</instanceId>
<kernel>
<value>aki-f70657b2</value>
</kernel>
</DescribeInstanceAttributeResponse>
RESPONSE

@modify_instance_attribute_response_body = <<-RESPONSE
<ModifyInstanceAttributeResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
<return>true</return>
</ModifyInstanceAttributeResponse>
RESPONSE

@reset_instance_attribute_response_body = <<-RESPONSE
<ResetInstanceAttributeResponse xmlns="http://ec2.amazonaws.com/doc/2010-08-31/">
<return>true</return>
</ResetInstanceAttributeResponse>
RESPONSE
end


Expand Down Expand Up @@ -612,4 +633,72 @@
@response.instancesSet.item[1].monitoring.state.should.equal "disabling"
end

specify "should get an ArgumentError when trying to describe/modify/reset an instance attribute without an istance id" do
lambda { @ec2.describe_instance_attribute(:attribute => "ramdisk") }.should.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:attribute => "ramdisk") }.should.raise(AWS::ArgumentError)
lambda { @ec2.reset_instance_attribute(:attribute => "ramdisk") }.should.raise(AWS::ArgumentError)

lambda { @ec2.describe_instance_attribute(:attribute => "ramdisk", :instance_id => nil) }.should.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:attribute => "ramdisk", :instance_id => nil) }.should.raise(AWS::ArgumentError)
lambda { @ec2.reset_instance_attribute(:attribute => "ramdisk", :instance_id => nil) }.should.raise(AWS::ArgumentError)

lambda { @ec2.describe_instance_attribute(:attribute => "ramdisk", :instance_id => "") }.should.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:attribute => "ramdisk", :instance_id => "") }.should.raise(AWS::ArgumentError)
lambda { @ec2.reset_instance_attribute(:attribute => "ramdisk", :instance_id => "") }.should.raise(AWS::ArgumentError)
end

specify "should get an ArgumentError when trying to describe/modify/reset an instance attribute without an attribute" do
lambda { @ec2.describe_instance_attribute(:instance_id => "i-33457a5a") }.should.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:instance_id => "i-33457a5a") }.should.raise(AWS::ArgumentError)
lambda { @ec2.reset_instance_attribute(:instance_id => "i-33457a5a") }.should.raise(AWS::ArgumentError)

lambda { @ec2.describe_instance_attribute(:instance_id => "i-33457a5a", :attribute => nil) }.should.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:instance_id => "i-33457a5a", :attribute => nil) }.should.raise(AWS::ArgumentError)
lambda { @ec2.reset_instance_attribute(:instance_id => "i-33457a5a", :attribute => nil) }.should.raise(AWS::ArgumentError)

lambda { @ec2.describe_instance_attribute(:instance_id => "i-33457a5a", :attribute => "") }.should.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:instance_id => "i-33457a5a", :attribute => "") }.should.raise(AWS::ArgumentError)
lambda { @ec2.reset_instance_attribute(:instance_id => "i-33457a5a", :attribute => "") }.should.raise(AWS::ArgumentError)
end

specify "should get an ArgumentError when trying to describe/modify/reset an instance attribute without a valid attribute" do
lambda { @ec2.describe_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'party') }.should.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'party') }.should.raise(AWS::ArgumentError)
lambda { @ec2.reset_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'party') }.should.raise(AWS::ArgumentError)
end

specify "should not get an ArgumentError when trying to describe/modify/reset an instance attribute with a valid attribute" do
@ec2.stubs(:make_request).returns stub(:body => @describe_instance_attribute_response_body, :is_a? => true)
%w(instanceType kernel ramdisk userData disableApiTermination instanceInitiatedShutdownBehavior rootDevice blockDeviceMapping).each do |a|
lambda { @ec2.describe_instance_attribute(:instance_id => "i-33457a5a", :attribute => a) }.should.not.raise(AWS::ArgumentError)
lambda { @ec2.modify_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'party') }.should.raise(AWS::ArgumentError)
end
%w(kernel ramdisk).each do |a|
lambda { @ec2.reset_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'party') }.should.raise(AWS::ArgumentError)
end
end

specify "should successfully describe instance attribute" do
@ec2.stubs(:make_request).with('DescribeInstanceAttribute', {"InstanceId"=>"i-33457a5a", "Attribute" => "kernel"}).
returns stub(:body => @describe_instance_attribute_response_body, :is_a? => true)
@response = @ec2.describe_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'kernel')
@response.class.should.equal Hash
@response.kernel.value.should.equal "aki-f70657b2"
end

specify "should successfully modify instance attribute" do
@ec2.stubs(:make_request).with('ModifyInstanceAttribute', {"InstanceId"=>"i-33457a5a", "Attribute" => "disableApiTermination", "Value" => "true"}).
returns stub(:body => @modify_instance_attribute_response_body, :is_a? => true)
@response = @ec2.modify_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'disableApiTermination', :value => true)
@response.class.should.equal Hash
@response.return.should.equal "true"
end

specify "should successfully reset instance attribute" do
@ec2.stubs(:make_request).with('ResetInstanceAttribute', {"InstanceId"=>"i-33457a5a", "Attribute" => "kernel"}).
returns stub(:body => @reset_instance_attribute_response_body, :is_a? => true)
@response = @ec2.reset_instance_attribute(:instance_id => "i-33457a5a", :attribute => 'kernel')
@response.class.should.equal Hash
@response.return.should.equal "true"
end
end

0 comments on commit da53f4b

Please sign in to comment.