fix filtering

This commit is contained in:
iwilltry42 2019-11-07 12:01:33 +01:00
parent b78a8cf993
commit b52da4ac52
3 changed files with 33 additions and 13 deletions

View File

@ -22,6 +22,8 @@ THE SOFTWARE.
package create package create
import ( import (
"fmt"
"github.com/spf13/cobra" "github.com/spf13/cobra"
cliutil "github.com/rancher/k3d/cmd/util" 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) volumeFilterMap := make(map[string]string, 1)
for _, volumeFlag := range volumeFlags { for _, volumeFlag := range volumeFlags {
log.Debugf("Parsing vol flag %+v", volumeFlag)
volume, filter, err := cliutil.SplitFilterFromFlag(volumeFlag) volume, filter, err := cliutil.SplitFilterFromFlag(volumeFlag)
if err != nil { if err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
log.Debugf("Parsed vol flag %+v + filter %+v", volume, filter)
if err := cliutil.ValidateVolumeMount(volume); err != nil { if err := cliutil.ValidateVolumeMount(volume); err != nil {
log.Fatalln(err) log.Fatalln(err)
} }
volumeFilterMap[volume] = filter
// 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 */ /* generate cluster */
cluster := &k3d.Cluster{ cluster := &k3d.Cluster{

View File

@ -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{}) set := make(map[*k3d.Node]struct{})
// range over all instances of group[subset] specs // 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 return nodes, nil
} }
/* */ /* Choose the group of nodes to operate on */
groupNodes := []*k3d.Node{} groupNodes := []*k3d.Node{}
if submatches["group"] == string(k3d.MasterRole) { if submatches["group"] == string(k3d.MasterRole) {
groupNodes = masterNodes groupNodes = masterNodes
@ -140,6 +140,9 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
if err != nil { if err != nil {
return nil, 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)
} }
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 { if _, exists := set[groupNodes[num]]; !exists {
filteredNodes = append(filteredNodes, groupNodes[num]) filteredNodes = append(filteredNodes, groupNodes[num])
} }
@ -168,9 +171,10 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
if err != nil { if err != nil {
return nil, 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 || start >= len(groupNodes) {
return nil, fmt.Errorf("Invalid subset range: start < 0 in '%s'", filter) return nil, fmt.Errorf("Invalid subset range: start < 0 or > number of available nodes in '%s'", filter)
} }
} }
if split[1] != "" { if split[1] != "" {
@ -178,8 +182,8 @@ func FilterNodes(nodes []*k3d.Node, filterString string) ([]*k3d.Node, error) {
if err != nil { if err != nil {
return nil, 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 || end >= len(groupNodes) {
return nil, fmt.Errorf("Invalid subset range: end < start in '%s'", filter) 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 * '*' = all nodes
*/ */
return groupNodes, nil for _, node := range groupNodes {
if _, exists := set[node]; !exists {
filteredNodes = append(filteredNodes, node)
}
}
/* invalid/unknown subset */ /* invalid/unknown subset */
} else { } else {

View File

@ -97,7 +97,7 @@ func CreateCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error {
// create node // create node
log.Infof("Creating node '%s'", node.Name) 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") log.Errorln("Failed to create node")
return err return err
} }
@ -114,7 +114,7 @@ func DeleteCluster(cluster *k3d.Cluster, runtime k3drt.Runtime) error {
failed := 0 failed := 0
for _, node := range cluster.Nodes { 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) log.Warningf("Failed to delete node '%s': Try to delete it manually", node.Name)
failed++ failed++
continue continue
@ -143,7 +143,7 @@ func GetClusters(runtime k3drt.Runtime) ([]*k3d.Cluster, error) {
clusterExists := false clusterExists := false
for _, cluster := range clusters { for _, cluster := range clusters {
if node.Labels["k3d.cluster"] == cluster.Name { // TODO: handle case, where this label doesn't exist 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 clusterExists = true
break break
} }
@ -152,7 +152,7 @@ func GetClusters(runtime k3drt.Runtime) ([]*k3d.Cluster, error) {
if !clusterExists { if !clusterExists {
clusters = append(clusters, &k3d.Cluster{ clusters = append(clusters, &k3d.Cluster{
Name: node.Labels["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 // append nodes
for _, node := range nodes { for _, node := range nodes {
cluster.Nodes = append(cluster.Nodes, *node) cluster.Nodes = append(cluster.Nodes, node)
} }
return cluster, nil return cluster, nil