From 2162504ee16ccbc80ff788762a9cf45a975293ca Mon Sep 17 00:00:00 2001 From: iwilltry42 Date: Wed, 7 Jul 2021 16:38:05 +0200 Subject: [PATCH] transformsimple: move transformports to own function --- pkg/config/transform.go | 150 +++++++++++++++++++++------------------- 1 file changed, 80 insertions(+), 70 deletions(-) diff --git a/pkg/config/transform.go b/pkg/config/transform.go index fda040c5..5df31ace 100644 --- a/pkg/config/transform.go +++ b/pkg/config/transform.go @@ -158,10 +158,10 @@ func TransformSimpleToClusterConfig(ctx context.Context, runtime runtimes.Runtim /**************************** * Extra Node Configuration * ****************************/ - - // -> VOLUMES nodeCount := len(newCluster.Nodes) nodeList := newCluster.Nodes + + // -> VOLUMES for _, volumeWithNodeFilters := range simpleConfig.Volumes { nodes, err := util.FilterNodes(nodeList, volumeWithNodeFilters.NodeFilters) if err != nil { @@ -174,74 +174,8 @@ func TransformSimpleToClusterConfig(ctx context.Context, runtime runtimes.Runtim } // -> PORTS - for _, portWithNodeFilters := range simpleConfig.Ports { - log.Tracef("inspecting port mapping for %s with nodefilters %s", portWithNodeFilters.Port, portWithNodeFilters.NodeFilters) - if len(portWithNodeFilters.NodeFilters) == 0 && nodeCount > 1 { - log.Infof("portmapping '%s' lacks a nodefilter, but there's more than one node: defaulting to %s", portWithNodeFilters.Port, DefaultTargetsNodefiltersPortMappings) - portWithNodeFilters.NodeFilters = DefaultTargetsNodefiltersPortMappings - } - - for _, f := range portWithNodeFilters.NodeFilters { - if strings.HasPrefix(f, "loadbalancer") { - log.Infof("portmapping '%s' targets the loadbalancer: defaulting to %s", portWithNodeFilters.Port, DefaultTargetsNodefiltersPortMappings) - portWithNodeFilters.NodeFilters = DefaultTargetsNodefiltersPortMappings - break - } - } - - filteredNodes, err := util.FilterNodesWithSuffix(nodeList, portWithNodeFilters.NodeFilters) - if err != nil { - return nil, err - } - - nn := "" - for _, n := range filteredNodes["proxy"] { - nn = strings.Join([]string{nn, n.Name}, ",") - } - log.Debugf("Filtered nodes: %#v", nn) - - for suffix, nodes := range filteredNodes { - portmappings, err := nat.ParsePortSpec(portWithNodeFilters.Port) - if err != nil { - return nil, fmt.Errorf("error parsing port spec '%s': %+v", portWithNodeFilters.Port, err) - } - - if suffix == "proxy" || suffix == util.NodeFilterSuffixNone { // proxy is the default suffix for port mappings - if newCluster.ServerLoadBalancer == nil { - return nil, fmt.Errorf("port-mapping of type 'proxy' specified, but loadbalancer is disabled") - } - if err := addPortMappings(newCluster.ServerLoadBalancer.Node, portmappings); err != nil { - return nil, err - } - for _, pm := range portmappings { - if err := loadbalancerAddPortConfigs(newCluster.ServerLoadBalancer, pm, nodes); err != nil { - return nil, err - } - } - } else if suffix == "direct" { - if len(nodes) > 1 { - return nil, fmt.Errorf("error: cannot apply a direct port-mapping (%s) to more than one node", portmappings) - } - for _, node := range nodes { - if err := addPortMappings(node, portmappings); err != nil { - return nil, err - } - } - } else if suffix != util.NodeFilterMapKeyAll { - return nil, fmt.Errorf("error adding port mappings: unknown suffix %s", suffix) - } - } - - } - - // print generated loadbalancer config - if log.GetLevel() >= log.DebugLevel { - yamlized, err := yaml.Marshal(newCluster.ServerLoadBalancer.Config) - if err != nil { - log.Errorf("error printing loadbalancer config: %v", err) - } else { - log.Debugf("generated loadbalancer config:\n%s", string(yamlized)) - } + if err := TransformPorts(ctx, runtime, &newCluster, simpleConfig.Ports); err != nil { + return nil, err } // -> K3S NODE LABELS @@ -456,3 +390,79 @@ nodenameLoop: return nil } + +func TransformPorts(ctx context.Context, runtime runtimes.Runtime, cluster *k3d.Cluster, portsWithNodeFilters []conf.PortWithNodeFilters) error { + nodeCount := len(cluster.Nodes) + nodeList := cluster.Nodes + + for _, portWithNodeFilters := range portsWithNodeFilters { + log.Tracef("inspecting port mapping for %s with nodefilters %s", portWithNodeFilters.Port, portWithNodeFilters.NodeFilters) + if len(portWithNodeFilters.NodeFilters) == 0 && nodeCount > 1 { + log.Infof("portmapping '%s' lacks a nodefilter, but there's more than one node: defaulting to %s", portWithNodeFilters.Port, DefaultTargetsNodefiltersPortMappings) + portWithNodeFilters.NodeFilters = DefaultTargetsNodefiltersPortMappings + } + + for _, f := range portWithNodeFilters.NodeFilters { + if strings.HasPrefix(f, "loadbalancer") { + log.Infof("portmapping '%s' targets the loadbalancer: defaulting to %s", portWithNodeFilters.Port, DefaultTargetsNodefiltersPortMappings) + portWithNodeFilters.NodeFilters = DefaultTargetsNodefiltersPortMappings + break + } + } + + filteredNodes, err := util.FilterNodesWithSuffix(nodeList, portWithNodeFilters.NodeFilters) + if err != nil { + return err + } + + nn := "" + for _, n := range filteredNodes["proxy"] { + nn = strings.Join([]string{nn, n.Name}, ",") + } + log.Debugf("Filtered nodes: %#v", nn) + + for suffix, nodes := range filteredNodes { + portmappings, err := nat.ParsePortSpec(portWithNodeFilters.Port) + if err != nil { + return fmt.Errorf("error parsing port spec '%s': %+v", portWithNodeFilters.Port, err) + } + + if suffix == "proxy" || suffix == util.NodeFilterSuffixNone { // proxy is the default suffix for port mappings + if cluster.ServerLoadBalancer == nil { + return fmt.Errorf("port-mapping of type 'proxy' specified, but loadbalancer is disabled") + } + if err := addPortMappings(cluster.ServerLoadBalancer.Node, portmappings); err != nil { + return err + } + for _, pm := range portmappings { + if err := loadbalancerAddPortConfigs(cluster.ServerLoadBalancer, pm, nodes); err != nil { + return err + } + } + } else if suffix == "direct" { + if len(nodes) > 1 { + return fmt.Errorf("error: cannot apply a direct port-mapping (%s) to more than one node", portmappings) + } + for _, node := range nodes { + if err := addPortMappings(node, portmappings); err != nil { + return err + } + } + } else if suffix != util.NodeFilterMapKeyAll { + return fmt.Errorf("error adding port mappings: unknown suffix %s", suffix) + } + } + + } + + // print generated loadbalancer config + if log.GetLevel() >= log.DebugLevel { + yamlized, err := yaml.Marshal(cluster.ServerLoadBalancer.Config) + if err != nil { + log.Errorf("error printing loadbalancer config: %v", err) + } else { + log.Debugf("generated loadbalancer config:\n%s", string(yamlized)) + } + } + return nil +}