cloudfoundry-community/bosh-cloudstack-cpi

View on GitHub
bosh-registry/lib/bosh/registry/instance_manager/aws.rb

Summary

Maintainability
A
30 mins
Test Coverage
# Copyright (c) 2009-2013 VMware, Inc.

module Bosh::Registry

  class InstanceManager

    class Aws < InstanceManager

      AWS_MAX_RETRIES = 2

      def initialize(cloud_config)
        validate_options(cloud_config)

        @logger = Bosh::Registry.logger

        @aws_properties = cloud_config["aws"]
        @aws_options = {
          :access_key_id => @aws_properties["access_key_id"],
          :secret_access_key => @aws_properties["secret_access_key"],
          :max_retries => @aws_properties["max_retries"] || AWS_MAX_RETRIES,
          :ec2_endpoint => "ec2.#{@aws_properties['region']}.amazonaws.com",
          :logger => @logger
        }
        @ec2 = AWS::EC2.new(@aws_options)
      end

      def validate_options(cloud_config)
        unless cloud_config.has_key?("aws") &&
            cloud_config["aws"].is_a?(Hash) &&
            cloud_config["aws"]["access_key_id"] &&
            cloud_config["aws"]["secret_access_key"] &&
            cloud_config["aws"]["region"]
          raise ConfigError, "Invalid AWS configuration parameters"
        end
      end

      # Get the list of IPs belonging to this instance
      def instance_ips(instance_id)
        instance = @ec2.instances[instance_id]
        ips = [instance.private_ip_address, instance.public_ip_address]
        if instance.has_elastic_ip?
          ips << instance.elastic_ip.public_ip
        end
        ips
      rescue AWS::Errors::Base => e
        raise Bosh::Registry::AwsError, "AWS error: #{e}"
      end

    end

  end

end