Sha256: 6c1fb3ea4456b7cdbf7ca0343227f050ce39bbcc3216b47349bb541a8d7fb3bc

Contents?: true

Size: 1.45 KB

Versions: 2

Compression:

Stored size: 1.45 KB

Contents

module BBC
  module Cosmos
    module Config
      class AWS
        def initialize(ec2, s3)
          @ec2 = ec2
          @s3  = s3
        end

        def tags
          @tags ||= instance.tags
        end

        def region
          @region ||= ::AWS.config.region
        end

        def instance_id
          @instance_id ||= BBC::Cosmos.production? ? aws_instance_id : "instance_id"
        end

        def config(config, path)
          @config ||= BBC::Cosmos.production? ? s3_config(config[:component_resources_bucket], path, config[:environment], config[:configuration][:commit]) : config[:configuration]
        end

        private

        def s3_config_location
          tags['AppName']
        end

        def s3_config(bucket, path, env, version)
          JSON.parse(@s3.buckets[bucket].objects["#{path}/#{env}/config/#{version}/#{s3_config_location}.json"].read, :symbolize_names => true)
        end

        def instance
          BBC::Cosmos.production? ? aws_instance : dummy_instance
        end

        def dummy_instance
          Struct.new(:tags).new({
            "aws:cloudformation:stack-name" => "stack_name",
            "Component" => "component_name",
            "AppName"   => "app_name"
          })
        end

        def aws_instance
          @ec2.regions[region].instances[instance_id]
        end

        def aws_instance_id
          `curl http://169.254.169.254/latest/meta-data/instance-id`
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
bbc-cosmos-config-0.1.2 lib/bbc/cosmos/config/aws.rb
bbc-cosmos-config-0.1.1 lib/bbc/cosmos/config/aws.rb