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