class HerdstWorker::Configuration::Metadata
Attributes
aws_credentials[RW]
config[RW]
config_suffix[RW]
secrets[RW]
secrets_suffix[RW]
Public Class Methods
new(env, name, config)
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 16 def initialize(env, name, config) self.config = config self.config_suffix = "-#{name}-service-config" self.secrets_suffix = "-#{name}-service-secrets" self.secrets = {}.with_indifferent_access self.secrets["ENV"] = env begin self.reload! rescue Exception => ex if self.is_prod? puts "Failed to load metadata: #{ex.message}" else raise ex end end end
Public Instance Methods
[](key)
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 50 def [](key) self.secrets[key.to_s.upcase] end
[]=(key, value)
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 55 def []=(key, value) self.secrets[key.to_s.upcase] = value end
get_aws_credentials()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 60 def get_aws_credentials self.get_aws_credentials! rescue nil end
get_aws_credentials!()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 65 def get_aws_credentials! credentials = self.is_prod? ? make_request!(get_credentials_uri) : self.config.config_for(:aws) self.aws_credentials = Aws::Credentials.new( credentials["AccessKeyId"], credentials["SecretAccessKey"], credentials["Token"] ) Aws.config.update( region: self.get_aws_region, credentials: self.aws_credentials ) self.aws_credentials end
get_aws_region()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 85 def get_aws_region # "ap-southeast-2" self["AWS_REGION"] = (ENV["AWS_REGION"] || "us-east-1") end
get_secrets()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 45 def get_secrets self.secrets end
reload!()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 36 def reload! self.get_aws_credentials! self.set_task_info! self.get_config_and_secrets! self end
Protected Instance Methods
get_config_and_secrets!()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 130 def get_config_and_secrets! values = nil if self.is_prod? secrets_client = Aws::SecretsManager::Client.new( :region => self.secrets["AWS_REGION"], :credentials => self.aws_credentials ) config = secrets_client.get_secret_value({ :secret_id => (self.secrets["DEPLOYMENT_ENV"].to_s + self.config_suffix) }) secrets = secrets_client.get_secret_value({ :secret_id => (self.secrets["DEPLOYMENT_ENV"].to_s + self.secrets_suffix) }) values = Hash.new values.merge!(JSON.parse(config[:secret_string])) values.merge!(JSON.parse(secrets[:secret_string])) else values = self.config.config_for(:metadata) end values.each { |k, v| self[k] = v } if values end
is_prod?()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 93 def is_prod? self.secrets["ENV"] == "production" end
set_task_info!()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 98 def set_task_info! return self.secrets["DEPLOYMENT_ENV"] if self.secrets["DEPLOYMENT_ENV"] if self.is_prod? metadata = make_request!(get_metadata_uri) ecs_client = Aws::ECS::Client.new( :region => self.secrets["AWS_REGION"], :credentials => self.aws_credentials ) ecs_response = ecs_client.describe_tasks( :cluster => metadata["Cluster"], :tasks => [ metadata["TaskARN"] ], :include => ["TAGS"] ) ecs_response["tasks"][0]["tags"].each do |i| self[i["key"]] = i["value"] end report_error("Deployment env not found") unless self.secrets["DEPLOYMENT_ENV"] self["RELEASE_VERSION"] = ecs_response["tasks"][0]["containers"][0]["containerArn"] rescue nil else self["DEPLOYMENT_ENV"] = "development" end end
Private Instance Methods
get_credentials_uri()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 163 def get_credentials_uri "http://169.254.170.2" + ENV["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI"].to_s end
get_metadata_uri()
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 159 def get_metadata_uri ENV["ECS_CONTAINER_METADATA_URI"].to_s + "/task" end
make_request!(request_url)
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 167 def make_request!(request_url) uri = URI.parse(request_url) http = Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == "https") request = Net::HTTP::Get.new(uri.to_s) response = http.request(request) rescue nil if response && response.code.to_i === 200 return JSON.parse(response.body).with_indifferent_access else report_error("Failed to ger request: #{request_url}") end end
report_error(message)
click to toggle source
# File lib/herdst_worker/configuration/metadata.rb, line 180 def report_error(message) raise message end