Skip to content

Commit 3a77c41

Browse files
committed
etect IPv6 clusters and apply correct policy
Dual stack load balancers in Kubernetes _must_ specify an IP family policy, or else it will be set to `SingleStack`. On AWS, IPv6 single stack is not supported, so update the test to reflect the new setting. Signed-off-by: Nolan Brubaker <nolan@nbrubaker.com> Assisted-By: Claude Sonnet 4.6 Signed-off-by: Nolan Brubaker <nolan@nbrubaker.com>
1 parent 54062fe commit 3a77c41

1 file changed

Lines changed: 31 additions & 4 deletions

File tree

  • test/extended/cloud_controller_manager

test/extended/cloud_controller_manager/ccm.go

Lines changed: 31 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -99,12 +99,39 @@ var _ = g.Describe("[sig-cloud-provider][Feature:OpenShiftCloudControllerManager
9999
g.Skip("Skipped: There is no public subnet on AWS C2S/SC2S disconnected clusters!")
100100
}
101101

102+
infra, err := oc.AdminConfigClient().ConfigV1().Infrastructures().Get(context.Background(), "cluster", metav1.GetOptions{})
103+
o.Expect(err).NotTo(o.HaveOccurred())
104+
o.Expect(infra.Status.PlatformStatus).NotTo(o.BeNil(), "infrastructure platformStatus is required")
105+
106+
isIPv6Primary := infra.Status.PlatformStatus.AWS != nil &&
107+
infra.Status.PlatformStatus.AWS.IPFamily == configv1.DualStackIPv6Primary
108+
102109
g.By("Create a cluster scope load balancer")
103110
svcName := "test-lb"
104-
defer oc.WithoutNamespace().AsAdmin().Run("delete").Args("-n", oc.Namespace(), "service", "loadbalancer", svcName, "--ignore-not-found").Execute()
105-
out, err := oc.AsAdmin().WithoutNamespace().Run("create").Args("-n", oc.Namespace(), "service", "loadbalancer", svcName, "--tcp=80:8080").Output()
106-
o.Expect(err).NotTo(o.HaveOccurred(), "failed to create lb service")
107-
o.Expect(out).To(o.ContainSubstring("service/" + svcName + " created"))
111+
defer oc.WithoutNamespace().AsAdmin().Run("delete").Args("service", svcName, "--ignore-not-found").Execute()
112+
if isIPv6Primary {
113+
114+
// IPv6 cannot be single stack on AWS, but kube will default an empty spec.ipFamilyPolicy to SingleStack.
115+
svcYAML := fmt.Sprintf(`apiVersion: v1
116+
kind: Service
117+
metadata:
118+
name: %s
119+
spec:
120+
type: LoadBalancer
121+
ipFamilyPolicy: RequireDualStack
122+
ports:
123+
- port: 80
124+
targetPort: 8080
125+
protocol: TCP
126+
`, svcName)
127+
err = oc.AsAdmin().WithoutNamespace().Run("create").Args("-f", "-").InputString(svcYAML).Execute()
128+
o.Expect(err).NotTo(o.HaveOccurred(), "failed to create lb service")
129+
} else {
130+
// single stack or IPv4 primary
131+
out, err := oc.AsAdmin().WithoutNamespace().Run("create").Args("service", "loadbalancer", svcName, "--tcp=80:8080").Output()
132+
o.Expect(err).NotTo(o.HaveOccurred(), "failed to create lb service")
133+
o.Expect(out).To(o.ContainSubstring("service/" + svcName + " created"))
134+
}
108135

109136
g.By("Check External-IP assigned")
110137
svcExternalIP := getLoadBalancerExternalIP(oc, oc.Namespace(), svcName)

0 commit comments

Comments
 (0)