From cf2c839b2705ff46a514dc65a870cd9f8429ac09 Mon Sep 17 00:00:00 2001 From: iwilltry42 Date: Fri, 29 May 2020 14:03:34 +0200 Subject: [PATCH] createNode: use default role label and cmd... ...if existing node does not match target role Fixes #254 --- cmd/create/createNode.go | 4 +++- pkg/cluster/node.go | 13 ++++++++----- pkg/types/types.go | 6 ++++++ 3 files changed, 17 insertions(+), 6 deletions(-) diff --git a/cmd/create/createNode.go b/cmd/create/createNode.go index c179ccfc..223eaff0 100644 --- a/cmd/create/createNode.go +++ b/cmd/create/createNode.go @@ -78,7 +78,6 @@ func parseCreateNodeCmd(cmd *cobra.Command, args []string) ([]*k3d.Node, *k3d.Cl } // --role - // TODO: createNode: for --role=master, update the nginx config and add TLS-SAN and server connection, etc. roleStr, err := cmd.Flags().GetString("role") if err != nil { log.Errorln("No node role specified") @@ -112,6 +111,9 @@ func parseCreateNodeCmd(cmd *cobra.Command, args []string) ([]*k3d.Node, *k3d.Cl Name: fmt.Sprintf("%s-%s-%d", k3d.DefaultObjectNamePrefix, args[0], i), Role: role, Image: image, + Labels: map[string]string{ + "k3d.role": roleStr, + }, } nodes = append(nodes, node) } diff --git a/pkg/cluster/node.go b/pkg/cluster/node.go index beade981..252953b3 100644 --- a/pkg/cluster/node.go +++ b/pkg/cluster/node.go @@ -43,13 +43,15 @@ func AddNodeToCluster(runtime runtimes.Runtime, node *k3d.Node, cluster *k3d.Clu return err } - log.Debugf("Adding node to cluster %+v", cluster) - // network node.Network = cluster.Network.Name // skeleton - node.Labels = map[string]string{} + if node.Labels == nil { + node.Labels = map[string]string{ + "k3d.role": string(node.Role), + } + } node.Env = []string{} // copy labels and env vars from a similar node in the selected cluster @@ -62,7 +64,8 @@ func AddNodeToCluster(runtime runtimes.Runtime, node *k3d.Node, cluster *k3d.Clu } // if we didn't find a node with the same role in the cluster, just choose any other node if chosenNode == nil { - log.Debugf("Didn't find node with role '%s' in cluster '%s'. Choosing any other node...", node.Role, cluster.Name) + log.Debugf("Didn't find node with role '%s' in cluster '%s'. Choosing any other node (and using defaults)...", node.Role, cluster.Name) + node.Cmd = k3d.DefaultRoleCmds[node.Role] for _, existingNode := range cluster.Nodes { if existingNode.Role != k3d.LoadBalancerRole { // any role except for the LoadBalancer role chosenNode = existingNode @@ -77,7 +80,7 @@ func AddNodeToCluster(runtime runtimes.Runtime, node *k3d.Node, cluster *k3d.Clu return err } - log.Debugf("Copying configuration from existing node %+v", chosenNode) + log.Debugf("Adding node %+v \n>>> to cluster %+v\n>>> based on existing node %+v", node, cluster, chosenNode) // merge node config of new node into existing node config if err := mergo.MergeWithOverwrite(chosenNode, *node); err != nil { diff --git a/pkg/types/types.go b/pkg/types/types.go index 2b445036..e23bfa29 100644 --- a/pkg/types/types.go +++ b/pkg/types/types.go @@ -67,6 +67,12 @@ var DefaultObjectLabels = map[string]string{ "app": "k3d", } +// DefaultRoleCmds maps the node roles to their respective default commands +var DefaultRoleCmds = map[Role][]string{ + MasterRole: {"server"}, + WorkerRole: {"agent"}, +} + // DefaultTmpfsMounts specifies tmpfs mounts that are required for all k3d nodes var DefaultTmpfsMounts = []string{ "/run",