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
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)
}
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 */
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{})
// 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 {

View File

@ -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