PortAllocator: Open node ports only for NodePort type service
Change-Id: Id2369df9a33669b3d09ef34975306a615ff935b7
diff --git a/core/port-allocator/main.go b/core/port-allocator/main.go
index 8c14183..fb5a151 100644
--- a/core/port-allocator/main.go
+++ b/core/port-allocator/main.go
@@ -147,23 +147,29 @@
if err != nil {
return "", err
}
- tcp, err := extractPorts(rel, "spec.values.controller.service.nodePorts.tcp")
+ svcType, err := extractString(rel, "spec.values.controller.service.type")
if err != nil {
return "", err
}
- udp, err := extractPorts(rel, "spec.values.controller.service.nodePorts.udp")
- if err != nil {
- return "", err
+ if svcType == "NodePort" {
+ tcp, err := extractPorts(rel, "spec.values.controller.service.nodePorts.tcp")
+ if err != nil {
+ return "", err
+ }
+ udp, err := extractPorts(rel, "spec.values.controller.service.nodePorts.udp")
+ if err != nil {
+ return "", err
+ }
+ for _, p := range ports {
+ ps := strconv.Itoa(p)
+ tcp[ps] = p
+ udp[ps] = p
+ }
+ if err := c.writeRelease(fs, rel); err != nil {
+ return "", err
+ }
}
- for _, p := range ports {
- ps := strconv.Itoa(p)
- tcp[ps] = p
- udp[ps] = p
- }
- if err := c.writeRelease(fs, rel); err != nil {
- return "", err
- }
- fmt.Printf("Pre opened new ports: %s\n", ports)
+ fmt.Printf("Pre opened new ports: %+v\n", ports)
return "preopen new ports", nil
})
}
@@ -242,19 +248,25 @@
default:
panic("MUST NOT REACH")
}
- svcTCP, err := extractPorts(rel, "spec.values.controller.service.nodePorts.tcp")
+ svcType, err := extractString(rel, "spec.values.controller.service.type")
if err != nil {
return "", err
}
- svcUDP, err := extractPorts(rel, "spec.values.controller.service.nodePorts.udp")
- if err != nil {
- return "", err
- }
- if err := removePort(svcTCP, port); err != nil {
- return "", err
- }
- if err := removePort(svcUDP, port); err != nil {
- return "", err
+ if svcType == "NodePort" {
+ svcTCP, err := extractPorts(rel, "spec.values.controller.service.nodePorts.tcp")
+ if err != nil {
+ return "", err
+ }
+ svcUDP, err := extractPorts(rel, "spec.values.controller.service.nodePorts.udp")
+ if err != nil {
+ return "", err
+ }
+ if err := removePort(svcTCP, port); err != nil {
+ return "", err
+ }
+ if err := removePort(svcUDP, port); err != nil {
+ return "", err
+ }
}
if err := c.writeRelease(fs, rel); err != nil {
return "", err
@@ -360,19 +372,43 @@
Secret string `json:"secret"`
}
-func extractPorts(data map[string]any, path string) (map[string]any, error) {
+func extractField(data map[string]any, path string) (any, error) {
+ var val any = data
for _, i := range strings.Split(path, ".") {
- val, ok := data[i]
+ valM, ok := val.(map[string]any)
+ if !ok {
+ return nil, fmt.Errorf("expected map")
+ }
+ val, ok = valM[i]
if !ok {
return nil, fmt.Errorf("%s not found", i)
}
- valM, ok := val.(map[string]any)
- if !ok {
- return nil, fmt.Errorf("%s is not a map", i)
- }
- data = valM
}
- return data, nil
+ return val, nil
+}
+
+func extractPorts(data map[string]any, path string) (map[string]any, error) {
+ ret, err := extractField(data, path)
+ if err != nil {
+ return nil, err
+ }
+ retM, ok := ret.(map[string]any)
+ if !ok {
+ return nil, fmt.Errorf("expected map")
+ }
+ return retM, nil
+}
+
+func extractString(data map[string]any, path string) (string, error) {
+ ret, err := extractField(data, path)
+ if err != nil {
+ return "", err
+ }
+ retS, ok := ret.(string)
+ if !ok {
+ return "", fmt.Errorf("expected map")
+ }
+ return retS, nil
}
func addPort(pm map[string]any, sourcePort int, targetService string, targetPort int) error {