From c17a8a773d7def92b3b61a1acd671d3435693358 Mon Sep 17 00:00:00 2001 From: Mike Danese Date: Fri, 14 Oct 2016 10:18:24 -0700 Subject: [PATCH] kubectl: apply prune should fallback to basic delete when a resource has no reaper --- hack/make-rules/test-cmd.sh | 8 ++++++++ hack/testdata/prune-reap/a.yml | 10 ++++++++++ hack/testdata/prune-reap/b.yml | 10 ++++++++++ pkg/kubectl/cmd/apply.go | 10 +++++----- 4 files changed, 33 insertions(+), 5 deletions(-) create mode 100644 hack/testdata/prune-reap/a.yml create mode 100644 hack/testdata/prune-reap/b.yml diff --git a/hack/make-rules/test-cmd.sh b/hack/make-rules/test-cmd.sh index 6ab1e26edf7..e0695eaa227 100755 --- a/hack/make-rules/test-cmd.sh +++ b/hack/make-rules/test-cmd.sh @@ -1111,6 +1111,14 @@ __EOF__ kube::test::get_object_assert 'pods b' "{{${id_field}}}" 'b' kubectl delete pod/a pod/b + ## kubectl apply --prune should fallback to delete for non reapable types + kubectl apply --all --prune -f hack/testdata/prune-reap/a.yml 2>&1 "${kube_flags[@]}" + kube::test::get_object_assert 'pvc a-pvc' "{{${id_field}}}" 'a-pvc' + kubectl apply --all --prune -f hack/testdata/prune-reap/b.yml 2>&1 "${kube_flags[@]}" + kube::test::get_object_assert 'pvc b-pvc' "{{${id_field}}}" 'b-pvc' + kube::test::get_object_assert pods "{{range.items}}{{$id_field}}:{{end}}" '' + kubectl delete pvc b-pvc 2>&1 "${kube_flags[@]}" + ## kubectl run should create deployments or jobs # Pre-Condition: no Job exists kube::test::get_object_assert jobs "{{range.items}}{{$id_field}}:{{end}}" '' diff --git a/hack/testdata/prune-reap/a.yml b/hack/testdata/prune-reap/a.yml new file mode 100644 index 00000000000..a9e51b73650 --- /dev/null +++ b/hack/testdata/prune-reap/a.yml @@ -0,0 +1,10 @@ +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: a-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10G diff --git a/hack/testdata/prune-reap/b.yml b/hack/testdata/prune-reap/b.yml new file mode 100644 index 00000000000..d8bd4465f5d --- /dev/null +++ b/hack/testdata/prune-reap/b.yml @@ -0,0 +1,10 @@ +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: b-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10G diff --git a/pkg/kubectl/cmd/apply.go b/pkg/kubectl/cmd/apply.go index 008db766435..73d883cec40 100644 --- a/pkg/kubectl/cmd/apply.go +++ b/pkg/kubectl/cmd/apply.go @@ -343,10 +343,7 @@ func (p *pruner) prune(namespace string, mapping *meta.RESTMapping, shortOutput func (p *pruner) delete(namespace, name string, mapping *meta.RESTMapping, c resource.RESTClient) error { if !p.cascade { - if err := resource.NewHelper(c, mapping).Delete(namespace, name); err != nil { - return err - } - return nil + return resource.NewHelper(c, mapping).Delete(namespace, name) } cs, err := p.clientsetFunc() if err != nil { @@ -354,7 +351,10 @@ func (p *pruner) delete(namespace, name string, mapping *meta.RESTMapping, c res } r, err := kubectl.ReaperFor(mapping.GroupVersionKind.GroupKind(), cs) if err != nil { - return err + if _, ok := err.(*kubectl.NoSuchReaperError); !ok { + return err + } + return resource.NewHelper(c, mapping).Delete(namespace, name) } if err := r.Stop(namespace, name, 2*time.Minute, api.NewDeleteOptions(int64(p.gracePeriod))); err != nil { return err