diff --git a/pkg/cluster/cluster.go b/pkg/cluster/cluster.go index 713bf09d..e36224d6 100644 --- a/pkg/cluster/cluster.go +++ b/pkg/cluster/cluster.go @@ -39,8 +39,13 @@ func CreateCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error { workerCount := 0 for _, node := range cluster.Nodes { - suffix := 0 + + // cluster specific settings + node.Labels = make(map[string]string) + node.Labels["cluster"] = cluster.Name + // node role specific settings + suffix := 0 if node.Role == "master" { // name suffix suffix = masterCount @@ -55,7 +60,7 @@ func CreateCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error { // create node log.Infoln("Creating node", node.Name) - if err := runtime.CreateNode(&node); err != nil { + if err := CreateNode(&node, runtime); err != nil { log.Errorln("...failed") } } diff --git a/pkg/cluster/node.go b/pkg/cluster/node.go index 862cfe7f..d49f4076 100644 --- a/pkg/cluster/node.go +++ b/pkg/cluster/node.go @@ -50,15 +50,25 @@ func CreateNode(node *k3d.Node, runtime k3drt.Runtime) error { */ // global node configuration (applies for any node role) - node.Labels = k3d.DefaultObjectLabels + labels := make(map[string]string) + for k, v := range k3d.DefaultObjectLabels { + labels[k] = v + } + for k, v := range node.Labels { + labels[k] = v + } + node.Labels = labels // specify options depending on node role if node.Role == "worker" { // TODO: check here AND in CLI or only here? - node.Args = append([]string{"agent"}, node.Args...) - node.Labels["role"] = "worker" + if err := patchWorkerSpec(node); err != nil { + return err + } } else if node.Role == "master" { - node.Args = append([]string{"server"}, node.Args...) - node.Labels["role"] = "master" + if err := patchMasterSpec(node); err != nil { + return err + } + log.Debugf("spec = %+v\n", node) } else { return fmt.Errorf("Unknown node role '%s'", node.Role) } @@ -90,3 +100,17 @@ func DeleteNode(node *k3d.Node, runtimeChoice string) error { log.Debugln("...success") return nil } + +// patchWorkerSpec adds worker node specific settings to a node +func patchWorkerSpec(node *k3d.Node) error { + node.Args = append([]string{"agent"}, node.Args...) + node.Labels["role"] = "worker" // TODO: maybe put those in a global var DefaultWorkerNodeSpec? + return nil +} + +// patchMasterSpec adds worker node specific settings to a node +func patchMasterSpec(node *k3d.Node) error { + node.Args = append([]string{"server"}, node.Args...) + node.Labels["role"] = "master" // TODO: maybe put those in a global var DefaultMasterNodeSpec? + return nil +}