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