class Sfn::Command::Validate
Validate
command
Public Instance Methods
execute!()
click to toggle source
# File lib/sfn/command/validate.rb, line 12 def execute! if config[:all] validate_templates = sparkle_collection.templates[sparkle_collection.provider].keys elsif config[:group] validate_templates = sparkle_collection.templates[sparkle_collection.provider].keys.select do |template| template.split("__").first == config[:group] end else validate_templates = [config[:file]] end if validate_templates.empty? load_template_file validate_templates.push(config[:file]) end validate_templates.each do |template| config[:file] = template print_only_original = config[:print_only] config[:print_only] = true ui.info "#{ui.color("Template Validation (#{provider.connection.provider}): ", :bold)} #{config[:file].sub(Dir.pwd, "").sub(%r{^/}, "")}" file = load_template_file config[:print_only] = print_only_original raw_template = _format_json(parameter_scrub!(template_content(file))) if config[:print_only] ui.puts raw_template else validate_stack( file.respond_to?(:dump) ? file.dump : file, if config[:processing] sparkle_collection.get(:template, config[:file])[:name] else config[:file] end ) end end end
validate_stack(template, name)
click to toggle source
Validate
template with remote API and unpack nested templates if required
@param template [Hash] template data structure @param name [String] name of template @return [TrueClass]
# File lib/sfn/command/validate.rb, line 57 def validate_stack(template, name) resources = template.fetch("Resources", {}) nested_stacks = resources.find_all do |r_name, r_value| r_value.is_a?(Hash) && provider.connection.data[:stack_types].include?(r_value["Type"]) end nested_stacks.each do |n_name, n_resource| validate_stack(n_resource.fetch("Properties", {}).fetch("Stack", {}), "#{name} > #{n_name}") n_resource["Properties"].delete("Stack") end begin ui.info "Validating: #{ui.color(name, :bold)}" if config[:upload_root_template] upload_result = store_template("validation-stack", template, Smash.new) stack = provider.connection.stacks.build( :name => "validation-stack", :template_url => upload_result[:url], ) else stack = provider.connection.stacks.build( :name => "validation-stack", :template => parameter_scrub!(template), ) end result = api_action!(:api_stack => stack) do stack.validate end ui.info ui.color(" -> VALID", :bold, :green) true rescue => e ui.info ui.color(" -> INVALID", :bold, :red) ui.fatal e.message raise e end # Clear Compile Time Parameters from Config config[:compile_parameters] = {} end