use pointers to nodes in cluster struct
This commit is contained in:
parent
c92c9b8e2f
commit
82c29868a1
@ -148,7 +148,7 @@ func parseCreateClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime,
|
||||
}
|
||||
|
||||
// generate list of nodes
|
||||
cluster.Nodes = []k3d.Node{}
|
||||
cluster.Nodes = []*k3d.Node{}
|
||||
|
||||
// -> master nodes
|
||||
for i := 0; i < masterCount; i++ {
|
||||
@ -164,8 +164,7 @@ func parseCreateClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime,
|
||||
}
|
||||
|
||||
// append node to list
|
||||
cluster.Nodes = append(cluster.Nodes, node)
|
||||
cluster.MasterNodes = append(cluster.MasterNodes, &node)
|
||||
cluster.Nodes = append(cluster.Nodes, &node)
|
||||
}
|
||||
|
||||
// -> worker nodes
|
||||
@ -175,14 +174,13 @@ func parseCreateClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime,
|
||||
Image: image,
|
||||
}
|
||||
|
||||
cluster.Nodes = append(cluster.Nodes, node)
|
||||
cluster.WorkerNodes = append(cluster.WorkerNodes, &node)
|
||||
cluster.Nodes = append(cluster.Nodes, &node)
|
||||
}
|
||||
|
||||
// append volumes
|
||||
// TODO:
|
||||
for volume, filter := range volumeFilterMap {
|
||||
nodes, err := cliutil.FilterNodes(&cluster.Nodes, filter)
|
||||
nodes, err := cliutil.FilterNodes(cluster.Nodes, filter)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
|
@ -75,15 +75,29 @@ func SplitFilterFromFlag(flag string) (string, string, error) {
|
||||
}
|
||||
|
||||
// FilterNodes takes a string filter to return a filtered list of nodes
|
||||
func FilterNodes(nodes *[]k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
|
||||
// filterString is a semicolon-separated list of node filters
|
||||
filters := strings.Split(filterString, ";")
|
||||
|
||||
if len(filters) == 0 {
|
||||
return nil, fmt.Errorf("No filter specified")
|
||||
log.Warnln("No filter specified")
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
// map roles to subsets
|
||||
masterNodes := []*k3d.Node{}
|
||||
workerNodes := []*k3d.Node{}
|
||||
for _, node := range nodes {
|
||||
if node.Role == k3d.MasterRole {
|
||||
masterNodes = append(masterNodes, node)
|
||||
} else if node.Role == k3d.WorkerRole {
|
||||
workerNodes = append(workerNodes, node)
|
||||
}
|
||||
}
|
||||
|
||||
filteredNodes := make([]k3d.Node, 1)
|
||||
|
||||
// range over all instances of group[subset] specs
|
||||
for _, filter := range filters {
|
||||
|
||||
@ -105,11 +119,18 @@ func FilterNodes(nodes *[]k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
// if one of the filters is 'all', we only return this and drop all others
|
||||
if submatches["group"] == "all" {
|
||||
// TODO: only log if really more than one is specified
|
||||
log.Warnf("Node Specifier 'all' set, but more were specified in '%s'", filterString)
|
||||
log.Warnf("Node filter 'all' set, but more were specified in '%s'", filterString)
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
/* */
|
||||
groupNodes := []*k3d.Node{}
|
||||
if submatches["group"] == string(k3d.MasterRole) {
|
||||
groupNodes = masterNodes
|
||||
} else if submatches["group"] == string(k3d.WorkerRole) {
|
||||
groupNodes = workerNodes
|
||||
}
|
||||
|
||||
subset := []int{}
|
||||
|
||||
if submatches["subsetList"] != "" {
|
||||
@ -117,8 +138,9 @@ func FilterNodes(nodes *[]k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
if index != "" {
|
||||
num, err := strconv.Atoi(index)
|
||||
if err != nil {
|
||||
return rolesMap, fmt.Errorf("Failed to convert subset number to integer in '%s'", filter)
|
||||
return nil, fmt.Errorf("Failed to convert subset number to integer in '%s'", filter)
|
||||
}
|
||||
filteredNodes = append(filteredNodes, *groupNodes[num])
|
||||
subset = append(subset, num)
|
||||
}
|
||||
}
|
||||
@ -131,30 +153,31 @@ func FilterNodes(nodes *[]k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
|
||||
split := strings.Split(submatches["subsetRange"], ":")
|
||||
if len(split) != 2 {
|
||||
return rolesMap, fmt.Errorf("Failed to parse subset range in '%s'", filter)
|
||||
return nil, fmt.Errorf("Failed to parse subset range in '%s'", filter)
|
||||
}
|
||||
|
||||
start := 0
|
||||
end := numNodes - 1
|
||||
end := len(groupNodes) - 1
|
||||
|
||||
var err error
|
||||
|
||||
if split[0] != "" {
|
||||
start, err = strconv.Atoi(split[0])
|
||||
if err != nil {
|
||||
return rolesMap, fmt.Errorf("Failed to convert subset range start to integer in '%s'", filter)
|
||||
return nil, fmt.Errorf("Failed to convert subset range start to integer in '%s'", filter)
|
||||
}
|
||||
if start < 0 {
|
||||
return rolesMap, fmt.Errorf("Invalid subset range: start < 0 in '%s'", filter)
|
||||
return nil, fmt.Errorf("Invalid subset range: start < 0 in '%s'", filter)
|
||||
}
|
||||
}
|
||||
|
||||
if split[1] != "" {
|
||||
end, err = strconv.Atoi(split[1])
|
||||
if err != nil {
|
||||
return rolesMap, fmt.Errorf("Failed to convert subset range start to integer in '%s'", filter)
|
||||
return nil, fmt.Errorf("Failed to convert subset range start to integer in '%s'", filter)
|
||||
}
|
||||
if end < start {
|
||||
return rolesMap, fmt.Errorf("Invalid subset range: end < start in '%s'", filter)
|
||||
return nil, fmt.Errorf("Invalid subset range: end < start in '%s'", filter)
|
||||
}
|
||||
}
|
||||
|
||||
@ -166,15 +189,11 @@ func FilterNodes(nodes *[]k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
/*
|
||||
* '*' = all nodes
|
||||
*/
|
||||
for i := 0; i < numNodes; i++ {
|
||||
subset = append(subset, i)
|
||||
}
|
||||
return groupNodes, nil
|
||||
} else {
|
||||
return rolesMap, fmt.Errorf("Failed to parse node specifiers: unknown subset in '%s'", filter)
|
||||
return nil, fmt.Errorf("Failed to parse node specifiers: unknown subset in '%s'", filter)
|
||||
}
|
||||
|
||||
rolesMap[submatches["group"]] = append(rolesMap[submatches["group"]], subset...)
|
||||
|
||||
}
|
||||
|
||||
log.Debugf("ROLESMAP: %+v", rolesMap)
|
||||
|
@ -74,9 +74,7 @@ type Cluster struct {
|
||||
Name string `yaml:"name" json:"name,omitempty"`
|
||||
Network string `yaml:"network" json:"network,omitempty"`
|
||||
Secret string `yaml:"cluster_secret" json:"clusterSecret,omitempty"`
|
||||
Nodes []Node `yaml:"nodes" json:"nodes,omitempty"`
|
||||
MasterNodes []*Node
|
||||
WorkerNodes []*Node
|
||||
Nodes []*Node `yaml:"nodes" json:"nodes,omitempty"`
|
||||
}
|
||||
|
||||
// Node describes a k3d node
|
||||
|
Loading…
Reference in New Issue
Block a user