Class: KubernetesDeploy::Deployment

Inherits:
KubernetesResource show all
Defined in:
lib/kubernetes-deploy/kubernetes_resource/deployment.rb

Constant Summary collapse

TIMEOUT =
15.minutes

Instance Attribute Summary

Attributes inherited from KubernetesResource

#context, #deploy_started, #file, #name, #namespace, #type

Instance Method Summary collapse

Methods inherited from KubernetesResource

#deploy_finished?, for_type, #group_name, #id, #log_status, #run_kubectl, #status, timeout, #timeout, #tpr?

Constructor Details

#initialize(name, namespace, context, file) ⇒ Deployment

Returns a new instance of Deployment.



5
6
7
# File 'lib/kubernetes-deploy/kubernetes_resource/deployment.rb', line 5

def initialize(name, namespace, context, file)
  @name, @namespace, @context, @file = name, namespace, context, file
end

Instance Method Details

#deploy_failed?Boolean

Returns:

  • (Boolean)


44
45
46
47
# File 'lib/kubernetes-deploy/kubernetes_resource/deployment.rb', line 44

def deploy_failed?
  # TODO: this should look at the current replica set's pods only or it'll never be true for rolling updates
  @pods.present? && @pods.all?(&:deploy_failed?)
end

#deploy_succeeded?Boolean

Returns:

  • (Boolean)


37
38
39
40
41
42
# File 'lib/kubernetes-deploy/kubernetes_resource/deployment.rb', line 37

def deploy_succeeded?
  return false unless @rollout_data.key?("availableReplicas")
  # TODO: this should look at the current replica set's pods too
  @rollout_data["updatedReplicas"].to_i == @rollout_data["replicas"].to_i &&
  @rollout_data["updatedReplicas"].to_i == @rollout_data["availableReplicas"].to_i
end

#deploy_timed_out?Boolean

Returns:

  • (Boolean)


49
50
51
52
# File 'lib/kubernetes-deploy/kubernetes_resource/deployment.rb', line 49

def deploy_timed_out?
  # TODO: this should look at the current replica set's pods only or it'll never be true for rolling updates
  super || @pods.present? && @pods.all?(&:deploy_timed_out?)
end

#exists?Boolean

Returns:

  • (Boolean)


54
55
56
# File 'lib/kubernetes-deploy/kubernetes_resource/deployment.rb', line 54

def exists?
  @found
end

#status_dataObject



58
59
60
# File 'lib/kubernetes-deploy/kubernetes_resource/deployment.rb', line 58

def status_data
  super.merge(replicas: @rollout_data, num_pods: @pods.length)
end

#syncObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/kubernetes-deploy/kubernetes_resource/deployment.rb', line 9

def sync
  json_data, st = run_kubectl("get", type, @name, "--output=json")
  @found = st.success?
  @rollout_data = {}
  @status = nil
  @pods = []

  if @found
    @rollout_data = JSON.parse(json_data)["status"].slice("updatedReplicas", "replicas", "availableReplicas", "unavailableReplicas")
    @status, _ = run_kubectl("rollout", "status", type, @name, "--watch=false") if @deploy_started

    pod_list, st = run_kubectl("get", "pods", "-a", "-l", "name=#{name}", "--output=json")
    if st.success?
      pods_json = JSON.parse(pod_list)["items"]
      pods_json.each do |pod_json|
        pod_name = pod_json["metadata"]["name"]
        pod = Pod.new(pod_name, namespace, context, nil, parent: "#{@name.capitalize} deployment")
        pod.deploy_started = @deploy_started
        pod.interpret_json_data(pod_json)
        pod.log_status
        @pods << pod
      end
    end
  end

  log_status
end