fix filtering
This commit is contained in:
parent
b78a8cf993
commit
b52da4ac52
@ -22,6 +22,8 @@ THE SOFTWARE.
|
||||
package create
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
|
||||
cliutil "github.com/rancher/k3d/cmd/util"
|
||||
@ -130,15 +132,25 @@ func parseCreateClusterCmd(cmd *cobra.Command, args []string) (runtimes.Runtime,
|
||||
}
|
||||
volumeFilterMap := make(map[string]string, 1)
|
||||
for _, volumeFlag := range volumeFlags {
|
||||
log.Debugf("Parsing vol flag %+v", volumeFlag)
|
||||
volume, filter, err := cliutil.SplitFilterFromFlag(volumeFlag)
|
||||
if err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
log.Debugf("Parsed vol flag %+v + filter %+v", volume, filter)
|
||||
if err := cliutil.ValidateVolumeMount(volume); err != nil {
|
||||
log.Fatalln(err)
|
||||
}
|
||||
|
||||
// create new entry or append filter to existing entry
|
||||
if _, exists := volumeFilterMap[volume]; exists {
|
||||
volumeFilterMap[volume] = fmt.Sprintf("%s;%s", volumeFilterMap[volume], filter)
|
||||
} else {
|
||||
volumeFilterMap[volume] = filter
|
||||
}
|
||||
log.Debugf("volFilterMap %+v", volumeFilterMap)
|
||||
}
|
||||
log.Debugf("volumeFIlterMap: %+v", volumeFilterMap)
|
||||
|
||||
/* generate cluster */
|
||||
cluster := &k3d.Cluster{
|
||||
|
@ -96,7 +96,7 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
}
|
||||
}
|
||||
|
||||
filteredNodes := make([]*k3d.Node, 1)
|
||||
filteredNodes := []*k3d.Node{}
|
||||
set := make(map[*k3d.Node]struct{})
|
||||
|
||||
// range over all instances of group[subset] specs
|
||||
@ -124,7 +124,7 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
return nodes, nil
|
||||
}
|
||||
|
||||
/* */
|
||||
/* Choose the group of nodes to operate on */
|
||||
groupNodes := []*k3d.Node{}
|
||||
if submatches["group"] == string(k3d.MasterRole) {
|
||||
groupNodes = masterNodes
|
||||
@ -140,6 +140,9 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to convert subset number to integer in '%s'", filter)
|
||||
}
|
||||
if num < 0 || num >= len(groupNodes) {
|
||||
return nil, fmt.Errorf("Index out of range: index '%d' < 0 or > number of available nodes in filter '%s'", num, filter)
|
||||
}
|
||||
if _, exists := set[groupNodes[num]]; !exists {
|
||||
filteredNodes = append(filteredNodes, groupNodes[num])
|
||||
}
|
||||
@ -168,9 +171,10 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to convert subset range start to integer in '%s'", filter)
|
||||
}
|
||||
if start < 0 {
|
||||
return nil, fmt.Errorf("Invalid subset range: start < 0 in '%s'", filter)
|
||||
if start < 0 || start >= len(groupNodes) {
|
||||
return nil, fmt.Errorf("Invalid subset range: start < 0 or > number of available nodes in '%s'", filter)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if split[1] != "" {
|
||||
@ -178,8 +182,8 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("Failed to convert subset range start to integer in '%s'", filter)
|
||||
}
|
||||
if end < start {
|
||||
return nil, fmt.Errorf("Invalid subset range: end < start in '%s'", filter)
|
||||
if end < start || end >= len(groupNodes) {
|
||||
return nil, fmt.Errorf("Invalid subset range: end < start or > number of available nodes in '%s'", filter)
|
||||
}
|
||||
}
|
||||
|
||||
@ -194,7 +198,11 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
|
||||
/*
|
||||
* '*' = all nodes
|
||||
*/
|
||||
return groupNodes, nil
|
||||
for _, node := range groupNodes {
|
||||
if _, exists := set[node]; !exists {
|
||||
filteredNodes = append(filteredNodes, node)
|
||||
}
|
||||
}
|
||||
|
||||
/* invalid/unknown subset */
|
||||
} else {
|
||||
|
@ -97,7 +97,7 @@ func CreateCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error {
|
||||
|
||||
// create node
|
||||
log.Infof("Creating node '%s'", node.Name)
|
||||
if err := CreateNode(&node, runtime); err != nil {
|
||||
if err := CreateNode(node, runtime); err != nil {
|
||||
log.Errorln("Failed to create node")
|
||||
return err
|
||||
}
|
||||
@ -114,7 +114,7 @@ func DeleteCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error {
|
||||
|
||||
failed := 0
|
||||
for _, node := range cluster.Nodes {
|
||||
if err := runtime.DeleteNode(&node); err != nil {
|
||||
if err := runtime.DeleteNode(node); err != nil {
|
||||
log.Warningf("Failed to delete node '%s': Try to delete it manually", node.Name)
|
||||
failed++
|
||||
continue
|
||||
@ -143,7 +143,7 @@ func GetClusters(runtime k3drt.Runtime) ([]*k3d.Cluster, error) {
|
||||
clusterExists := false
|
||||
for _, cluster := range clusters {
|
||||
if node.Labels["k3d.cluster"] == cluster.Name { // TODO: handle case, where this label doesn't exist
|
||||
cluster.Nodes = append(cluster.Nodes, *node)
|
||||
cluster.Nodes = append(cluster.Nodes, node)
|
||||
clusterExists = true
|
||||
break
|
||||
}
|
||||
@ -152,7 +152,7 @@ func GetClusters(runtime k3drt.Runtime) ([]*k3d.Cluster, error) {
|
||||
if !clusterExists {
|
||||
clusters = append(clusters, &k3d.Cluster{
|
||||
Name: node.Labels["k3d.cluster"],
|
||||
Nodes: []k3d.Node{*node},
|
||||
Nodes: []*k3d.Node{node},
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -173,7 +173,7 @@ func GetCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) (*k3d.Cluster, erro
|
||||
|
||||
// append nodes
|
||||
for _, node := range nodes {
|
||||
cluster.Nodes = append(cluster.Nodes, *node)
|
||||
cluster.Nodes = append(cluster.Nodes, node)
|
||||
}
|
||||
|
||||
return cluster, nil
|
||||
|
Loading…
Reference in New Issue
Block a user