Class: Gitlab::Kubernetes::RolloutStatus
- Inherits:
-
Object
- Object
- Gitlab::Kubernetes::RolloutStatus
- Defined in:
- lib/gitlab/kubernetes/rollout_status.rb
Overview
Calculates the rollout status for a set of kubernetes deployments.
A GitLab environment may be composed of several Kubernetes deployments and other resources. The rollout status sums the Kubernetes deployments together.
Instance Attribute Summary collapse
-
#canary_ingress ⇒ Object
readonly
Returns the value of attribute canary_ingress.
-
#completion ⇒ Object
readonly
Returns the value of attribute completion.
-
#deployments ⇒ Object
readonly
Returns the value of attribute deployments.
-
#instances ⇒ Object
readonly
Returns the value of attribute instances.
-
#status ⇒ Object
readonly
Returns the value of attribute status.
Class Method Summary collapse
Instance Method Summary collapse
- #canary_ingress_exists? ⇒ Boolean
- #complete? ⇒ Boolean
- #found? ⇒ Boolean
-
#initialize(deployments, pods: [], ingresses: [], status: :found) ⇒ RolloutStatus
constructor
A new instance of RolloutStatus.
- #loading? ⇒ Boolean
- #not_found? ⇒ Boolean
Constructor Details
#initialize(deployments, pods: [], ingresses: [], status: :found) ⇒ RolloutStatus
Returns a new instance of RolloutStatus.
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 54 def initialize(deployments, pods: [], ingresses: [], status: :found) @status = status @deployments = deployments @instances = RolloutInstances.new(deployments, pods).pod_instances @canary_ingress = ingresses.find(&:canary?) @completion = if @instances.empty? 100 else # We downcase the pod status in Gitlab::Kubernetes::Deployment#deployment_instance finished = @instances.count { |instance| instance[:status] == ::Gitlab::Kubernetes::Pod::RUNNING.downcase } (finished / @instances.count.to_f * 100).to_i end end |
Instance Attribute Details
#canary_ingress ⇒ Object (readonly)
Returns the value of attribute canary_ingress.
11 12 13 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 11 def canary_ingress @canary_ingress end |
#completion ⇒ Object (readonly)
Returns the value of attribute completion.
11 12 13 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 11 def completion @completion end |
#deployments ⇒ Object (readonly)
Returns the value of attribute deployments.
11 12 13 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 11 def deployments @deployments end |
#instances ⇒ Object (readonly)
Returns the value of attribute instances.
11 12 13 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 11 def instances @instances end |
#status ⇒ Object (readonly)
Returns the value of attribute status.
11 12 13 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 11 def status @status end |
Class Method Details
.from_deployments(*deployments_attrs, pods_attrs: [], ingresses: []) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 33 def self.from_deployments(*deployments_attrs, pods_attrs: [], ingresses: []) return new([], status: :not_found) if deployments_attrs.empty? deployments = deployments_attrs.map do |attrs| ::Gitlab::Kubernetes::Deployment.new(attrs, pods: pods_attrs) end deployments.sort_by!(&:order) pods = pods_attrs.map do |attrs| ::Gitlab::Kubernetes::Pod.new(attrs) end ingresses = ingresses.map { |ingress| ::Gitlab::Kubernetes::Ingress.new(ingress) } new(deployments, pods: pods, ingresses: ingresses) end |
.loading ⇒ Object
50 51 52 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 50 def self.loading new([], status: :loading) end |
Instance Method Details
#canary_ingress_exists? ⇒ Boolean
29 30 31 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 29 def canary_ingress_exists? canary_ingress.present? end |
#complete? ⇒ Boolean
13 14 15 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 13 def complete? completion == 100 end |
#found? ⇒ Boolean
25 26 27 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 25 def found? @status == :found end |
#loading? ⇒ Boolean
17 18 19 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 17 def loading? @status == :loading end |
#not_found? ⇒ Boolean
21 22 23 |
# File 'lib/gitlab/kubernetes/rollout_status.rb', line 21 def not_found? @status == :not_found end |