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  }