class Skeme::CloudProviders::Aws

Public Class Methods

new(options={}) click to toggle source

TODO: Allow a preferred region/az if it's known

# File lib/cloud_providers/aws.rb, line 23
def initialize(options={})
  @@logger = options[:logger]
  if options[:aws_access_key_id] && options[:aws_secret_access_key]
    @@logger.info("AWS credentials supplied.  EC2 Tagging Enabled.")
    fog_aws_compute = Fog::Compute.new({:aws_access_key_id => options[:aws_access_key_id], :aws_secret_access_key => options[:aws_secret_access_key], :provider => 'AWS'})
    fog_aws_compute.describe_regions.body['regionInfo'].each do |region|
      @@fog_aws_computes.store(region['regionName'],
        Fog::Compute.new({
          :aws_access_key_id => options[:aws_access_key_id],
          :aws_secret_access_key => options[:aws_secret_access_key],
          :provider => 'AWS',
          :host => region['regionEndpoint']
        })
      )
    end
  end
end

Public Instance Methods

set_tag(params={}) click to toggle source
# File lib/cloud_providers/aws.rb, line 41
def set_tag(params={})
  tag(params.merge({:action => "set"}))
end
unset_tag(params={}) click to toggle source
# File lib/cloud_providers/aws.rb, line 45
def unset_tag(params={})
  tag(params.merge({:action => "unset"}))
end

Private Instance Methods

tag(params={}) click to toggle source
# File lib/cloud_providers/aws.rb, line 51
def tag(params={})
  if @@fog_aws_computes
    tag = params[:ec2_tag] || params[:tag]
    setting = params[:action] == "set"

    taggable_resources = [:ec2_instance_id, :ec2_ebs_volume_id, :ec2_ebs_snapshot_id]
    supplied_id_type = taggable_resources & params.keys
    supplied_id_type.each do |resource_id_key|
      resource_id = params[resource_id_key]
      if setting
        @@logger.info("Tagging AWS resource id (#{resource_id}) with (#{tag})")
        not_found_exceptions = []
        @@fog_aws_computes.each do |key,val|
          begin
            val.create_tags(resource_id, {tag => nil})
          rescue Fog::Service::NotFound => e
            not_found_exceptions << e
          end
        end
        if @@fog_aws_computes.count > 0 && not_found_exceptions.count == @@fog_aws_computes.count
          raise not_found_exceptions.first
        end
      else
        @@logger.info("Removing tag (#{tag}) from AWS resource id (#{resource_id})")
        not_found_exceptions = []
        @@fog_aws_computes.each do |key,val|
          begin
            val.delete_tags(resource_id, {tag => nil})
          rescue Fog::Service::NotFound => e
            not_found_exceptions << e
          end
        end
        if @@fog_aws_computes.count > 0 && not_found_exceptions.count == @@fog_aws_computes.count
          raise not_found_exceptions.first
        end
      end

    end
  end
end