add deleteCluster functionality

pull/227/head
iwilltry42 5 years ago
parent 7063d62508
commit 1e33e0de8c
  1. 64
      cmd/delete/deleteCluster.go
  2. 1
      cmd/get/getCluster.go
  3. 21
      pkg/cluster/cluster.go

@ -40,19 +40,21 @@ func NewCmdDeleteCluster() *cobra.Command {
Long: `Delete a cluster.`, Long: `Delete a cluster.`,
Run: func(cmd *cobra.Command, args []string) { Run: func(cmd *cobra.Command, args []string) {
log.Debugln("delete cluster called") log.Debugln("delete cluster called")
rt, err := cmd.Flags().GetString("runtime")
if err != nil { rt, cs := parseDeleteClusterCmd(cmd, args)
log.Debugln("runtime not defined")
} if len(cs) == 0 {
runtime, err := runtimes.GetRuntime(rt) log.Infoln("No clusters found")
if err != nil { } else {
log.Fatalf("Unsupported runtime '%s'", rt) for _, c := range cs {
} if err := cluster.DeleteCluster(c, rt); err != nil {
for _, name := range args { log.Fatalln(err)
if err := cluster.DeleteCluster(&k3d.Cluster{Name: name}, runtime); err != nil { }
log.Errorln(err)
} }
} }
log.Debugln("...Finished")
}, },
} }
@ -64,3 +66,43 @@ func NewCmdDeleteCluster() *cobra.Command {
// done // done
return cmd return cmd
} }
// parseDeleteClusterCmd parses the command input into variables required to create a cluster
func parseDeleteClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime, []*k3d.Cluster) {
// --runtime
rt, err := cmd.Flags().GetString("runtime")
if err != nil {
log.Fatalln("No runtime specified")
}
runtime, err := runtimes.GetRuntime(rt)
if err != nil {
log.Fatalln(err)
}
// --all
var clusters []*k3d.Cluster
if all, err := cmd.Flags().GetBool("all"); err != nil {
log.Fatalln(err)
} else if all {
clusters, err = cluster.GetClusters(runtime)
if err != nil {
log.Fatalln(err)
}
return runtime, clusters
}
if len(args) < 1 {
log.Fatalln("Expecting at least one cluster name if `--all` is not set")
}
for _, name := range args {
cluster, err := cluster.GetCluster(&k3d.Cluster{Name: name}, runtime)
if err != nil {
log.Fatalln(err)
}
clusters = append(clusters, cluster)
}
return runtime, clusters
}

@ -90,6 +90,7 @@ func parseGetClusterCmd(cmd *cobra.Command, args []string) (*k3d.Cluster, runtim
return cluster, runtime return cluster, runtime
} }
// TODO: improve (tabular output or output similar to kubectl)
func printClusters(clusters []*k3d.Cluster) { func printClusters(clusters []*k3d.Cluster) {
for _, cluster := range clusters { for _, cluster := range clusters {
fmt.Printf("@@@ Cluster '%s' @@@\n", cluster.Name) fmt.Printf("@@@ Cluster '%s' @@@\n", cluster.Name)

@ -107,6 +107,23 @@ func CreateCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error {
// DeleteCluster deletes an existing cluster // DeleteCluster deletes an existing cluster
func DeleteCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error { func DeleteCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error {
log.Infof("Deleting cluster '%s'", cluster.Name)
failed := 0
for _, node := range cluster.Nodes {
if err := runtime.DeleteNode(&node); err != nil {
log.Warningf("Failed to delete node '%s': Try to delete it manually", node.Name)
failed++
continue
}
}
// TODO: remove network
if failed > 0 {
return fmt.Errorf("Failed to delete %d nodes: Try to delete them manually", failed)
}
return nil return nil
} }
@ -148,6 +165,10 @@ func GetCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) (*k3d.Cluster, erro
log.Errorf("Failed to get nodes for cluster '%s'", cluster.Name) log.Errorf("Failed to get nodes for cluster '%s'", cluster.Name)
} }
if len(nodes) == 0 {
return nil, fmt.Errorf("No nodes found for cluster '%s'", cluster.Name)
}
// append nodes // append nodes
for _, node := range nodes { for _, node := range nodes {
cluster.Nodes = append(cluster.Nodes, *node) cluster.Nodes = append(cluster.Nodes, *node)

Loading…
Cancel
Save