class Kubes::CLI::Exec

Public Instance Methods

default_exec() click to toggle source
# File lib/kubes/cli/exec.rb, line 27
def default_exec
  ENV['KUBES_DEFAULT_EXEC'] || "sh"
end
deployment_pod() click to toggle source
# File lib/kubes/cli/exec.rb, line 45
def deployment_pod
  return unless metadata
  labels = metadata['labels'].map { |k,v| "#{k}=#{v}" }.join(',')
  ns = metadata['namespace']

  resp = sh_capture("kubectl get pod -l #{labels} -n #{ns} -o json")
  data = JSON.load(resp)
  pod = latest_pod(data['items'])

  unless pod
    logger.error "ERROR: Unable to find a running pod".color(:red)
    exit 1
  end

  pod['metadata']['name']
end
find_pod() click to toggle source
# File lib/kubes/cli/exec.rb, line 31
def find_pod
  pod_name || deployment_pod
end
latest_pod(items) click to toggle source

get latest running pod

# File lib/kubes/cli/exec.rb, line 63
def latest_pod(items)
  running = items.select { |i| i['status']['phase'] == 'Running' }
  sorted = running.sort_by { |i| i['metadata']['creationTimestamp'] || 0 }
  sorted.last
end
metadata() click to toggle source
# File lib/kubes/cli/exec.rb, line 39
def metadata
  deployment = Kubes::Kubectl::Fetch::Deployment.new(@options)
  deployment.metadata if deployment.found
end
ns() click to toggle source
# File lib/kubes/cli/exec.rb, line 35
def ns
  "-n #{metadata['namespace']}" if metadata
end
run() click to toggle source
# File lib/kubes/cli/exec.rb, line 7
    def run
      compile
      pod = find_pod

      unless pod
        logger.info <<~EOL
          Unable to find a pod to exec into. This means there was no deployment found.
          You can also try using the -p option and specifying enough of the pod name. Example:

              kubes exec -p web

        EOL
        exit 1
      end

      container = " -c #{@options[:container]}" unless @options[:container].nil?
      cmd = @options[:cmd].empty? ? default_exec : @options[:cmd].join(' ')
      sh("kubectl exec #{ns} -ti #{pod}#{container} -- #{cmd}")
    end