class HelmCLI

Constants

VERSION

Attributes

executable[R]
kubeconfig_path[R]

Public Class Methods

new(kubeconfig_path, executable = HelmRb.executable) click to toggle source
# File lib/helm-cli.rb, line 13
def initialize(kubeconfig_path, executable = HelmRb.executable)
  @kubeconfig_path = kubeconfig_path
  @executable = executable
end

Public Instance Methods

add_repo(name, url) click to toggle source
# File lib/helm-cli.rb, line 22
def add_repo(name, url)
  cmd = base_cmd + ['repo', 'add', name, url]
  systemm(cmd)
end
get_release(release, namespace: 'default') click to toggle source
# File lib/helm-cli.rb, line 32
def get_release(release, namespace: 'default')
  cmd = base_cmd + ['get', 'all', release, '-n', namespace]
  backticks(cmd).tap do
    unless last_status.success?
      raise MissingReleaseError, "could not get release '#{release}': helm "\
        "exited with status code #{last_status.exitstatus}"
    end
  end
end
install_chart(chart, release:, version:, namespace: 'default', params: {}) click to toggle source
# File lib/helm-cli.rb, line 49
def install_chart(chart, release:, version:, namespace: 'default', params: {})
  cmd = base_cmd + ['install', release, chart]
  cmd += ['--version', version]
  cmd += ['-n', namespace]

  params.each_pair do |key, value|
    cmd += ['--set', "#{key}=#{value}"]
  end

  systemm(cmd)

  unless last_status.success?
    raise InstallError, "could not install chart '#{release}': helm "\
      "exited with status code #{last_status.exitstatus}"
  end
end
last_status() click to toggle source
# File lib/helm-cli.rb, line 18
def last_status
  Thread.current[status_key]
end
release_exists?(release, namespace: 'default') click to toggle source
# File lib/helm-cli.rb, line 42
def release_exists?(release, namespace: 'default')
  get_release(release, namespace: namespace)
  last_status.exitstatus == 0
rescue MissingReleaseError
  false
end
stderr() click to toggle source
# File lib/helm-cli.rb, line 102
def stderr
  Thread.current[stderr_key] || STDERR
end
stderr=(new_stderr) click to toggle source
# File lib/helm-cli.rb, line 106
def stderr=(new_stderr)
  Thread.current[stderr_key] = new_stderr
end
stdout() click to toggle source
# File lib/helm-cli.rb, line 94
def stdout
  Thread.current[stdout_key] || STDOUT
end
stdout=(new_stdout) click to toggle source
# File lib/helm-cli.rb, line 98
def stdout=(new_stdout)
  Thread.current[stdout_key] = new_stdout
end
update_repos() click to toggle source
# File lib/helm-cli.rb, line 27
def update_repos
  cmd = base_cmd + ['repo', 'update']
  systemm(cmd)
end
upgrade_chart(chart, release:, version:, namespace: 'default', params: {}) click to toggle source
# File lib/helm-cli.rb, line 66
def upgrade_chart(chart, release:, version:, namespace: 'default', params: {})
  cmd = base_cmd + ['upgrade', release, chart]
  cmd += ['--version', version]
  cmd += ['-n', namespace]

  params.each_pair do |key, value|
    cmd += ['--set', "#{key}=#{value}"]
  end

  systemm(cmd)

  unless last_status.success?
    raise InstallError, "could not upgrade chart '#{release}': helm "\
      "exited with status code #{last_status.exitstatus}"
  end
end
with_pipes(out = STDOUT, err = STDERR) { || ... } click to toggle source
# File lib/helm-cli.rb, line 83
def with_pipes(out = STDOUT, err = STDERR)
  previous_stdout = self.stdout
  previous_stderr = self.stderr
  self.stdout = out
  self.stderr = err
  yield
ensure
  self.stdout = previous_stdout
  self.stderr = previous_stderr
end

Private Instance Methods

backticks(cmd) click to toggle source
# File lib/helm-cli.rb, line 116
def backticks(cmd)
  cmd_s = cmd.join(' ')
  result = StringIO.new

  Open3.popen3(cmd_s) do |p_stdin, p_stdout, p_stderr, wait_thread|
    Thread.new do
      begin
        p_stdout.each { |line| result.puts(line) }
      rescue IOError
      end
    end

    Thread.new(stderr) do |t_stderr|
      begin
        p_stderr.each { |line| t_stderr.puts(line) }
      rescue IOError
      end
    end

    p_stdin.close
    self.last_status = wait_thread.value
    wait_thread.join
  end

  result.string
end
base_cmd() click to toggle source
# File lib/helm-cli.rb, line 112
def base_cmd
  [executable, '--kubeconfig', kubeconfig_path]
end
last_status=(status) click to toggle source
# File lib/helm-cli.rb, line 167
def last_status=(status)
  Thread.current[status_key] = status
end
status_key() click to toggle source
# File lib/helm-cli.rb, line 171
def status_key
  :helm_cli_last_status
end
stderr_key() click to toggle source
# File lib/helm-cli.rb, line 179
def stderr_key
  :helm_cli_stderr
end
stdout_key() click to toggle source
# File lib/helm-cli.rb, line 175
def stdout_key
  :helm_cli_stdout
end
systemm(cmd) click to toggle source
# File lib/helm-cli.rb, line 143
def systemm(cmd)
  cmd_s = cmd.join(' ')

  Open3.popen3(cmd_s) do |p_stdin, p_stdout, p_stderr, wait_thread|
    Thread.new(stdout) do |t_stdout|
      begin
        p_stdout.each { |line| t_stdout.puts(line) }
      rescue IOError
      end
    end

    Thread.new(stderr) do |t_stderr|
      begin
        p_stderr.each { |line| t_stderr.puts(line) }\
      rescue IOError
      end
    end

    p_stdin.close
    self.last_status = wait_thread.value
    wait_thread.join
  end
end