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