class HelmWrapper::Shared::Runner
Attributes
auths[R]
binary[R]
chart[R]
config[R]
repos[R]
Public Class Methods
new(binary:, chart:, config: nil)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 39 def initialize(binary:, chart:, config: nil) @binary = binary @chart = chart @config = config @auths = false @repos = false end
Public Instance Methods
clean(repos: true)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 110 def clean(repos: true) clean_repos if repos clean_auths if @auths_attempted end
delete()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 117 def delete() logger.fatal("Cannot Helm delete without a valid configuration!") if @config.nil? logger.fatal("Cannot Helm delete before initialising authenticators!") unless auths parameters = Array.new parameters.append("--namespace=\"#{@config.namespace}\"") parameters.append("\"#{@config.release}\"") logger.fatal("Helm delete failed!") unless run(action: "delete", parameters: parameters) end
init_auths()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 50 def init_auths() logger.fatal("Cannot initialise authenticators without a valid configuration!") if @config.nil? @auths_attempted = true config.auths.map(&:auth) @auths = true end
init_repos(force: false)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 62 def init_repos(force: false) ENV["HELM_EXPERIMENTAL_OCI"] = "true" @chart.oci.each_with_index do |oci_repo, oci_index| logger.info("Logging into OCI repository: #{oci_repo["name"]}") username = from_environment(variable: oci_repo["username"]) password = from_environment(variable: oci_repo["password"]) @chart.oci_active(active: true, index: oci_index) parameters = Array.new parameters.append("login") parameters.append("\"#{oci_repo["url"]}\"") parameters.append("--username=\"#{username}\"") parameters.append("--password-stdin") logger.fatal("Failed to login to Helm OCI repository: #{oci_repo["name"]}, url: #{oci_repo["url"]}") unless run(action: "registry", parameters: parameters, stdin: password) end if @chart.artefact.length > 0 then @chart.artefact.each_with_index do |artefact_repo, artefact_index| logger.info("Adding artefact repository: #{artefact_repo["name"]}") username = artefact_repo["username"].nil? ? nil : from_environment(variable: artefact_repo["username"]) password = artefact_repo["password"].nil? ? nil : from_environment(variable: artefact_repo["password"]) @chart.artefact_active(active: true, index: artefact_index) parameters = Array.new parameters.append("add") parameters.append("\"#{artefact_repo["name"]}\"") parameters.append("\"#{artefact_repo["url"]}\"") parameters.append("--username=\"#{username}\"") unless username.nil? parameters.append("--password=\"#{password}\"") unless password.nil? parameters.append("--force-update") if force logger.fatal("Failed to add Helm repository: #{artefact_repo["name"]}, url: #{artefact_repo["url"]}") unless run(action: "repo", parameters: parameters) end logger.info("Updating artefact repositories...") logger.fatal("Failed to update Helm artefact repositories!") unless run(action: "repo", parameters: Array.new([ "update" ])) end @repos = true end
lint()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 169 def lint() parameters = Array.new parameters.append("\"#{@chart.path}\"") logger.fatal("Helm validate failed!") unless run(action: "lint", parameters: parameters) end
push(tag:)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 178 def push(tag:) logger.fatal("Cannot Helm push before initialising repositories!") unless repos parameters = Array.new parameters.append("push") parameters.append("\"#{@chart.name}:#{tag}\"") logger.fatal("Helm push failed!") unless run(action: "chart", parameters: parameters) end
save(tag:)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 190 def save(tag:) parameters = Array.new parameters.append("save") parameters.append("\"#{@chart.path}\"") parameters.append("\"#{@chart.name}:#{tag}\"") logger.fatal("Helm save failed!") unless run(action: "chart", parameters: parameters) end
template()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 130 def template() logger.fatal("Cannot Helm template without a valid configuration!") if @config.nil? logger.fatal("Cannot Helm template before initialising repositories!") unless repos parameters = Array.new parameters.append("--namespace=\"#{@config.namespace}\"") parameters.append("\"#{@config.release}\"") parameters.append("\"#{@chart.name}\"") parameters.append("--version=\"#{@chart.version}\"") unless @chart.version.strip.empty? parameters.concat(variable_files) parameters.concat(variable_strings) logger.fatal("Helm template failed!") unless run(action: "template", parameters: parameters) end
upgrade(install: true)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 147 def upgrade(install: true) logger.fatal("Cannot Helm upgrade without a valid configuration!") if @config.nil? logger.fatal("Cannot Helm upgrade before initialising authenticators!") unless auths logger.fatal("Cannot Helm upgrade before initialising repositories!") unless repos parameters = Array.new parameters.append("--namespace=\"#{@config.namespace}\"") parameters.append("--install") if install parameters.append("\"#{@config.release}\"") parameters.append("\"#{@chart.name}\"") parameters.append("--atomic") if @config.atomic parameters.append("--wait") if @config.wait parameters.append("--timeout=\"#{@config.timeout}\"") if (@config.atomic or @config.wait) parameters.append("--version=\"#{@chart.version}\"") unless @chart.version.strip.empty? parameters.concat(variable_files) parameters.concat(variable_strings) logger.fatal("Helm upgrade failed!") unless run(action: "upgrade", parameters: parameters) end
Private Instance Methods
clean_auths()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 205 def clean_auths @auths = false config.auths.map(&:clear) @auths_attempted = false end
clean_repos()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 213 def clean_repos @repos = false @chart.oci.each do |oci_repo| if oci_repo["active"] then logger.info("Logging out of OCI repository: #{oci_repo["name"]}") parameters = Array.new parameters.append("logout") parameters.append("\"#{oci_repo["url"]}\"") logger.error("Failed to logout of Helm OCI repository: #{oci_repo["name"]}, url: #{oci_repo["url"]}") unless run(action: "registry", parameters: parameters) end end @chart.artefact.each do |artefact_repo| if artefact_repo["active"] then if artefact_repo["password"].nil? then logger.info("Not removing artefact repository: #{artefact_repo["name"]}, no credentials stored.") else logger.info("Removing artefact repository: #{artefact_repo["name"]}") parameters = Array.new parameters.append("remove") parameters.append("\"#{artefact_repo["name"]}\"") logger.error("Failed to remove Helm repository: #{artefact_repo["name"]}, url: #{artefact_repo["url"]}") unless run(action: "repo", parameters: parameters) end end end ENV.delete("HELM_EXPERIMENTAL_OCI") end
from_environment(variable:)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 303 def from_environment(variable:) logger.fatal("Environment variable: #{variable} does not exist") unless ENV.key?(variable) logger.fatal("Environment variable: #{variable} is blank!") if ENV[variable].strip.empty? return ENV[variable].strip end
run(action:, parameters: Array.new, stdin: nil)
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 271 def run(action:, parameters: Array.new, stdin: nil) result = false parameters.reject! { |item| not item.kind_of?(String) or item.strip.empty? } cmdline = [ "\"#{@binary.path}\"", action ].concat(parameters).join(" ") if @@repo_actions.include?(action) begin out, status = Open3.capture2e(cmdline, :stdin_data=>stdin) logger.debug("Helm output:") logger.debug(out) result = status.success? rescue result = false end else logger.info("Starting Helm, action: #{action}") fatal("Running Helm with data for stdin can only be used when configuring repos!") unless stdin.nil? puts("\n" + ('#' * 80) + "\n\n") result = system(cmdline) || false puts("\n" + ('#' * 80) + "\n\n") end return result end
variable_files()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 247 def variable_files result = Array.new @config.variables.files.each do |file| result.append("--values=\"#{file}\"") end return result end
variable_strings()
click to toggle source
# File lib/helm-wrapper/shared/runner.rb, line 259 def variable_strings result = Array.new @config.variables.values.each do |key, value| result.append("--set=\"#{key.to_s}=#{value}\"") end return result end