registryDelete/nodeDelete: make --all work and add 'node delete --registries'
This commit is contained in:
parent
a37b01c5b9
commit
683a92792e
@ -30,25 +30,37 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
type nodeDeleteFlags struct {
|
||||
All bool
|
||||
IncludeRegistries bool
|
||||
}
|
||||
|
||||
// NewCmdNodeDelete returns a new cobra command
|
||||
func NewCmdNodeDelete() *cobra.Command {
|
||||
|
||||
flags := nodeDeleteFlags{}
|
||||
|
||||
// create new cobra command
|
||||
cmd := &cobra.Command{
|
||||
Use: "delete (NAME | --all)",
|
||||
Short: "Delete node(s).",
|
||||
Long: `Delete node(s).`,
|
||||
Args: cobra.MinimumNArgs(1), // at least one node has to be specified
|
||||
ValidArgsFunction: util.ValidArgsAvailableNodes,
|
||||
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 {
|
||||
log.Infoln("No nodes found")
|
||||
} else {
|
||||
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)
|
||||
}
|
||||
}
|
||||
@ -59,30 +71,38 @@ func NewCmdNodeDelete() *cobra.Command {
|
||||
// add subcommands
|
||||
|
||||
// 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
|
||||
return cmd
|
||||
}
|
||||
|
||||
// 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 {
|
||||
|
||||
var nodes []*k3d.Node
|
||||
var err error
|
||||
|
||||
// --all
|
||||
var nodes []*k3d.Node
|
||||
|
||||
if all, err := cmd.Flags().GetBool("all"); err != nil {
|
||||
log.Fatalln(err)
|
||||
} else if all {
|
||||
if flags.All {
|
||||
if !flags.IncludeRegistries {
|
||||
log.Infoln("Didn't set '--registries', so won't delete registries.")
|
||||
}
|
||||
nodes, err = client.NodeList(cmd.Context(), runtimes.SelectedRuntime)
|
||||
if err != nil {
|
||||
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
|
||||
}
|
||||
|
||||
if len(args) < 1 {
|
||||
if !flags.All && len(args) < 1 {
|
||||
log.Fatalln("Expecting at least one node name if `--all` is not set")
|
||||
}
|
||||
|
||||
|
@ -30,25 +30,30 @@ import (
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
type registryDeleteFlags struct {
|
||||
All bool
|
||||
}
|
||||
|
||||
// NewCmdRegistryDelete returns a new cobra command
|
||||
func NewCmdRegistryDelete() *cobra.Command {
|
||||
|
||||
flags := registryDeleteFlags{}
|
||||
|
||||
// create new cobra command
|
||||
cmd := &cobra.Command{
|
||||
Use: "delete (NAME | --all)",
|
||||
Short: "Delete registry/registries.",
|
||||
Long: `Delete registry/registries.`,
|
||||
Args: cobra.MinimumNArgs(1), // at least one node has to be specified
|
||||
ValidArgsFunction: util.ValidArgsAvailableRegistries,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
|
||||
nodes := parseRegistryDeleteCmd(cmd, args)
|
||||
nodes := parseRegistryDeleteCmd(cmd, args, &flags)
|
||||
|
||||
if len(nodes) == 0 {
|
||||
log.Infoln("No nodes found")
|
||||
log.Infoln("No registries found")
|
||||
} else {
|
||||
for _, node := range nodes {
|
||||
if err := client.NodeDelete(cmd.Context(), runtimes.SelectedRuntime, node, k3d.NodeDeleteOpts{SkipLBUpdate: true}); err != nil {
|
||||
if err := client.NodeDelete(cmd.Context(), runtimes.SelectedRuntime, node, k3d.NodeDeleteOpts{SkipLBUpdate: true, SkipRegistryCheck: true}); err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
}
|
||||
@ -59,29 +64,26 @@ func NewCmdRegistryDelete() *cobra.Command {
|
||||
// add subcommands
|
||||
|
||||
// add flags
|
||||
cmd.Flags().BoolP("all", "a", false, "Delete all existing registries")
|
||||
cmd.Flags().BoolVarP(&flags.All, "all", "a", false, "Delete all existing registries")
|
||||
|
||||
// done
|
||||
return cmd
|
||||
}
|
||||
|
||||
// parseRegistryDeleteCmd parses the command input into variables required to delete nodes
|
||||
func parseRegistryDeleteCmd(cmd *cobra.Command, args []string) []*k3d.Node {
|
||||
func parseRegistryDeleteCmd(cmd *cobra.Command, args []string, flags *registryDeleteFlags) []*k3d.Node {
|
||||
|
||||
// --all
|
||||
var nodes []*k3d.Node
|
||||
var err error
|
||||
|
||||
if all, err := cmd.Flags().GetBool("all"); err != nil {
|
||||
log.Fatalln(err)
|
||||
} else if all {
|
||||
if flags.All {
|
||||
nodes, err = client.NodeList(cmd.Context(), runtimes.SelectedRuntime)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
return nodes
|
||||
}
|
||||
|
||||
if len(args) < 1 {
|
||||
if !flags.All && len(args) < 1 {
|
||||
log.Fatalln("Expecting at least one registry name if `--all` is not set")
|
||||
}
|
||||
|
||||
@ -93,5 +95,7 @@ func parseRegistryDeleteCmd(cmd *cobra.Command, args []string) []*k3d.Node {
|
||||
nodes = append(nodes, node)
|
||||
}
|
||||
|
||||
nodes = client.NodeFilterByRoles(nodes, []k3d.Role{k3d.RegistryRole}, []k3d.Role{})
|
||||
|
||||
return nodes
|
||||
}
|
||||
|
@ -77,6 +77,7 @@ k3d
|
||||
stop NODENAME # stop a node
|
||||
delete NODENAME # delete an existing node
|
||||
-a, --all # delete all existing nodes (default: false)
|
||||
-r, --registries # also delete registries, as a special type of node (default: false)
|
||||
list NODENAME
|
||||
--no-headers # do not print headers (default: false)
|
||||
registry
|
||||
|
@ -442,5 +442,8 @@ nodeLoop:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
log.Tracef("Filteres %d nodes by roles (in: %+v | ex: %+v), got %d left", len(nodes), includeRoles, excludeRoles, len(resultList))
|
||||
|
||||
return resultList
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user