|
|
@ -30,25 +30,37 @@ import ( |
|
|
|
"github.com/spf13/cobra" |
|
|
|
"github.com/spf13/cobra" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type nodeDeleteFlags struct { |
|
|
|
|
|
|
|
All bool |
|
|
|
|
|
|
|
IncludeRegistries bool |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// NewCmdNodeDelete returns a new cobra command
|
|
|
|
// NewCmdNodeDelete returns a new cobra command
|
|
|
|
func NewCmdNodeDelete() *cobra.Command { |
|
|
|
func NewCmdNodeDelete() *cobra.Command { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
flags := nodeDeleteFlags{} |
|
|
|
|
|
|
|
|
|
|
|
// create new cobra command
|
|
|
|
// create new cobra command
|
|
|
|
cmd := &cobra.Command{ |
|
|
|
cmd := &cobra.Command{ |
|
|
|
Use: "delete (NAME | --all)", |
|
|
|
Use: "delete (NAME | --all)", |
|
|
|
Short: "Delete node(s).", |
|
|
|
Short: "Delete node(s).", |
|
|
|
Long: `Delete node(s).`, |
|
|
|
Long: `Delete node(s).`, |
|
|
|
Args: cobra.MinimumNArgs(1), // at least one node has to be specified
|
|
|
|
|
|
|
|
ValidArgsFunction: util.ValidArgsAvailableNodes, |
|
|
|
ValidArgsFunction: util.ValidArgsAvailableNodes, |
|
|
|
Run: func(cmd *cobra.Command, args []string) { |
|
|
|
Run: func(cmd *cobra.Command, args []string) { |
|
|
|
|
|
|
|
|
|
|
|
nodes := parseDeleteNodeCmd(cmd, args) |
|
|
|
nodes := parseDeleteNodeCmd(cmd, args, &flags) |
|
|
|
|
|
|
|
nodeDeleteOpts := k3d.NodeDeleteOpts{ |
|
|
|
|
|
|
|
SkipRegistryCheck: true, |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if flags.All { |
|
|
|
|
|
|
|
nodeDeleteOpts.SkipLBUpdate = true |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if len(nodes) == 0 { |
|
|
|
if len(nodes) == 0 { |
|
|
|
log.Infoln("No nodes found") |
|
|
|
log.Infoln("No nodes found") |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
for _, node := range nodes { |
|
|
|
for _, node := range nodes { |
|
|
|
if err := client.NodeDelete(cmd.Context(), runtimes.SelectedRuntime, node, k3d.NodeDeleteOpts{SkipRegistryCheck: true}); err != nil { |
|
|
|
if err := client.NodeDelete(cmd.Context(), runtimes.SelectedRuntime, node, nodeDeleteOpts); err != nil { |
|
|
|
log.Fatalln(err) |
|
|
|
log.Fatalln(err) |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -59,30 +71,38 @@ func NewCmdNodeDelete() *cobra.Command { |
|
|
|
// add subcommands
|
|
|
|
// add subcommands
|
|
|
|
|
|
|
|
|
|
|
|
// add flags
|
|
|
|
// add flags
|
|
|
|
cmd.Flags().BoolP("all", "a", false, "Delete all existing nodes") |
|
|
|
cmd.Flags().BoolVarP(&flags.All, "all", "a", false, "Delete all existing nodes") |
|
|
|
|
|
|
|
cmd.Flags().BoolVarP(&flags.IncludeRegistries, "registries", "r", false, "Also delete registries") |
|
|
|
|
|
|
|
|
|
|
|
// done
|
|
|
|
// done
|
|
|
|
return cmd |
|
|
|
return cmd |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
// parseDeleteNodeCmd parses the command input into variables required to delete nodes
|
|
|
|
// parseDeleteNodeCmd parses the command input into variables required to delete nodes
|
|
|
|
func parseDeleteNodeCmd(cmd *cobra.Command, args []string) []*k3d.Node { |
|
|
|
func parseDeleteNodeCmd(cmd *cobra.Command, args []string, flags *nodeDeleteFlags) []*k3d.Node { |
|
|
|
|
|
|
|
|
|
|
|
// --all
|
|
|
|
|
|
|
|
var nodes []*k3d.Node |
|
|
|
var nodes []*k3d.Node |
|
|
|
|
|
|
|
var err error |
|
|
|
|
|
|
|
|
|
|
|
if all, err := cmd.Flags().GetBool("all"); err != nil { |
|
|
|
// --all
|
|
|
|
log.Fatalln(err) |
|
|
|
if flags.All { |
|
|
|
} else if all { |
|
|
|
if !flags.IncludeRegistries { |
|
|
|
|
|
|
|
log.Infoln("Didn't set '--registries', so won't delete registries.") |
|
|
|
|
|
|
|
} |
|
|
|
nodes, err = client.NodeList(cmd.Context(), runtimes.SelectedRuntime) |
|
|
|
nodes, err = client.NodeList(cmd.Context(), runtimes.SelectedRuntime) |
|
|
|
if err != nil { |
|
|
|
if err != nil { |
|
|
|
log.Fatalln(err) |
|
|
|
log.Fatalln(err) |
|
|
|
} |
|
|
|
} |
|
|
|
nodes = client.NodeFilterByRoles(nodes, k3d.ClusterInternalNodeRoles, k3d.ClusterInternalNodeRoles) |
|
|
|
include := k3d.ClusterInternalNodeRoles |
|
|
|
|
|
|
|
exclude := []k3d.Role{} |
|
|
|
|
|
|
|
if flags.IncludeRegistries { |
|
|
|
|
|
|
|
include = append(include, k3d.RegistryRole) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
nodes = client.NodeFilterByRoles(nodes, include, exclude) |
|
|
|
return nodes |
|
|
|
return nodes |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if len(args) < 1 { |
|
|
|
if !flags.All && len(args) < 1 { |
|
|
|
log.Fatalln("Expecting at least one node name if `--all` is not set") |
|
|
|
log.Fatalln("Expecting at least one node name if `--all` is not set") |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|