@@ -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 ("-n" , "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