github.com/olli-ai/jx/v2@v2.0.400-0.20210921045218-14731b4dd448/pkg/cmd/deletecmd/delete_addon.go (about) 1 package deletecmd 2 3 import ( 4 "github.com/olli-ai/jx/v2/pkg/cmd/helper" 5 "github.com/olli-ai/jx/v2/pkg/cmd/opts" 6 "github.com/olli-ai/jx/v2/pkg/kube/services" 7 8 "github.com/spf13/cobra" 9 meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1" 10 11 "fmt" 12 13 "github.com/olli-ai/jx/v2/pkg/kube" 14 "github.com/olli-ai/jx/v2/pkg/util" 15 ) 16 17 // DeleteAddonOptions are the flags for delete commands 18 type DeleteAddonOptions struct { 19 *opts.CommonOptions 20 21 Purge bool 22 } 23 24 // NewCmdDeleteAddon creates a command object for the generic "get" action, which 25 // retrieves one or more resources from a server. 26 func NewCmdDeleteAddon(commonOpts *opts.CommonOptions) *cobra.Command { 27 options := &DeleteAddonOptions{ 28 CommonOptions: commonOpts, 29 } 30 31 cmd := &cobra.Command{ 32 Use: "addon", 33 Short: "Deletes one or more addons", 34 Run: func(cmd *cobra.Command, args []string) { 35 options.Cmd = cmd 36 options.Args = args 37 err := options.Run() 38 helper.CheckErr(err) 39 }, 40 SuggestFor: []string{"remove", "rm"}, 41 } 42 43 cmd.AddCommand(NewCmdDeleteAddonEnvironmentController(commonOpts)) 44 cmd.AddCommand(NewCmdDeleteAddonFlagger(commonOpts)) 45 cmd.AddCommand(NewCmdDeleteAddonGitea(commonOpts)) 46 cmd.AddCommand(NewCmdDeleteAddonIstio(commonOpts)) 47 options.addFlags(cmd) 48 return cmd 49 } 50 51 func (options *DeleteAddonOptions) addFlags(cmd *cobra.Command) { 52 cmd.Flags().BoolVarP(&options.Purge, "purge", "p", true, "Removes the release name from helm so it can be reused again") 53 } 54 55 // Run implements this command 56 func (o *DeleteAddonOptions) Run() error { 57 args := o.Args 58 if len(args) == 0 { 59 return o.Cmd.Help() 60 } 61 charts := kube.AddonCharts 62 63 for _, arg := range args { 64 chart := charts[arg] 65 if chart == "" { 66 return util.InvalidArg(arg, util.SortedMapKeys(charts)) 67 } 68 err := o.DeleteChart(arg, o.Purge) 69 if err != nil { 70 return fmt.Errorf("Failed to delete chart %s: %s", chart, err) 71 } 72 err = o.cleanupServiceLink(arg) 73 if err != nil { 74 return fmt.Errorf("Failed to delete the service link for addon %s", arg) 75 } 76 } 77 78 return nil 79 } 80 81 func (o *DeleteAddonOptions) cleanupServiceLink(addonName string) error { 82 serviceName, ok := kube.AddonServices[addonName] 83 if !ok { 84 // No cleanup is required if no service link is associated with the Addon 85 return nil 86 } 87 client, err := o.KubeClient() 88 if err != nil { 89 return err 90 } 91 92 svc, err := services.FindService(client, serviceName) 93 if err != nil { 94 return err 95 } 96 97 return client.CoreV1().Services(svc.GetNamespace()).Delete(svc.GetName(), &meta_v1.DeleteOptions{}) 98 }