diff --git a/lib/krane/kubernetes_resource/stateful_set.rb b/lib/krane/kubernetes_resource/stateful_set.rb index 95d40336b..26a8aa9ef 100644 --- a/lib/krane/kubernetes_resource/stateful_set.rb +++ b/lib/krane/kubernetes_resource/stateful_set.rb @@ -19,6 +19,9 @@ def status end def deploy_succeeded? + success = observed_generation == current_generation && + desired_replicas == status_data['readyReplicas'].to_i && + status_data['currentRevision'] == status_data['updateRevision'] if update_strategy == ONDELETE # Gem cannot monitor update since it doesn't occur until delete unless @success_assumption_warning_shown @@ -27,11 +30,10 @@ def deploy_succeeded? "Consider switching to rollingUpdate.") @success_assumption_warning_shown = true end + else + success &= desired_replicas == status_data['currentReplicas'].to_i end - observed_generation == current_generation && - status_data['currentRevision'] == status_data['updateRevision'] && - desired_replicas == status_data['readyReplicas'].to_i && - desired_replicas == status_data['currentReplicas'].to_i + success end def deploy_failed? diff --git a/lib/krane/restart_task.rb b/lib/krane/restart_task.rb index 780bcef94..d729ae12b 100644 --- a/lib/krane/restart_task.rb +++ b/lib/krane/restart_task.rb @@ -213,7 +213,7 @@ def patch_daemonset_with_restart(record) def delete_statefulset_pods(record) pods = kubeclient.get_pods(namespace: record.metadata.namespace) pods.select! do |pod| - pod.metadata.ownerReferences.find { |ref| ref.uid == record.metadata.uid } + pod.metadata&.ownerReferences&.find { |ref| ref.uid == record.metadata.uid } end pods.each { |pod| kubeclient.delete_pod(pod.metadata.name, pod.metadata.namespace) } end diff --git a/test/integration/restart_task_test.rb b/test/integration/restart_task_test.rb index a6c7a89b2..d13a78193 100644 --- a/test/integration/restart_task_test.rb +++ b/test/integration/restart_task_test.rb @@ -36,7 +36,8 @@ def test_restart_by_annotation end def test_restart_statefulset_on_delete_restarts_child_pods - result = deploy_fixtures("hello-cloud", subset: "stateful_set.yml") do |fixtures| + result = deploy_fixtures("hello-cloud", subset: ["configmap-data.yml", "unmanaged-pod-1.yml.erb", + "stateful_set.yml"], render_erb: true) do |fixtures| statefulset = fixtures["stateful_set.yml"]["StatefulSet"].first statefulset["spec"]["updateStrategy"] = { "type" => "OnDelete" } end