class Krane::DaemonSet

Constants

TIMEOUT

Attributes

pods[R]

Public Instance Methods

deploy_failed?() click to toggle source
# File lib/krane/kubernetes_resource/daemon_set.rb, line 26
def deploy_failed?
  pods.present? && pods.any?(&:deploy_failed?) &&
  observed_generation == current_generation
end
deploy_succeeded?() click to toggle source
# File lib/krane/kubernetes_resource/daemon_set.rb, line 19
def deploy_succeeded?
  return false unless exists?
  current_generation == observed_generation &&
    rollout_data["desiredNumberScheduled"].to_i == rollout_data["updatedNumberScheduled"].to_i &&
    relevant_pods_ready?
end
fetch_debug_logs() click to toggle source
# File lib/krane/kubernetes_resource/daemon_set.rb, line 31
def fetch_debug_logs
  most_useful_pod = pods.find(&:deploy_failed?) || pods.find(&:deploy_timed_out?) || pods.first
  most_useful_pod.fetch_debug_logs
end
print_debug_logs?() click to toggle source
status() click to toggle source
Calls superclass method
# File lib/krane/kubernetes_resource/daemon_set.rb, line 14
def status
  return super unless exists?
  rollout_data.map { |state_replicas, num| "#{num} #{state_replicas}" }.join(", ")
end
sync(cache) click to toggle source
Calls superclass method
# File lib/krane/kubernetes_resource/daemon_set.rb, line 8
def sync(cache)
  super
  @pods = exists? ? find_pods(cache) : []
  @nodes = find_nodes(cache) if @nodes.blank?
end

Private Instance Methods

find_nodes(cache) click to toggle source
# File lib/krane/kubernetes_resource/daemon_set.rb, line 68
def find_nodes(cache)
  all_nodes = cache.get_all(Node.kind)
  all_nodes.map { |node_data| Node.new(definition: node_data) }
end
parent_of_pod?(pod_data) click to toggle source
# File lib/krane/kubernetes_resource/daemon_set.rb, line 79
def parent_of_pod?(pod_data)
  return false unless pod_data.dig("metadata", "ownerReferences")
  pod_data["metadata"]["ownerReferences"].any? { |ref| ref["uid"] == @instance_data["metadata"]["uid"] } &&
  pod_data["metadata"]["labels"]["pod-template-generation"].to_i ==
    @instance_data["spec"]["templateGeneration"].to_i
end
relevant_pods_ready?() click to toggle source
# File lib/krane/kubernetes_resource/daemon_set.rb, line 57
def relevant_pods_ready?
  return true if rollout_data["desiredNumberScheduled"].to_i == rollout_data["numberReady"].to_i # all pods ready
  relevant_node_names = @nodes.map(&:name)
  considered_pods = @pods.select { |p| relevant_node_names.include?(p.node_name) }
  @logger.debug("DaemonSet is reporting #{rollout_data['numberReady']} pods ready." \
    " Considered #{considered_pods.size} pods out of #{@pods.size} for #{@nodes.size} nodes.")
  considered_pods.present? &&
    considered_pods.all?(&:deploy_succeeded?) &&
    rollout_data["numberReady"].to_i >= considered_pods.length
end
rollout_data() click to toggle source
# File lib/krane/kubernetes_resource/daemon_set.rb, line 73
def rollout_data
  return { "currentNumberScheduled" => 0 } unless exists?
  @instance_data["status"]
    .slice("updatedNumberScheduled", "desiredNumberScheduled", "numberReady")
end