add --node-label flag for node create command (#584, @developer-guy, @ejose, @dentrax)

pull/597/head
Batuhan Apaydın 3 years ago committed by GitHub
parent 3fabe5012b
commit 5fe8a3c6c7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 23
      cmd/node/nodeCreate.go
  2. 5
      pkg/client/node.go
  3. 39
      pkg/types/types.go

@ -23,6 +23,7 @@ package node
import ( import (
"fmt" "fmt"
"strings"
"time" "time"
"github.com/spf13/cobra" "github.com/spf13/cobra"
@ -73,6 +74,8 @@ func NewCmdNodeCreate() *cobra.Command {
cmd.Flags().BoolVar(&createNodeOpts.Wait, "wait", false, "Wait for the node(s) to be ready before returning.") cmd.Flags().BoolVar(&createNodeOpts.Wait, "wait", false, "Wait for the node(s) to be ready before returning.")
cmd.Flags().DurationVar(&createNodeOpts.Timeout, "timeout", 0*time.Second, "Maximum waiting time for '--wait' before canceling/returning.") cmd.Flags().DurationVar(&createNodeOpts.Timeout, "timeout", 0*time.Second, "Maximum waiting time for '--wait' before canceling/returning.")
cmd.Flags().StringSliceP("k3s-node-label", "", []string{}, "Specify k3s node labels in format \"foo=bar\"")
// done // done
return cmd return cmd
} }
@ -124,6 +127,21 @@ func parseCreateNodeCmd(cmd *cobra.Command, args []string) ([]*k3d.Node, *k3d.Cl
log.Errorf("Provided memory limit value is invalid") log.Errorf("Provided memory limit value is invalid")
} }
k3sNodeLabelsFlag, err := cmd.Flags().GetStringSlice("k3s-node-label")
if err != nil {
log.Errorln("No node-label specified")
log.Fatalln(err)
}
k3sNodeLabels := make(map[string]string, len(k3sNodeLabelsFlag))
for _, label := range k3sNodeLabelsFlag {
labelSplitted := strings.Split(label, "=")
if len(labelSplitted) != 2 {
log.Fatalf("unknown label format format: %s, use format \"foo=bar\"", label)
}
k3sNodeLabels[labelSplitted[0]] = labelSplitted[1]
}
// generate list of nodes // generate list of nodes
nodes := []*k3d.Node{} nodes := []*k3d.Node{}
for i := 0; i < replicas; i++ { for i := 0; i < replicas; i++ {
@ -134,8 +152,9 @@ func parseCreateNodeCmd(cmd *cobra.Command, args []string) ([]*k3d.Node, *k3d.Cl
Labels: map[string]string{ Labels: map[string]string{
k3d.LabelRole: roleStr, k3d.LabelRole: roleStr,
}, },
Restart: true, K3sNodeLabels: k3sNodeLabels,
Memory: memory, Restart: true,
Memory: memory,
} }
nodes = append(nodes, node) nodes = append(nodes, node)
} }

@ -417,6 +417,11 @@ func patchAgentSpec(node *k3d.Node) error {
if node.Cmd == nil { if node.Cmd == nil {
node.Cmd = []string{"agent"} node.Cmd = []string{"agent"}
} }
for k, v := range node.K3sNodeLabels {
node.Args = append(node.Args, "--node-label", fmt.Sprintf("%s=%s", k, v))
}
return nil return nil
} }

@ -330,25 +330,26 @@ type NodeIP struct {
// Node describes a k3d node // Node describes a k3d node
type Node struct { type Node struct {
Name string `yaml:"name" json:"name,omitempty"` Name string `yaml:"name" json:"name,omitempty"`
Role Role `yaml:"role" json:"role,omitempty"` Role Role `yaml:"role" json:"role,omitempty"`
Image string `yaml:"image" json:"image,omitempty"` Image string `yaml:"image" json:"image,omitempty"`
Volumes []string `yaml:"volumes" json:"volumes,omitempty"` Volumes []string `yaml:"volumes" json:"volumes,omitempty"`
Env []string `yaml:"env" json:"env,omitempty"` Env []string `yaml:"env" json:"env,omitempty"`
Cmd []string // filled automatically based on role Cmd []string // filled automatically based on role
Args []string `yaml:"extraArgs" json:"extraArgs,omitempty"` Args []string `yaml:"extraArgs" json:"extraArgs,omitempty"`
Ports nat.PortMap `yaml:"portMappings" json:"portMappings,omitempty"` Ports nat.PortMap `yaml:"portMappings" json:"portMappings,omitempty"`
Restart bool `yaml:"restart" json:"restart,omitempty"` Restart bool `yaml:"restart" json:"restart,omitempty"`
Created string `yaml:"created" json:"created,omitempty"` Created string `yaml:"created" json:"created,omitempty"`
Labels map[string]string // filled automatically Labels map[string]string // filled automatically
Networks []string // filled automatically K3sNodeLabels map[string]string `yaml:"k3sNodeLabels" json:"k3sNodeLabels,omitempty"`
ExtraHosts []string // filled automatically Networks []string // filled automatically
ServerOpts ServerOpts `yaml:"serverOpts" json:"serverOpts,omitempty"` ExtraHosts []string // filled automatically
AgentOpts AgentOpts `yaml:"agentOpts" json:"agentOpts,omitempty"` ServerOpts ServerOpts `yaml:"serverOpts" json:"serverOpts,omitempty"`
GPURequest string // filled automatically AgentOpts AgentOpts `yaml:"agentOpts" json:"agentOpts,omitempty"`
Memory string // filled automatically GPURequest string // filled automatically
State NodeState // filled automatically Memory string // filled automatically
IP NodeIP // filled automatically State NodeState // filled automatically
IP NodeIP // filled automatically
} }
// ServerOpts describes some additional server role specific opts // ServerOpts describes some additional server role specific opts

Loading…
Cancel
Save