lib/kubernetes-deploy/template_sets.rb in kubernetes-deploy-0.28.0 vs lib/kubernetes-deploy/template_sets.rb in kubernetes-deploy-0.29.0

- old
+ new

@@ -1,32 +1,34 @@ # frozen_string_literal: true +require 'kubernetes-deploy/delayed_exceptions' +require 'kubernetes-deploy/ejson_secret_provisioner' module KubernetesDeploy class TemplateSets + include DelayedExceptions VALID_TEMPLATES = %w(.yml.erb .yml .yaml .yaml.erb) # private inner class class TemplateSet + include DelayedExceptions def initialize(template_dir:, file_whitelist: [], logger:) @template_dir = template_dir @files = file_whitelist @logger = logger end - def with_resource_definitions(render_erb: false, current_sha: nil, bindings: nil) + def with_resource_definitions_and_filename(render_erb: false, current_sha: nil, bindings: nil, raw: false) if render_erb @renderer = Renderer.new( template_dir: @template_dir, logger: @logger, current_sha: current_sha, bindings: bindings, ) end - @files.each do |filename| + with_delayed_exceptions(@files, KubernetesDeploy::InvalidTemplateError) do |filename| next if filename.end_with?(EjsonSecretProvisioner::EJSON_SECRETS_FILE) - templates(filename: filename) do |r_def| - yield r_def - end + templates(filename: filename, raw: raw) { |r_def| yield r_def, filename } end end def ejson_secrets_file @ejson_secrets_file ||= begin @@ -57,21 +59,22 @@ errors end private - def templates(filename:) + def templates(filename:, raw:) file_content = File.read(File.join(@template_dir, filename)) rendered_content = @renderer ? @renderer.render_template(filename, file_content) : file_content YAML.load_stream(rendered_content, "<rendered> #{filename}") do |doc| next if doc.blank? unless doc.is_a?(Hash) raise InvalidTemplateError.new("Template is not a valid Kubernetes manifest", filename: filename, content: doc) end - yield doc + yield doc unless raw end + yield rendered_content if raw rescue InvalidTemplateError => err err.filename ||= filename raise err rescue Psych::SyntaxError => err raise InvalidTemplateError.new(err.message, filename: filename, content: rendered_content) @@ -104,18 +107,26 @@ end TemplateSets.new(template_sets: template_sets) end end - def with_resource_definitions(render_erb: false, current_sha: nil, bindings: nil) - @template_sets.each do |template_set| - template_set.with_resource_definitions( + def with_resource_definitions_and_filename(render_erb: false, current_sha: nil, bindings: nil, raw: false) + with_delayed_exceptions(@template_sets, KubernetesDeploy::InvalidTemplateError) do |template_set| + template_set.with_resource_definitions_and_filename( render_erb: render_erb, current_sha: current_sha, - bindings: bindings - ) do |r_def| - yield r_def + bindings: bindings, + raw: raw + ) do |r_def, filename| + yield r_def, filename end + end + end + + def with_resource_definitions(render_erb: false, current_sha: nil, bindings: nil, raw: false) + with_resource_definitions_and_filename(render_erb: render_erb, + current_sha: current_sha, bindings: bindings, raw: raw) do |r_def, _| + yield r_def end end def ejson_secrets_files @template_sets.map(&:ejson_secrets_file).compact