class Lono::Cfn::Preview::Param

Public Instance Methods

existing_params() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 25
def existing_params
  existing = stack_parameters
  params = normalize(existing)
  subtract(params, noecho_params)
end
generated_parameters() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 45
def generated_parameters
  parameters = generate_all
  normalize(parameters)
end
new_params() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 32
def new_params
  params = optional_params.merge(generated_parameters)
  subtract(params, noecho_params)
end
noecho_params() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 58
def noecho_params
  noecho = stack_parameters.select { |p| p.parameter_value == '****' }
  normalize(noecho)
end
optional_params() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 51
def optional_params
  # normalizing to simple Hash
  optional_parameters.inject({}) do |result,(k,v)|
    result.merge(k => v["Default"].to_s)
  end
end
run() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 9
def run
  return unless stack_exists?(@stack)

  generated_parameters # eager call generated_parameters so its output is above Parameter Diff Preview
  puts "Parameter Diff Preview:".color(:green)
  if @options[:noop]
    puts "NOOP CloudFormation parameters preview for #{@stack} update"
    return
  end

  write_to_tmp(existing_path, existing_params)
  write_to_tmp(new_path, new_params)

  show_diff(existing_path, new_path)
end
stack_parameters() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 64
def stack_parameters
  resp = cfn.describe_stacks(stack_name: @stack)
  stack = resp.stacks.first
  stack.parameters
end
subtract(h1,h2) click to toggle source

Remove items with the same key. The value can be different. This removes the noecho params.

# File lib/lono/cfn/preview/param.rb, line 38
def subtract(h1,h2)
  hash = h1.reject do |k,v|
    h2.keys.include?(k)
  end
  Hash[hash.sort_by {|k,v| k}]
end

Private Instance Methods

existing_path() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 98
def existing_path
  "#{tmp_base}/existing.json"
end
new_path() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 102
def new_path
  "#{tmp_base}/new.json"
end
normalize(list) click to toggle source

Returns simple Hash. Example:

{"foo"=>"1", "bar"=>"2"},
# File lib/lono/cfn/preview/param.rb, line 88
def normalize(list)
  camelized = list.map(&:to_h).map do |h|
    h.transform_keys {|k| k.to_s.camelize}
  end
  camelized.sort_by! { |h| h["ParameterKey"] }
  camelized.inject({}) do |result,h|
    result.merge(h["ParameterKey"] => h["ParameterValue"])
  end
end
output_template() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 72
def output_template
  Lono::Output::Template.new(@blueprint, @template)
end
tmp_base() click to toggle source
# File lib/lono/cfn/preview/param.rb, line 106
def tmp_base
  "/tmp/lono/params-preview"
end
write_to_tmp(path, hash) click to toggle source
# File lib/lono/cfn/preview/param.rb, line 77
def write_to_tmp(path, hash)
  text = JSON.pretty_generate(hash)
  FileUtils.mkdir_p(File.dirname(path))
  IO.write(path, text)
end