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.`,
Run: func(cmd *cobra.Command, args []string) {
log.Debugln("delete cluster called")
rt, err := cmd.Flags().GetString("runtime")
if err != nil {
log.Debugln("runtime not defined")
}
runtime, err := runtimes.GetRuntime(rt)
if err != nil {
log.Fatalf("Unsupported runtime '%s'", rt)
}
for _, name := range args {
if err := cluster.DeleteCluster(&k3d.Cluster{Name: name}, runtime); err != nil {
log.Errorln(err)
rt, cs := parseDeleteClusterCmd(cmd, args)
if len(cs) == 0 {
log.Infoln("No clusters found")
} else {
for _, c := range cs {
if err := cluster.DeleteCluster(c, rt); err != nil {
log.Fatalln(err)
}
}
}
log.Debugln("...Finished")
},
}
@ -64,3 +66,43 @@ func NewCmdDeleteCluster() *cobra.Command {
// done
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
}
// TODO: improve (tabular output or output similar to kubectl)
func printClusters(clusters []*k3d.Cluster) {
for _, cluster := range clusters {
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
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
}
@ -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)
}
if len(nodes) == 0 {
return nil, fmt.Errorf("No nodes found for cluster '%s'", cluster.Name)
}
// append nodes
for _, node := range nodes {
cluster.Nodes = append(cluster.Nodes, *node)

Loading…
Cancel
Save