...

Source file src/github.com/linkerd/linkerd2/multicluster/cmd/uninstall.go

Documentation: github.com/linkerd/linkerd2/multicluster/cmd

     1  package cmd
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"os"
     7  	"strings"
     8  
     9  	pkgCmd "github.com/linkerd/linkerd2/pkg/cmd"
    10  	"github.com/linkerd/linkerd2/pkg/k8s"
    11  	mc "github.com/linkerd/linkerd2/pkg/multicluster"
    12  	"github.com/spf13/cobra"
    13  
    14  	kerrors "k8s.io/apimachinery/pkg/api/errors"
    15  	"k8s.io/client-go/tools/clientcmd"
    16  )
    17  
    18  func newMulticlusterUninstallCommand() *cobra.Command {
    19  
    20  	cmd := &cobra.Command{
    21  		Use:   "uninstall",
    22  		Short: "Output Kubernetes configs to uninstall the Linkerd multicluster add-on",
    23  		Args:  cobra.NoArgs,
    24  		RunE: func(cmd *cobra.Command, args []string) error {
    25  
    26  			rules := clientcmd.NewDefaultClientConfigLoadingRules()
    27  			rules.ExplicitPath = kubeconfigPath
    28  			loader := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(rules, &clientcmd.ConfigOverrides{})
    29  			config, err := loader.RawConfig()
    30  			if err != nil {
    31  				return err
    32  			}
    33  
    34  			if kubeContext != "" {
    35  				config.CurrentContext = kubeContext
    36  			}
    37  
    38  			k8sAPI, err := k8s.NewAPI(kubeconfigPath, config.CurrentContext, impersonate, impersonateGroup, 0)
    39  			if err != nil {
    40  				return err
    41  			}
    42  
    43  			links, err := mc.GetLinks(cmd.Context(), k8sAPI.DynamicClient)
    44  			if err != nil && !kerrors.IsNotFound(err) {
    45  				return err
    46  			}
    47  
    48  			if len(links) > 0 {
    49  				err := []string{"Please unlink the following clusters before uninstalling multicluster:"}
    50  				for _, link := range links {
    51  					err = append(err, fmt.Sprintf("  * %s", link.TargetClusterName))
    52  				}
    53  				return errors.New(strings.Join(err, "\n"))
    54  			}
    55  
    56  			selector, err := pkgCmd.GetLabelSelector(k8s.LinkerdExtensionLabel, MulticlusterExtensionName, MulticlusterLegacyExtension)
    57  			if err != nil {
    58  				return err
    59  			}
    60  
    61  			err = pkgCmd.Uninstall(cmd.Context(), k8sAPI, selector)
    62  			if err != nil {
    63  				fmt.Fprintln(os.Stderr, err)
    64  				os.Exit(1)
    65  			}
    66  			return nil
    67  		},
    68  	}
    69  
    70  	return cmd
    71  }
    72  

View as plain text