class Krane::TemplateSets::TemplateSet
private inner class
Attributes
render_erb[R]
Public Class Methods
new(template_dir:, file_whitelist: [], logger:, render_erb: true)
click to toggle source
# File lib/krane/template_sets.rb, line 13 def initialize(template_dir:, file_whitelist: [], logger:, render_erb: true) @template_dir = template_dir @files = file_whitelist @logger = logger @render_erb = render_erb end
Public Instance Methods
deploying_with_erb_files?()
click to toggle source
# File lib/krane/template_sets.rb, line 71 def deploying_with_erb_files? @files.any? { |file| file.end_with?("erb") } end
ejson_secrets_file()
click to toggle source
# File lib/krane/template_sets.rb, line 35 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 42 def validate errors = [] supported_extensions = if @render_erb TemplateSets::VALID_TEMPLATES else TemplateSets::VALID_TEMPLATES.reject { |extension| extension.include?('erb') } end if Dir.entries(@template_dir).none? do |filename| filename.end_with?(*supported_extensions) || filename.end_with?(EjsonSecretProvisioner::EJSON_SECRETS_FILE) end return errors << "Template directory #{@template_dir} does not contain any valid templates (supported " \ "suffixes: #{supported_extensions.join(', ')}, or #{EjsonSecretProvisioner::EJSON_SECRETS_FILE})" 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?(*supported_extensions) && !filename.end_with?(EjsonSecretProvisioner::EJSON_SECRETS_FILE) errors << "File #{filename} does not have valid suffix (supported suffixes: " \ "#{supported_extensions.join(', ')}, or #{EjsonSecretProvisioner::EJSON_SECRETS_FILE})" end end errors end
with_resource_definitions_and_filename(current_sha: nil, bindings: nil, raw: false) { |r_def, filename| ... }
click to toggle source
# File lib/krane/template_sets.rb, line 20 def with_resource_definitions_and_filename(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 77 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