Module: Amplify::ParameterStoreClient

Defined in:
lib/amplify/parameter_store_client.rb

Class Method Summary collapse

Class Method Details

.aws_region=(val) ⇒ Object



7
8
9
10
# File 'lib/amplify/parameter_store_client.rb', line 7

def self.aws_region=(val)
  ::Chef::Log.info "Setting aws_region to #{val}"
  @aws_region = val
end

.clientObject



12
13
14
15
# File 'lib/amplify/parameter_store_client.rb', line 12

def self.client
  require 'aws-sdk'
  Aws::SSM::Client.new(region: @aws_region)
end

.deep_merge(result, value) ⇒ Object



17
18
19
20
21
22
23
24
25
26
# File 'lib/amplify/parameter_store_client.rb', line 17

def self.deep_merge(result, value)
  result = result.merge(value) do |_key, oldval, newval|
    if oldval.respond_to?(:merge) && newval.respond_to?(:merge)
      deep_merge(oldval, newval)
    else
      newval
    end
  end
  ::Hashie::Mash.new(result)
end

.get_parameters_by_path(prefix_path) ⇒ Object

rubocop:disable Metrics/MethodLength rubocop:disable Lint/Loop



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/amplify/parameter_store_client.rb', line 30

def self.get_parameters_by_path(prefix_path)
  next_token = nil
  result = []

  begin
    api_result = client.get_parameters_by_path(
      path: prefix_path,
      recursive: true,
      max_results: 10,
      next_token: next_token,
      with_decryption: true
    )
    next_token = api_result.next_token
    result = result.concat api_result.parameters
  end until next_token.nil?

  result
end

.read(path) ⇒ Object

rubocop:enable Metrics/MethodLength rubocop:enable Lint/Loop



51
52
53
54
55
56
57
# File 'lib/amplify/parameter_store_client.rb', line 51

def self.read(path)
  prefix_path = "/#{path}"
  result = get_parameters_by_path(prefix_path)
           .reduce({}) { |aggregate, param| reduce_parameters(aggregate, param, prefix_path) }

  result.empty? ? nil : result
end

.reduce_parameters(result, parameter, prefix_path) ⇒ Object



59
60
61
62
63
64
65
66
67
68
# File 'lib/amplify/parameter_store_client.rb', line 59

def self.reduce_parameters(result, parameter, prefix_path)
  sub_path = remove_prefix(prefix_path, parameter.name)
  name_parts = sub_path.split '/'

  value = name_parts.reverse.reduce(parameter.value) do |leaf, root|
    ::Hashie::Mash.new(root => leaf)
  end

  deep_merge(result, value)
end

.remove_prefix(prefix_path, parameter_name) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/amplify/parameter_store_client.rb', line 70

def self.remove_prefix(prefix_path, parameter_name)
  # prefix_path = '/secret/<env>/databags'
  # parameter_name = '/secret/<env>/databags/<app>/<name>'
  first_index = prefix_path.length + 1 # add /
  last_index = parameter_name.length - 1
  parameter_name[first_index..last_index]
end