diff --git a/hack/test-cmd.sh b/hack/test-cmd.sh index 9d60fb798fe..5c01aa55392 100755 --- a/hack/test-cmd.sh +++ b/hack/test-cmd.sh @@ -1287,9 +1287,16 @@ __EOF__ kubectl rollout undo deployment nginx-deployment "${kube_flags[@]}" sleep 1 kube::test::get_object_assert deployment "{{range.items}}{{$deployment_image_field}}:{{end}}" 'nginx:latest:' + # Pause the deployment + kubectl-with-retry rollout pause deployment nginx-deployment "${kube_flags[@]}" + # A paused deployment cannot be rolled back + ! kubectl rollout undo deployment nginx-deployment "${kube_flags[@]}" + # Resume the deployment + kubectl-with-retry rollout resume deployment nginx-deployment "${kube_flags[@]}" + # The resumed deployment can now be rolled back + kubectl rollout undo deployment nginx-deployment "${kube_flags[@]}" # Clean up kubectl delete deployment nginx-deployment "${kube_flags[@]}" - kubectl delete rs -l pod-template-hash "${kube_flags[@]}" ###################### diff --git a/pkg/kubectl/rollback.go b/pkg/kubectl/rollback.go index 9f53b25af6f..2e4f92b3050 100644 --- a/pkg/kubectl/rollback.go +++ b/pkg/kubectl/rollback.go @@ -49,6 +49,10 @@ type DeploymentRollbacker struct { } func (r *DeploymentRollbacker) Rollback(namespace, name string, updatedAnnotations map[string]string, toRevision int64, obj runtime.Object) (string, error) { + d := obj.(*extensions.Deployment) + if d.Spec.Paused { + return "", fmt.Errorf("you cannot rollback a paused deployment; resume it first with 'kubectl rollout resume' and try again") + } deploymentRollback := &extensions.DeploymentRollback{ Name: name, UpdatedAnnotations: updatedAnnotations,