lib/rubber/cloud/aws.rb in axtro-rubber-1.0.2.8 vs lib/rubber/cloud/aws.rb in axtro-rubber-1.2.0
- old
+ new
@@ -13,17 +13,22 @@
@ec2 = AWS::EC2::Base.new(:access_key_id => @aws_env.access_key, :secret_access_key => @aws_env.secret_access_key)
@ec2elb = AWS::ELB::Base.new(:access_key_id => @aws_env.access_key, :secret_access_key => @aws_env.secret_access_key)
AWS::S3::Base.establish_connection!(:access_key_id => @aws_env.access_key, :secret_access_key => @aws_env.secret_access_key)
end
-
def create_instance(ami, ami_type, security_groups, availability_zone)
- response = @ec2.run_instances(:image_id => ami, :key_name => @aws_env.key_name, :instance_type => ami_type, :group_id => security_groups, :availability_zone => availability_zone)
+ response = @ec2.run_instances(:image_id => ami, :key_name => @aws_env.key_name, :instance_type => ami_type, :security_group => security_groups, :availability_zone => availability_zone)
instance_id = response.instancesSet.item[0].instanceId
return instance_id
end
+ def create_spot_instance_request(spot_price, ami, ami_type, security_groups, availability_zone)
+ response = @ec2.request_spot_instances(:spot_price => spot_price, :image_id => ami, :key_name => @aws_env.key_name, :instance_type => ami_type, :security_group => security_groups, :availability_zone => availability_zone)
+ request_id = response.spotInstanceRequestSet.item[0].spotInstanceRequestId
+ return request_id
+ end
+
def describe_instances(instance_id=nil)
instances = []
opts = {}
opts[:instance_id] = instance_id if instance_id
@@ -35,10 +40,11 @@
instance[:external_host] = item.dnsName
instance[:external_ip] = IPSocket.getaddress(instance[:external_host]) rescue nil
instance[:internal_host] = item.privateDnsName
instance[:state] = item.instanceState.name
instance[:zone] = item.placement.availabilityZone
+ instance[:platform] = item.platform || 'linux'
instances << instance
end
end if response.reservationSet
return instances
@@ -258,10 +264,11 @@
return images
end
def destroy_image(image_id)
image = describe_images(image_id).first
+ raise "Could not find image: #{image_id}, aborting destroy_image" if image.nil?
image_location = image[:location]
bucket = image_location.split('/').first
image_name = image_location.split('/').last.gsub(/\.manifest\.xml$/, '')
@ec2.deregister_image(:image_id => image_id)
@@ -273,10 +280,14 @@
if s3_bucket.empty?
s3_bucket.delete
end
end
+ def destroy_spot_instance_request(request_id)
+ @ec2.cancel_spot_instance_requests :spot_instance_request_id => request_id
+ end
+
def describe_load_balancers(name=nil)
lbs = []
opts = {}
opts[:load_balancer_names] = name if name
response = @ec2elb.describe_load_balancers(opts)
@@ -300,9 +311,28 @@
end
lbs << lb
end if response.describeLoadBalancersResult
return lbs
+ end
+
+ def describe_spot_instance_requests(request_id=nil)
+ requests = []
+ opts = {}
+ opts[:spot_instance_request_id] = request_id if request_id
+ response = @ec2.describe_spot_instance_requests(opts)
+ response.spotInstanceRequestSet.item.each do |item|
+ request = {}
+ request[:id] = item.spotInstanceRequestId
+ request[:spot_price] = item.spotPrice
+ request[:state] = item.state
+ request[:created_at] = item.createTime
+ request[:type] = item.launchSpecification.instanceType
+ request[:image_id] = item.launchSpecification.imageId
+ request[:instance_id] = item.instanceId
+ requests << request
+ end if response.spotInstanceRequestSet
+ return requests
end
end
end