class Blinkist::Config::AwsSsmAdapter

Constants

DEFAULT_PREFIX

Public Class Methods

new(env, app_name) click to toggle source
Calls superclass method Blinkist::Config::Adapter::new
# File lib/blinkist/config/adapters/aws_ssm_adapter.rb, line 9
def initialize(env, app_name)
  super env, app_name

  @items_cache = {}
  @client = Aws::SSM::Client.new
end

Public Instance Methods

get(key, default=nil, scope: nil) click to toggle source
# File lib/blinkist/config/adapters/aws_ssm_adapter.rb, line 16
def get(key, default=nil, scope: nil)
  prefix = prefix_for(scope)

  query_ssm_parameter prefix + key
rescue Aws::SSM::Errors::ParameterNotFound
  default
end
preload(scope: nil) click to toggle source
# File lib/blinkist/config/adapters/aws_ssm_adapter.rb, line 24
def preload(scope: nil)
  query_all_ssm_parameters prefix_for(scope)
end

Private Instance Methods

prefix_for(scope) click to toggle source
# File lib/blinkist/config/adapters/aws_ssm_adapter.rb, line 30
def prefix_for(scope)
  if scope.nil?
    DEFAULT_PREFIX + @app_name + "/"
  else
    DEFAULT_PREFIX + scope + "/"
  end
end
query_all_ssm_parameters(prefix) click to toggle source
# File lib/blinkist/config/adapters/aws_ssm_adapter.rb, line 45
def query_all_ssm_parameters(prefix)
  parameters = []
  next_token = nil

  # SSM limits the results and we need to loop
  loop do
    result = @client.get_parameters_by_path(
      path: prefix,
      recursive: true,
      with_decryption: true,
      next_token: next_token
    )

    parameters += result.parameters
    next_token = result.next_token

    break if next_token.nil?
  end

  parameters.map do |parameter|
    @items_cache[parameter.name] = parameter.value
  end
end
query_ssm_parameter(name) click to toggle source
# File lib/blinkist/config/adapters/aws_ssm_adapter.rb, line 38
def query_ssm_parameter(name)
  @items_cache[name] ||= @client.get_parameter(
    name: name,
    with_decryption: true
  ).parameter.value
end