Method: Sfn::CommandModule::Stack::InstanceMethods#populate_parameters!

Defined in:
lib/sfn/command_module/stack.rb

#populate_parameters!(sparkle, opts = {}) ⇒ Hash

Prompt for parameter values and store result

Parameters:

  • sparkle (SparkleFormation, Hash)
  • opts (Hash) (defaults to: {})

Options Hash (opts):

  • :current_parameters (Hash)

    current stack parameter values

  • :stack (Miasma::Models::Orchestration::Stack)

    existing stack

Returns:

  • (Hash)


238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
# File 'lib/sfn/command_module/stack.rb', line 238

def populate_parameters!(sparkle, opts = {})
  current_parameters = opts[:current_parameters] || {}
  current_stack = opts[:stack]
  parameter_prefix, stack_parameters = prefix_parameters_setup(sparkle)
  sparkle_root_name = sparkle.is_a?(SparkleFormation) ? sparkle.root.name : nil
  unless stack_parameters.empty?
    format_config_parameters!
    param_banner = false
    stack_parameters.each do |param_name, param_value|
      ns_key = locate_config_parameter_key(parameter_prefix, param_name, sparkle_root_name)
      # When parameter is a hash type, it is being set via
      # intrinsic function and we don't modify
      if function_set_parameter?(current_parameters[param_name])
        if !config[:parameters][ns_key].nil?
          ui.warn "Overriding mapped parameter value with explicit assignment `#{ns_key}`!"
        else
          if current_stack
            enable_set = validate_stack_parameter(current_stack, param_name, ns_key, current_parameters[param_name])
          else
            enable_set = true
          end
        end
        if enable_set
          # NOTE: direct set dumps the stack (nfi). Smash will
          # auto dup it, and works, so yay i guess.
          config[:parameters][ns_key] = current_parameters[param_name].is_a?(Hash) ?
            Smash.new(current_parameters[param_name]) :
            current_parameters[param_name].dup
          valid = true
        end
      else
        if current_stack && current_stack.data[:parent_stack]
          use_expected = validate_stack_parameter(current_stack, param_name, ns_key, current_parameters[param_name])
          unless use_expected
            current_parameters[param_name] = current_stack.parameters[param_name]
          end
        end
      end
      unless valid
        param_banner = set_parameter(sparkle, ns_key, param_name, param_value, current_parameters, param_banner)
      end
    end
  end
  Smash[
    config.fetch(:parameters, {}).map do |k, v|
      strip_key = parameter_prefix ? k.sub(/#{parameter_prefix.join("__")}_{2}?/, "") : k
      unless strip_key.include?("__")
        [strip_key, v]
      end
    end.compact
  ]
end