Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Stop the users from rolling back a paused deployment in kubectl rollout undo #23083

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
9 changes: 8 additions & 1 deletion hack/test-cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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[@]}"


######################
Expand Down
4 changes: 4 additions & 0 deletions pkg/kubectl/rollback.go
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down