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') ⇒ Kubectl

Returns a new instance of Kubectl.

Raises:

  • (ArgumentError)


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

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

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

Instance Method Details

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



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

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)

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