class Krane::TemplateSets::TemplateSet
private inner class
Public Class Methods
new(template_dir:, file_whitelist: [], logger:)
click to toggle source
# File lib/krane/template_sets.rb, line 12 def initialize(template_dir:, file_whitelist: [], logger:) @template_dir = template_dir @files = file_whitelist @logger = logger end
Public Instance Methods
ejson_secrets_file()
click to toggle source
# File lib/krane/template_sets.rb, line 33 def ejson_secrets_file @ejson_secrets_file ||= begin secret_file = @files.find { |f| f == EjsonSecretProvisioner::EJSON_SECRETS_FILE } File.join(@template_dir, secret_file) if secret_file end end
validate()
click to toggle source
# File lib/krane/template_sets.rb, line 40 def validate errors = [] if Dir.entries(@template_dir).none? do |filename| filename.end_with?(*TemplateSets::VALID_TEMPLATES) || filename.end_with?(EjsonSecretProvisioner::EJSON_SECRETS_FILE) end return errors << "Template directory #{@template_dir} does not contain any valid templates" end @files.each do |filename| filename = File.join(@template_dir, filename) if !File.exist?(filename) errors << "File #{filename} does not exist" elsif !filename.end_with?(*TemplateSets::VALID_TEMPLATES) && !filename.end_with?(EjsonSecretProvisioner::EJSON_SECRETS_FILE) errors << "File #{filename} does not have valid suffix (supported suffixes: " \ "#{TemplateSets::VALID_TEMPLATES.join(', ')}, or #{EjsonSecretProvisioner::EJSON_SECRETS_FILE})" end end errors end
with_resource_definitions_and_filename(render_erb: false, current_sha: nil, bindings: nil, raw: false) { |r_def, filename| ... }
click to toggle source
# File lib/krane/template_sets.rb, line 18 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 with_delayed_exceptions(@files, Krane::InvalidTemplateError) do |filename| next if filename.end_with?(EjsonSecretProvisioner::EJSON_SECRETS_FILE) templates(filename: filename, raw: raw) { |r_def| yield r_def, filename } end end
Private Instance Methods
templates(filename:, raw:) { |doc| ... }
click to toggle source
# File lib/krane/template_sets.rb, line 64 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 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) end