From 88e2f8e04fa310e848f07d0a2ab801aa0917e408 Mon Sep 17 00:00:00 2001 From: Ted Yu Date: Wed, 25 Sep 2019 16:43:08 -0700 Subject: [PATCH] Prune should respect namespace --- hack/testdata/prune/b.yaml | 1 + staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go | 3 +++ test/cmd/apply.sh | 13 +++++++++++++ 3 files changed, 17 insertions(+) diff --git a/hack/testdata/prune/b.yaml b/hack/testdata/prune/b.yaml index f92fbc47f0a..46365d28b7a 100644 --- a/hack/testdata/prune/b.yaml +++ b/hack/testdata/prune/b.yaml @@ -2,6 +2,7 @@ apiVersion: v1 kind: Pod metadata: name: b + namespace: nsb labels: prune-group: "true" spec: diff --git a/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go b/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go index c208291ce70..a1d554cad9c 100644 --- a/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go +++ b/staging/src/k8s.io/kubectl/pkg/cmd/apply/apply.go @@ -635,6 +635,9 @@ See http://k8s.io/docs/reference/using-api/api-concepts/#conflicts`, err) } for n := range visitedNamespaces { + if len(o.Namespace) != 0 && n != o.Namespace { + continue + } for _, m := range namespacedRESTMappings { if err := p.prune(n, m); err != nil { return fmt.Errorf("error pruning namespaced object %v: %v", m.GroupVersionKind, err) diff --git a/test/cmd/apply.sh b/test/cmd/apply.sh index 99c3a9f048e..85b036567d5 100755 --- a/test/cmd/apply.sh +++ b/test/cmd/apply.sh @@ -144,6 +144,19 @@ __EOF__ output_message=$(! kubectl get pods a 2>&1 "${kube_flags[@]:?}") kube::test::if_has_string "${output_message}" 'pods "a" not found' + kubectl delete pods a + kubectl delete pods b + + # apply a + kubectl apply --namespace nsb -l prune-group=true -f hack/testdata/prune/a.yaml "${kube_flags[@]:?}" + # apply b with namespace + kubectl apply --namespace nsb --prune -l prune-group=true -f hack/testdata/prune/b.yaml "${kube_flags[@]:?}" + # check right pod exists + kube::test::get_object_assert 'pods b' "{{${id_field:?}}}" 'b' + # check wrong pod doesn't exist + output_message=$(! kubectl get pods a 2>&1 "${kube_flags[@]:?}") + kube::test::if_has_string "${output_message}" 'pods "a" not found' + # cleanup kubectl delete pods b