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
|
// generate list of nodes
|
||||||
cluster.Nodes = []k3d.Node{}
|
cluster.Nodes = []*k3d.Node{}
|
||||||
|
|
||||||
// -> master nodes
|
// -> master nodes
|
||||||
for i := 0; i < masterCount; i++ {
|
for i := 0; i < masterCount; i++ {
|
||||||
@ -164,8 +164,7 @@ func parseCreateClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// append node to list
|
// append node to list
|
||||||
cluster.Nodes = append(cluster.Nodes, node)
|
cluster.Nodes = append(cluster.Nodes, &node)
|
||||||
cluster.MasterNodes = append(cluster.MasterNodes, &node)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// -> worker nodes
|
// -> worker nodes
|
||||||
@ -175,14 +174,13 @@ func parseCreateClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime,
|
|||||||
Image: image,
|
Image: image,
|
||||||
}
|
}
|
||||||
|
|
||||||
cluster.Nodes = append(cluster.Nodes, node)
|
cluster.Nodes = append(cluster.Nodes, &node)
|
||||||
cluster.WorkerNodes = append(cluster.WorkerNodes, &node)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// append volumes
|
// append volumes
|
||||||
// TODO:
|
// TODO:
|
||||||
for volume, filter := range volumeFilterMap {
|
for volume, filter := range volumeFilterMap {
|
||||||
nodes, err := cliutil.FilterNodes(&cluster.Nodes, filter)
|
nodes, err := cliutil.FilterNodes(cluster.Nodes, filter)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalln(err)
|
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
|
// 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
|
// filterString is a semicolon-separated list of node filters
|
||||||
filters := strings.Split(filterString, ";")
|
filters := strings.Split(filterString, ";")
|
||||||
|
|
||||||
if len(filters) == 0 {
|
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
|
// range over all instances of group[subset] specs
|
||||||
for _, filter := range filters {
|
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 one of the filters is 'all', we only return this and drop all others
|
||||||
if submatches["group"] == "all" {
|
if submatches["group"] == "all" {
|
||||||
// TODO: only log if really more than one is specified
|
// 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
|
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{}
|
subset := []int{}
|
||||||
|
|
||||||
if submatches["subsetList"] != "" {
|
if submatches["subsetList"] != "" {
|
||||||
@ -117,8 +138,9 @@ func FilterNodes(nodes *[]k3d.Node, filterString string) ([]*k3d.Node, error) {
|
|||||||
if index != "" {
|
if index != "" {
|
||||||
num, err := strconv.Atoi(index)
|
num, err := strconv.Atoi(index)
|
||||||
if err != nil {
|
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)
|
subset = append(subset, num)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -131,30 +153,31 @@ func FilterNodes(nodes *[]k3d.Node, filterString string) ([]*k3d.Node, error) {
|
|||||||
|
|
||||||
split := strings.Split(submatches["subsetRange"], ":")
|
split := strings.Split(submatches["subsetRange"], ":")
|
||||||
if len(split) != 2 {
|
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
|
start := 0
|
||||||
end := numNodes - 1
|
end := len(groupNodes) - 1
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
if split[0] != "" {
|
if split[0] != "" {
|
||||||
start, err = strconv.Atoi(split[0])
|
start, err = strconv.Atoi(split[0])
|
||||||
if err != nil {
|
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 {
|
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] != "" {
|
if split[1] != "" {
|
||||||
end, err = strconv.Atoi(split[1])
|
end, err = strconv.Atoi(split[1])
|
||||||
if err != nil {
|
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 {
|
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
|
* '*' = all nodes
|
||||||
*/
|
*/
|
||||||
for i := 0; i < numNodes; i++ {
|
return groupNodes, nil
|
||||||
subset = append(subset, i)
|
|
||||||
}
|
|
||||||
} else {
|
} 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)
|
log.Debugf("ROLESMAP: %+v", rolesMap)
|
||||||
|
@ -71,12 +71,10 @@ var DefaultNodeEnv = []string{
|
|||||||
|
|
||||||
// Cluster describes a k3d cluster
|
// Cluster describes a k3d cluster
|
||||||
type Cluster struct {
|
type Cluster struct {
|
||||||
Name string `yaml:"name" json:"name,omitempty"`
|
Name string `yaml:"name" json:"name,omitempty"`
|
||||||
Network string `yaml:"network" json:"network,omitempty"`
|
Network string `yaml:"network" json:"network,omitempty"`
|
||||||
Secret string `yaml:"cluster_secret" json:"clusterSecret,omitempty"`
|
Secret string `yaml:"cluster_secret" json:"clusterSecret,omitempty"`
|
||||||
Nodes []Node `yaml:"nodes" json:"nodes,omitempty"`
|
Nodes []*Node `yaml:"nodes" json:"nodes,omitempty"`
|
||||||
MasterNodes []*Node
|
|
||||||
WorkerNodes []*Node
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Node describes a k3d node
|
// Node describes a k3d node
|
||||||
|
Loading…
Reference in New Issue
Block a user