From aafba39a4239f28ed4e6d160cc236ce0c070d3e2 Mon Sep 17 00:00:00 2001 From: Tuna Date: Fri, 19 Aug 2016 17:48:44 +0700 Subject: [PATCH] use reapers to delete objects --- cli/app/app.go | 3 +- pkg/transformer/kubernetes/kubernetes.go | 60 +++++++++++++++--------- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/cli/app/app.go b/cli/app/app.go index cd30bf3a..b3eed701 100644 --- a/cli/app/app.go +++ b/cli/app/app.go @@ -243,8 +243,7 @@ func Down(c *cli.Context) { if len(file) > 0 && file != "docker-compose.yml" { logrus.Fatalf("Error: --file/--bundle and --all cannot be specified at the same time") } - fmt.Println("Using flag --all/-a will delete all resources in the kubernetes cluster.") - fmt.Print("Are you sure to continue? (yes/no): ") + fmt.Print("Are you sure? (yes/no): ") if !askForConfirmation() { return } diff --git a/pkg/transformer/kubernetes/kubernetes.go b/pkg/transformer/kubernetes/kubernetes.go index 94935255..69009d53 100644 --- a/pkg/transformer/kubernetes/kubernetes.go +++ b/pkg/transformer/kubernetes/kubernetes.go @@ -31,6 +31,9 @@ import ( client "k8s.io/kubernetes/pkg/client/unversioned" "k8s.io/kubernetes/pkg/runtime" "k8s.io/kubernetes/pkg/util/intstr" + //"k8s.io/kubernetes/pkg/controller/daemon" + "k8s.io/kubernetes/pkg/kubectl" + "time" ) type Kubernetes struct { @@ -296,13 +299,25 @@ func CreateObjects(client *client.Client, objects []runtime.Object) { } func DeleteObjects(client *client.Client, name string) { - err := client.Services(api.NamespaceDefault).Delete(name) + //delete svc + rpService, err := kubectl.ReaperFor(api.Kind("Service"), client) + if err != nil { + logrus.Fatalf("Error: '%v' while getting reaper for service", err) + } + //FIXME: timeout = 300s, gracePeriod is nil + err = rpService.Stop(api.NamespaceDefault, name, 300*time.Second, nil) if err != nil { logrus.Fatalf("Error: '%v' while deleting service: %s", err, name) } logrus.Infof("Successfully deleted service: %s", name) - err = client.Deployments(api.NamespaceDefault).Delete(name, nil) + //delete deployment + rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client) + if err != nil { + logrus.Fatalf("Error: '%v' while getting reaper for deployment", err) + } + //FIXME: timeout = 300s, gracePeriod is nil + err = rpDeployment.Stop(api.NamespaceDefault, name, 300*time.Second, nil) if err != nil { logrus.Fatalf("Error: '%v' while deleting deployment: %s", err, name) } @@ -311,6 +326,10 @@ func DeleteObjects(client *client.Client, name string) { func DeleteAll(client *client.Client) { //delete all svc + rpService, err := kubectl.ReaperFor(api.Kind("Service"), client) + if err != nil { + logrus.Fatalf("Error: '%v' while getting reaper for service", err) + } listOpts := api.ListOptions{} svcs, err := client.Services(api.NamespaceDefault).List(listOpts) if err != nil { @@ -320,7 +339,7 @@ func DeleteAll(client *client.Client) { if svc.Name == "kubernetes" { continue } - err = client.Services(api.NamespaceDefault).Delete(svc.Name) + err = rpService.Stop(api.NamespaceDefault, svc.Name, 300*time.Second, nil) if err != nil { logrus.Fatalf("Error: '%v' while deleting service: %s", err, svc.Name) } @@ -328,12 +347,17 @@ func DeleteAll(client *client.Client) { } //delete all deployment + rpDeployment, err := kubectl.ReaperFor(extensions.Kind("Deployment"), client) + if err != nil { + logrus.Fatalf("Error: '%v' while getting reaper for deployment", err) + } deployments, err := client.Deployments(api.NamespaceDefault).List(listOpts) if err != nil { logrus.Fatalf("Error: '%v' while listing deployments in the cluster", err) } + //FIXME: timeout = 300s, gracePeriod is nil for _, deployment := range deployments.Items { - err = client.Deployments(api.NamespaceDefault).Delete(deployment.Name, nil) + err = rpDeployment.Stop(api.NamespaceDefault, deployment.Name, 300*time.Second, nil) if err != nil { logrus.Fatalf("Error: '%v' while deleting deployment: %s", err, deployment.Name) } @@ -341,28 +365,22 @@ func DeleteAll(client *client.Client) { } //delete all daemonset - daemons, err := client.DaemonSets(api.NamespaceDefault).List(listOpts) + rpDaemonSet, err := kubectl.ReaperFor(extensions.Kind("DaemonSet"), client) + if err != nil { + logrus.Fatalf("Error: '%v' while getting reaper for daemonset", err) + } + daemonsets, err := client.DaemonSets(api.NamespaceDefault).List(listOpts) if err != nil { logrus.Fatalf("Error: '%v' while listing daemonsets in the cluster", err) } - for _, daemon := range daemons.Items { - err = client.DaemonSets(api.NamespaceDefault).Delete(daemon.Name) + //FIXME: timeout = 300s, gracePeriod is nil + for _, daemonset := range daemonsets.Items { + err = rpDaemonSet.Stop(api.NamespaceDefault, daemonset.Name, 300*time.Second, nil) if err != nil { - logrus.Fatalf("Error: '%v' while deleting daemonset: %s", err, daemon.Name) + logrus.Fatalf("Error: '%v' while deleting daemonset: %s", err, daemonset.Name) } - logrus.Infof("Successfully deleted daemonset: %s", daemon.Name) + logrus.Infof("Successfully deleted daemonset: %s", daemonset.Name) } - //delete all rc - rcs, err := client.ReplicationControllers(api.NamespaceDefault).List(listOpts) - if err != nil { - logrus.Fatalf("Error: '%v' while listing replication controllers in the cluster", err) - } - for _, rc := range rcs.Items { - err = client.ReplicationControllers(api.NamespaceDefault).Delete(rc.Name) - if err != nil { - logrus.Fatalf("Error: '%v' while deleting replication controller: %s", err, rc.Name) - } - logrus.Infof("Successfully deleted replication controller: %s", rc.Name) - } + //TODO: delete all jobs }