transformsimple: move transformports to own function

pull/670/head
iwilltry42 3 years ago
parent bb237d3389
commit 2162504ee1
No known key found for this signature in database
GPG Key ID: 7BA57AD1CFF16110
  1. 150
      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
}

Loading…
Cancel
Save