class Dapp::Kube::Kubernetes::Manager::Pod
Public Instance Methods
check_readiness_condition_if_available!(pod)
click to toggle source
# File lib/dapp/kube/kubernetes/manager/pod.rb, line 12 def check_readiness_condition_if_available!(pod) return if [nil, "True"].include? pod.ready_condition_status if pod.ready_condition['reason'] == 'ContainersNotReady' [*Array(pod.status["initContainerStatuses"]), *Array(pod.status["containerStatuses"])].each do |container_status| next if container_status['ready'] waiting_reason = container_status.fetch('state', {}).fetch('waiting', {}).fetch('reason', nil) case waiting_reason when 'ImagePullBackOff', 'ErrImagePull' raise Kubernetes::Error::Default, code: :bad_image, data: {pod_name: pod.name, reason: waiting_reason, message: container_status['state']['waiting']['message']} when 'CrashLoopBackOff' raise Kubernetes::Error::Default, code: :container_crash, data: {pod_name: pod.name, reason: waiting_reason, message: container_status['state']['waiting']['message']} end end else dapp.with_log_indent do dapp.log_warning("#{dapp.log_time}Unknown pod readiness condition reason '#{pod.ready_condition['reason']}': #{pod.ready_condition}", stream: dapp.service_stream) end end end
containers()
click to toggle source
# File lib/dapp/kube/kubernetes/manager/pod.rb, line 5 def containers pod = Kubernetes::Client::Resource::Pod.new(dapp.kubernetes.pod(name)) @containers ||= pod.containers_names.map do |container_name| Container.new(dapp, container_name, self) end end
wait_till_launched!()
click to toggle source
# File lib/dapp/kube/kubernetes/manager/pod.rb, line 42 def wait_till_launched! loop do pod = Kubernetes::Client::Resource::Pod.new(dapp.kubernetes.pod(name)) break if pod.phase != "Pending" check_readiness_condition_if_available!(pod) sleep 0.1 end end
watch_till_done!()
click to toggle source
# File lib/dapp/kube/kubernetes/manager/pod.rb, line 54 def watch_till_done! process_queue = containers.map {|c| [c, nil]} loop do container, last_processed_at = process_queue.shift break unless container sleep 1 if last_processed_at and (Time.now - last_processed_at < 1) container.watch_till_terminated! process_queue.push([container, Time.now]) unless container.done? end end