fix filtering
This commit is contained in:
parent
b78a8cf993
commit
b52da4ac52
@ -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{
|
||||||
|
@ -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 {
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user