Merge pull request #41535 from aanm/adding-ipv6-brackets
Automatic merge from submit-queue (batch tested with PRs 41535, 45985, 45929, 45948, 46056) kubelet/envvars: Adding brackets to IPv6 addresses Signed-off-by: André Martins <aanm90@gmail.com> **What this PR does / why we need it**: This adds IPv6 brackets on environments variables pods **Special notes for your reviewer**: Since the IP is a string I think the fastest way to detect if it's an IPv6 was to check for the presence of `:` in it. Let me know what you think.
This commit is contained in:
		@@ -18,6 +18,7 @@ package envvars
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"net"
 | 
				
			||||||
	"strconv"
 | 
						"strconv"
 | 
				
			||||||
	"strings"
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -78,18 +79,21 @@ func makeLinkVariables(service *v1.Service) []v1.EnvVar {
 | 
				
			|||||||
		if sp.Protocol != "" {
 | 
							if sp.Protocol != "" {
 | 
				
			||||||
			protocol = string(sp.Protocol)
 | 
								protocol = string(sp.Protocol)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							hostPort := net.JoinHostPort(service.Spec.ClusterIP, strconv.Itoa(int(sp.Port)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if i == 0 {
 | 
							if i == 0 {
 | 
				
			||||||
			// Docker special-cases the first port.
 | 
								// Docker special-cases the first port.
 | 
				
			||||||
			all = append(all, v1.EnvVar{
 | 
								all = append(all, v1.EnvVar{
 | 
				
			||||||
				Name:  prefix + "_PORT",
 | 
									Name:  prefix + "_PORT",
 | 
				
			||||||
				Value: fmt.Sprintf("%s://%s:%d", strings.ToLower(protocol), service.Spec.ClusterIP, sp.Port),
 | 
									Value: fmt.Sprintf("%s://%s", strings.ToLower(protocol), hostPort),
 | 
				
			||||||
			})
 | 
								})
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		portPrefix := fmt.Sprintf("%s_PORT_%d_%s", prefix, sp.Port, strings.ToUpper(protocol))
 | 
							portPrefix := fmt.Sprintf("%s_PORT_%d_%s", prefix, sp.Port, strings.ToUpper(protocol))
 | 
				
			||||||
		all = append(all, []v1.EnvVar{
 | 
							all = append(all, []v1.EnvVar{
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Name:  portPrefix,
 | 
									Name:  portPrefix,
 | 
				
			||||||
				Value: fmt.Sprintf("%s://%s:%d", strings.ToLower(protocol), service.Spec.ClusterIP, sp.Port),
 | 
									Value: fmt.Sprintf("%s://%s", strings.ToLower(protocol), hostPort),
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
			{
 | 
								{
 | 
				
			||||||
				Name:  portPrefix + "_PROTO",
 | 
									Name:  portPrefix + "_PROTO",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -79,6 +79,17 @@ func TestFromServices(t *testing.T) {
 | 
				
			|||||||
				},
 | 
									},
 | 
				
			||||||
			},
 | 
								},
 | 
				
			||||||
		},
 | 
							},
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ObjectMeta: metav1.ObjectMeta{Name: "super-ipv6"},
 | 
				
			||||||
 | 
								Spec: v1.ServiceSpec{
 | 
				
			||||||
 | 
									Selector:  map[string]string{"bar": "baz"},
 | 
				
			||||||
 | 
									ClusterIP: "2001:DB8::",
 | 
				
			||||||
 | 
									Ports: []v1.ServicePort{
 | 
				
			||||||
 | 
										{Name: "u-d-p", Port: 8084, Protocol: "UDP"},
 | 
				
			||||||
 | 
										{Name: "t-c-p", Port: 8084, Protocol: "TCP"},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	vars := envvars.FromServices(sl)
 | 
						vars := envvars.FromServices(sl)
 | 
				
			||||||
	expected := []v1.EnvVar{
 | 
						expected := []v1.EnvVar{
 | 
				
			||||||
@@ -114,6 +125,19 @@ func TestFromServices(t *testing.T) {
 | 
				
			|||||||
		{Name: "Q_U_U_X_PORT_8083_TCP_PROTO", Value: "tcp"},
 | 
							{Name: "Q_U_U_X_PORT_8083_TCP_PROTO", Value: "tcp"},
 | 
				
			||||||
		{Name: "Q_U_U_X_PORT_8083_TCP_PORT", Value: "8083"},
 | 
							{Name: "Q_U_U_X_PORT_8083_TCP_PORT", Value: "8083"},
 | 
				
			||||||
		{Name: "Q_U_U_X_PORT_8083_TCP_ADDR", Value: "9.8.7.6"},
 | 
							{Name: "Q_U_U_X_PORT_8083_TCP_ADDR", Value: "9.8.7.6"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_SERVICE_HOST", Value: "2001:DB8::"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_SERVICE_PORT", Value: "8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_SERVICE_PORT_U_D_P", Value: "8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_SERVICE_PORT_T_C_P", Value: "8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT", Value: "udp://[2001:DB8::]:8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_UDP", Value: "udp://[2001:DB8::]:8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_UDP_PROTO", Value: "udp"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_UDP_PORT", Value: "8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_UDP_ADDR", Value: "2001:DB8::"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_TCP", Value: "tcp://[2001:DB8::]:8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_TCP_PROTO", Value: "tcp"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_TCP_PORT", Value: "8084"},
 | 
				
			||||||
 | 
							{Name: "SUPER_IPV6_PORT_8084_TCP_ADDR", Value: "2001:DB8::"},
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if len(vars) != len(expected) {
 | 
						if len(vars) != len(expected) {
 | 
				
			||||||
		t.Errorf("Expected %d env vars, got: %+v", len(expected), vars)
 | 
							t.Errorf("Expected %d env vars, got: %+v", len(expected), vars)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user