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