class Pipedawg::Job::Helm::Copy

Pipedawg::Job::Helm::Copy class

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