github.com/Azure/draft-classic@v0.16.0/cmd/draft/delete.go (about) 1 package main 2 3 import ( 4 "errors" 5 "fmt" 6 "io" 7 8 "github.com/spf13/cobra" 9 "golang.org/x/net/context" 10 "google.golang.org/grpc" 11 "k8s.io/helm/pkg/helm" 12 13 "github.com/Azure/draft/pkg/local" 14 "github.com/Azure/draft/pkg/storage/kube/configmap" 15 "github.com/Azure/draft/pkg/tasks" 16 ) 17 18 const deleteDesc = `This command deletes an application from your Kubernetes environment.` 19 20 type deleteCmd struct { 21 appName string 22 out io.Writer 23 } 24 25 func newDeleteCmd(out io.Writer) *cobra.Command { 26 var runningEnvironment string 27 28 dc := &deleteCmd{ 29 out: out, 30 } 31 32 cmd := &cobra.Command{ 33 Use: "delete [app]", 34 Short: "delete an application", 35 Long: deleteDesc, 36 RunE: func(cmd *cobra.Command, args []string) error { 37 if len(args) > 0 { 38 dc.appName = args[0] 39 } 40 return dc.run(runningEnvironment) 41 }, 42 } 43 44 f := cmd.Flags() 45 f.StringVarP(&runningEnvironment, environmentFlagName, environmentFlagShorthand, defaultDraftEnvironment(), environmentFlagUsage) 46 47 return cmd 48 } 49 50 func (d *deleteCmd) run(runningEnvironment string) error { 51 52 var name string 53 54 if d.appName != "" { 55 name = d.appName 56 } else { 57 deployedApp, err := local.DeployedApplication(draftToml, runningEnvironment) 58 if err != nil { 59 return errors.New("Unable to detect app name\nPlease pass in the name of the application") 60 61 } 62 63 name = deployedApp.Name 64 } 65 66 //TODO: replace with serverside call 67 if err := Delete(name); err != nil { 68 return err 69 } 70 71 msg := "app '" + name + "' deleted" 72 fmt.Fprintln(d.out, msg) 73 return nil 74 } 75 76 // Delete uses the helm client to delete an app with the given name 77 // 78 // Returns an error if the command failed. 79 func Delete(app string) error { 80 // set up helm client 81 client, config, err := getKubeClient(kubeContext) 82 if err != nil { 83 return fmt.Errorf("Could not get a kube client: %s", err) 84 } 85 86 // delete Draft storage for app 87 store := configmap.NewConfigMaps(client.CoreV1().ConfigMaps(tillerNamespace)) 88 if _, err := store.DeleteBuilds(context.Background(), app); err != nil { 89 return err 90 } 91 92 helmClient, err := setupHelm(client, config, tillerNamespace) 93 if err != nil { 94 return err 95 } 96 97 // delete helm release 98 _, err = helmClient.DeleteRelease(app, helm.DeletePurge(true)) 99 if err != nil { 100 return errors.New(grpc.ErrorDesc(err)) 101 } 102 103 taskList, err := tasks.Load(tasksTOMLFile) 104 if err != nil { 105 if err == tasks.ErrNoTaskFile { 106 debug(err.Error()) 107 } else { 108 return err 109 } 110 } else { 111 if _, err = taskList.Run(tasks.DefaultRunner, tasks.PostDelete, ""); err != nil { 112 return err 113 } 114 } 115 116 return nil 117 }