class Pipedawg::Job::Helm::Copy
Public Class Methods
new(name, opts = {})
click to toggle source
Calls superclass method
Pipedawg::Job::Helm::new
# File lib/pipedawg/job/helm/copy.rb, line 8 def initialize(name, opts = {}) opts = { chart: name, destinations: [{ user: nil, password: nil, url: nil }], password: nil, url: nil, user: nil, version: nil }.merge(opts) super name, opts update end
Public Instance Methods
update()
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 18 def update opts[:script] = debug + pull + (opts[:destinations].map { |d| push(d) }).flatten(1) end
Private Instance Methods
login_classic(login_opts)
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 92 def login_classic(login_opts) if login_opts[:user] && login_opts[:password] " --username \"#{login_opts[:user]}\" --password \"#{login_opts[:password]}\"" else '' end end
login_oci(login_opts)
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 66 def login_oci(login_opts) require 'uri' "echo \"#{login_opts[:password]}\" | \"#{opts[:command]}\" registry login --username \"#{login_opts[:user]}\" --password-stdin \"#{URI(login_opts[:url]).host}\"" # rubocop:disable Layout/LineLength end
plugin_classic()
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 100 def plugin_classic "\"#{opts[:command]}\" plugin list | grep -q cm-push || \"#{opts[:command]}\" plugin install https://github.com/chartmuseum/helm-push" end
pull()
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 24 def pull case opts[:url] when nil [] when %r{^oci://} pull_oci else pull_classic end end
pull_classic()
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 71 def pull_classic # rubocop:disable Metrics/AbcSize script = [] if opts[:url] && opts[:chart] && opts[:version] suffix = login_classic(opts) script << "\"#{opts[:command]}\" repo add source \"#{opts[:url]}\"#{suffix}" script << "\"#{opts[:command]}\" repo update" script << "\"#{opts[:command]}\" pull \"source/#{opts[:chart]}\" --version \"#{opts[:version]}\"" end script end
pull_oci()
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 46 def pull_oci # rubocop:disable Metrics/AbcSize script = [] if opts[:url] && opts[:chart] && opts[:version] script = ['export HELM_EXPERIMENTAL_OCI=1'] script << login_oci(opts) if opts[:user] && opts[:password] script << "\"#{opts[:command]}\" pull \"#{opts[:url]}/#{opts[:chart]}\" --version \"#{opts[:version]}\"" end script end
push(destination)
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 35 def push(destination) case destination[:url] when nil [] when %r{^oci://} push_oci(destination) else push_classic(destination) end end
push_classic(destination)
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 82 def push_classic(destination) script = [] if destination[:url] && opts[:chart] && opts[:version] script << plugin_classic suffix = login_classic(destination) script << "\"#{opts[:command]}\" cm-push \"#{opts[:chart]}-#{opts[:version]}.tgz\" \"#{destination[:url]}\"#{suffix}" # rubocop:disable Layout/LineLength end script end
push_oci(destination)
click to toggle source
# File lib/pipedawg/job/helm/copy.rb, line 56 def push_oci(destination) # rubocop:disable Metrics/AbcSize script = [] if destination[:url] && opts[:chart] && opts[:version] script = ['export HELM_EXPERIMENTAL_OCI=1'] script << login_oci(destination) if destination[:user] && destination[:password] script << "\"#{opts[:command]}\" push \"#{opts[:chart]}-#{opts[:version]}.tgz\" \"#{destination[:url]}\"" end script end