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"
)
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 {
// --all
var nodes []*k3d.Node
var err error
if all, err := cmd.Flags().GetBool("all"); err != nil {
log.Fatalln(err)
} else if all {
// --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…
Cancel
Save