diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait.go b/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait.go index d781a76f7f5..317bbbf8b1b 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait.go @@ -247,7 +247,8 @@ func (o *WaitOptions) RunWait() error { return err } visitor := o.ResourceFinder.Do() - if visitor, ok := visitor.(*resource.Result); ok && strings.ToLower(o.ForCondition) == "delete" { + isForDelete := strings.ToLower(o.ForCondition) == "delete" + if visitor, ok := visitor.(*resource.Result); ok && isForDelete { visitor.IgnoreErrors(apierrors.IsNotFound) } @@ -255,7 +256,7 @@ func (o *WaitOptions) RunWait() error { if err != nil { return err } - if visitCount == 0 { + if visitCount == 0 && !isForDelete { return errNoMatchingResources } return err diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait_test.go b/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait_test.go index f347ea25737..d838d065c98 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait_test.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/wait/wait_test.go @@ -801,15 +801,7 @@ func TestWaitForDeletionIgnoreNotFound(t *testing.T) { listMapping := map[schema.GroupVersionResource]string{ {Group: "group", Version: "version", Resource: "theresource"}: "TheKindList", } - infos := []*resource.Info{ - { - Mapping: &meta.RESTMapping{ - Resource: schema.GroupVersionResource{Group: "group", Version: "version", Resource: "theresource"}, - }, - Name: "name-foo", - Namespace: "ns-foo", - }, - } + infos := []*resource.Info{} fakeClient := dynamicfakeclient.NewSimpleDynamicClientWithCustomListKinds(scheme, listMapping) o := &WaitOptions{ diff --git a/test/e2e/kubectl/kubectl.go b/test/e2e/kubectl/kubectl.go index acaf5651da4..b1970be7a41 100644 --- a/test/e2e/kubectl/kubectl.go +++ b/test/e2e/kubectl/kubectl.go @@ -1827,6 +1827,14 @@ metadata: } }) }) + + ginkgo.Describe("kubectl wait", func() { + ginkgo.It("should ignore not found error with --for=delete", func() { + ginkgo.By("calling kubectl wait --for=delete") + framework.RunKubectlOrDie(ns, "wait", "--for=delete", "pod/doesnotexist") + framework.RunKubectlOrDie(ns, "wait", "--for=delete", "pod", "--selector=app.kubernetes.io/name=noexist") + }) + }) }) // Checks whether the output split by line contains the required elements.