From 2c2cdfccb2e67cab62d777574d77eafe113be9ec Mon Sep 17 00:00:00 2001 From: hasbro17 Date: Mon, 26 Feb 2018 13:04:02 -0800 Subject: [PATCH] sdk/action: implement kube delete --- pkg/sdk/action/action.go | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/pkg/sdk/action/action.go b/pkg/sdk/action/action.go index b7569f7332..9242241c6c 100644 --- a/pkg/sdk/action/action.go +++ b/pkg/sdk/action/action.go @@ -9,6 +9,7 @@ import ( apierrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/api/meta" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) const ( @@ -81,9 +82,32 @@ func KubeApply(object sdkTypes.Object) (err error) { return nil } -// KubeDelete deletes an object +// KubeDelete deletes an object if it still exists func KubeDelete(object sdkTypes.Object) (err error) { - panic("TODO") + defer func() { + if err != nil { + err = fmt.Errorf("kube-delete failed: %v", err) + } + }() + + name, namespace, err := getNameAndNamespace(object) + if err != nil { + return err + } + gvk := object.GetObjectKind().GroupVersionKind() + apiVersion, kind := gvk.ToAPIVersionAndKind() + objectInfo := objectInfoString(kind, name, namespace) + + resourceClient, _, err := k8sclient.GetResourceClient(apiVersion, kind, namespace) + if err != nil { + return fmt.Errorf("failed to get resource client for object: %v", err) + } + + err = resourceClient.Delete(name, &metav1.DeleteOptions{}) + if err != nil && !apierrors.IsNotFound(err) { + return fmt.Errorf("failed to delete object (%s): %v", objectInfo, err) + } + return nil } func getNameAndNamespace(object sdkTypes.Object) (string, string, error) {