class Krane::Pod::Container
Attributes
name[R]
Public Class Methods
new(definition, init_container: false)
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 205 def initialize(definition, init_container: false) @init_container = init_container @name = definition["name"] @image = definition["image"] @http_probe_location = definition.dig("readinessProbe", "httpGet", "path") @exec_probe_command = definition.dig("readinessProbe", "exec", "command") @status = {} end
Public Instance Methods
doom_reason()
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 218 def doom_reason limbo_reason = @status.dig("state", "waiting", "reason") limbo_message = @status.dig("state", "waiting", "message") if @status.dig("lastState", "terminated", "reason") == "ContainerCannotRun" # ref: https://github.com/kubernetes/kubernetes/blob/562e721ece8a16e05c7e7d6bdd6334c910733ab2/pkg/kubelet/dockershim/docker_container.go#L353 exit_code = @status.dig('lastState', 'terminated', 'exitCode') "Failed to start (exit #{exit_code}): #{@status.dig('lastState', 'terminated', 'message')}" elsif @status.dig("state", "terminated", "reason") == "ContainerCannotRun" exit_code = @status.dig('state', 'terminated', 'exitCode') "Failed to start (exit #{exit_code}): #{@status.dig('state', 'terminated', 'message')}" elsif limbo_reason == "CrashLoopBackOff" exit_code = @status.dig('lastState', 'terminated', 'exitCode') "Crashing repeatedly (exit #{exit_code}). See logs for more information." elsif limbo_reason == "ErrImagePull" && limbo_message.match(/not found/i) "Failed to pull image #{@image}. "\ "Did you wait for it to be built and pushed to the registry before deploying?" elsif limbo_reason == "CreateContainerConfigError" "Failed to generate container configuration: #{limbo_message}" end end
doomed?()
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 214 def doomed? doom_reason.present? end
init_container?()
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 256 def init_container? @init_container end
readiness_fail_reason()
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 240 def readiness_fail_reason return if ready? || init_container? return unless (@http_probe_location || @exec_probe_command).present? yellow_name = ColorizedString.new(name).yellow if @http_probe_location "> #{yellow_name} must respond with a good status code at '#{@http_probe_location}'" elsif @exec_probe_command "> #{yellow_name} must exit 0 from the following command: '#{@exec_probe_command.join(' ')}'" end end
ready?()
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 252 def ready? @status['ready'] == true end
reset_status()
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 264 def reset_status @status = {} end
update_status(data)
click to toggle source
# File lib/krane/kubernetes_resource/pod.rb, line 260 def update_status(data) @status = data || {} end