diff --git a/pkg/kapp/resourcesmisc/apps_v1_deployment.go b/pkg/kapp/resourcesmisc/apps_v1_deployment.go index 294fd66d7..b024f916a 100644 --- a/pkg/kapp/resourcesmisc/apps_v1_deployment.go +++ b/pkg/kapp/resourcesmisc/apps_v1_deployment.go @@ -54,10 +54,10 @@ func (s AppsV1Deployment) IsDoneApplying() DoneApplyState { "Deployment is not progressing: %s (message: %s)", cond.Reason, cond.Message)} } - case "FailedDelete": + case appsv1.DeploymentReplicaFailure: if cond.Status == corev1.ConditionTrue { - return DoneApplyState{Done: true, Successful: false, Message: fmt.Sprintf( - "Deployment failed to delete pods: %s (message: %s)", cond.Reason, cond.Message)} + return DoneApplyState{Done: false, Successful: false, Message: fmt.Sprintf( + "Deployment has encountered replica failure: %s (message: %s)", cond.Reason, cond.Message)} } } } diff --git a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go index 86cdc78c3..67d83c0d4 100644 --- a/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go +++ b/pkg/kapp/resourcesmisc/apps_v1_deployment_test.go @@ -59,6 +59,60 @@ status: require.Equal(t, expectedState, state, "Found incorrect state") } +func TestAppsV1DeploymentReplicaFailure(t *testing.T) { + + depYAML := ` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: test-deployment + generation: 1 +status: + observedGeneration: 1 + conditions: + - type: Progressing + status: "False" + reason: "ProgressDeadlineExceeded" + message: "Progress deadline exceeded" +` + + deployment := buildDep(depYAML, t) + state := deployment.IsDoneApplying() + + expectedState := ctlresm.DoneApplyState{ + Done: true, + Successful: false, + Message: "Deployment is not progressing: ProgressDeadlineExceeded (message: Progress deadline exceeded)", + } + + require.Equal(t, expectedState, state, "Found incorrect state") + + depYAML = ` +apiVersion: apps/v1 +kind: Deployment +metadata: + name: test-deployment + generation: 1 +status: + observedGeneration: 1 + conditions: + - type: ReplicaFailure + status: "True" + reason: "FailedCreate" + message: "Failed to create pods" +` + deployment = buildDep(depYAML, t) + state = deployment.IsDoneApplying() + + expectedState = ctlresm.DoneApplyState{ + Done: false, + Successful: false, + Message: "Deployment has encountered replica failure: FailedCreate (message: Failed to create pods)", + } + + require.Equal(t, expectedState, state, "Found incorrect state") +} + func buildDep(resourcesBs string, t *testing.T) *ctlresm.AppsV1Deployment { newResources, err := ctlres.NewFileResource(ctlres.NewBytesSource([]byte(resourcesBs))).Resources() require.NoErrorf(t, err, "Expected resources to parse")