registryDelete/nodeDelete: make --all work and add 'node delete --registries'

pull/471/head
iwilltry42 4 years ago
parent a37b01c5b9
commit 683a92792e
No known key found for this signature in database
GPG Key ID: 7BA57AD1CFF16110
  1. 42
      cmd/node/nodeDelete.go
  2. 28
      cmd/registry/registryDelete.go
  3. 1
      docs/usage/commands.md
  4. 3
      pkg/client/node.go

@ -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")
} }

@ -30,25 +30,30 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
) )
type registryDeleteFlags struct {
All bool
}
// NewCmdRegistryDelete returns a new cobra command // NewCmdRegistryDelete returns a new cobra command
func NewCmdRegistryDelete() *cobra.Command { func NewCmdRegistryDelete() *cobra.Command {
flags := registryDeleteFlags{}
// create new cobra command // create new cobra command
cmd := &cobra.Command{ cmd := &cobra.Command{
Use: "delete (NAME | --all)", Use: "delete (NAME | --all)",
Short: "Delete registry/registries.", Short: "Delete registry/registries.",
Long: `Delete registry/registries.`, Long: `Delete registry/registries.`,
Args: cobra.MinimumNArgs(1), // at least one node has to be specified
ValidArgsFunction: util.ValidArgsAvailableRegistries, ValidArgsFunction: util.ValidArgsAvailableRegistries,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
nodes := parseRegistryDeleteCmd(cmd, args) nodes := parseRegistryDeleteCmd(cmd, args, &flags)
if len(nodes) == 0 { if len(nodes) == 0 {
log.Infoln("No nodes found") log.Infoln("No registries found")
} else { } else {
for _, node := range nodes { 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) log.Fatalln(err)
} }
} }
@ -59,29 +64,26 @@ func NewCmdRegistryDelete() *cobra.Command {
// add subcommands // add subcommands
// add flags // 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 // done
return cmd return cmd
} }
// parseRegistryDeleteCmd parses the command input into variables required to delete nodes // 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 nodes []*k3d.Node
var err error
if all, err := cmd.Flags().GetBool("all"); err != nil { if flags.All {
log.Fatalln(err)
} else if all {
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)
} }
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") 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 = append(nodes, node)
} }
nodes = client.NodeFilterByRoles(nodes, []k3d.Role{k3d.RegistryRole}, []k3d.Role{})
return nodes return nodes
} }

@ -77,6 +77,7 @@ k3d
stop NODENAME # stop a node stop NODENAME # stop a node
delete NODENAME # delete an existing node delete NODENAME # delete an existing node
-a, --all # delete all existing nodes (default: false) -a, --all # delete all existing nodes (default: false)
-r, --registries # also delete registries, as a special type of node (default: false)
list NODENAME list NODENAME
--no-headers # do not print headers (default: false) --no-headers # do not print headers (default: false)
registry 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 return resultList
} }

Loading…
Cancel
Save