diff --git a/lib/kubernetes-deploy/kubernetes_resource/custom_resource.rb b/lib/kubernetes-deploy/kubernetes_resource/custom_resource.rb index db21e36a8..ca411297b 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/custom_resource.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/custom_resource.rb @@ -20,16 +20,21 @@ def timeout end def deploy_succeeded? - return false unless deploy_started? - unless @success_assumption_warning_shown - @logger.warn("Don't know how to monitor resources of type #{kind}. Assuming #{id} deployed successfully.") - @success_assumption_warning_shown = true + if monitor_rollout? + return false unless ready_status = @instance_data&.dig("status", "Conditions")&.find { |cond| cond["type"] == "Ready" } + ready_status["status"] == "True" + else + super end - true end def deploy_failed? - false + if monitor_rollout? + return false unless failed_status = @instance_data&.dig("status", "Conditions")&.find { |cond| cond["type"] == "Failed" } + failed_status["status"] == "True" + else + super + end end def id @@ -45,5 +50,9 @@ def type def kind @definition["kind"] end + + def monitor_rollout? + @crd.monitor_rollouts? + end end end diff --git a/lib/kubernetes-deploy/kubernetes_resource/custom_resource_definition.rb b/lib/kubernetes-deploy/kubernetes_resource/custom_resource_definition.rb index fff35a0b5..8c1ce2620 100644 --- a/lib/kubernetes-deploy/kubernetes_resource/custom_resource_definition.rb +++ b/lib/kubernetes-deploy/kubernetes_resource/custom_resource_definition.rb @@ -3,6 +3,7 @@ module KubernetesDeploy class CustomResourceDefinition < KubernetesResource TIMEOUT = 2.minutes CHILD_CR_TIMEOUT_ANNOTATION = "kubernetes-deploy.shopify.io/cr-timeout-override" + MONITOR_ROLLOUT_ANNOTATION = "kubernetes-deploy.shopify.io/monitor-rollout" GLOBAL = true def deploy_succeeded? @@ -46,6 +47,10 @@ def timeout_for_children @definition.dig("metadata", "annotations", CHILD_CR_TIMEOUT_ANNOTATION)&.to_i end + def monitor_rollouts? + @definition.dig("metadata", "annotations", MONITOR_ROLLOUT_ANNOTATION) == "true" + end + private def names_accepted_condition