Class: KubernetesDeploy::Kubectl

Inherits:
Object
  • Object
show all
Defined in:
lib/kubernetes-deploy/kubectl.rb

Instance Method Summary collapse

Constructor Details

#initialize(namespace:, context:, logger:, log_failure_by_default:, default_timeout: '30s', output_is_sensitive: false) ⇒ Kubectl

Returns a new instance of Kubectl.

Raises:

  • (ArgumentError)


5
6
7
8
9
10
11
12
13
14
15
16
# File 'lib/kubernetes-deploy/kubectl.rb', line 5

def initialize(namespace:, context:, logger:, log_failure_by_default:, default_timeout: '30s',
  output_is_sensitive: false)
  @namespace = namespace
  @context = context
  @logger = logger
  @log_failure_by_default = log_failure_by_default
  @default_timeout = default_timeout
  @output_is_sensitive = output_is_sensitive

  raise ArgumentError, "namespace is required" if namespace.blank?
  raise ArgumentError, "context is required" if context.blank?
end

Instance Method Details

#client_versionObject



46
47
48
# File 'lib/kubernetes-deploy/kubectl.rb', line 46

def client_version
  version_info[:client]
end

#run(*args, log_failure: nil, use_context: true, use_namespace: true) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/kubernetes-deploy/kubectl.rb', line 18

def run(*args, log_failure: nil, use_context: true, use_namespace: true)
  log_failure = @log_failure_by_default if log_failure.nil?

  args = args.unshift("kubectl")
  args.push("--namespace=#{@namespace}") if use_namespace
  args.push("--context=#{@context}")     if use_context
  args.push("--request-timeout=#{@default_timeout}") if @default_timeout

  @logger.debug Shellwords.join(args)
  out, err, st = Open3.capture3(*args)
  @logger.debug(out.shellescape) unless output_is_sensitive?

  if !st.success? && log_failure
    @logger.warn("The following command failed: #{Shellwords.join(args)}")
    @logger.warn(err) unless output_is_sensitive?
  end
  [out.chomp, err.chomp, st]
end

#server_versionObject



50
51
52
# File 'lib/kubernetes-deploy/kubectl.rb', line 50

def server_version
  version_info[:server]
end

#version_infoObject



37
38
39
40
41
42
43
44
# File 'lib/kubernetes-deploy/kubectl.rb', line 37

def version_info
  @version_info ||=
    begin
      response, _, status = run("version", use_namespace: false, log_failure: true)
      raise KubectlError, "Could not retrieve kubectl version info" unless status.success?
      extract_version_info_from_kubectl_response(response)
    end
end