Skip to content

Commit 49d04dd

Browse files
Merge pull request #28292 from rbbratta/fix-DualStackIPv6Primary
OPNET-330: fix DualStackIPv6Primary
2 parents 58f4f20 + 8d8acd8 commit 49d04dd

File tree

3 files changed

+44
-18
lines changed

3 files changed

+44
-18
lines changed

pkg/clioptions/clusterdiscovery/cluster.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ type ClusterConfiguration struct {
5656
// and dual-stack-specific tests are run
5757
HasIPv4 bool
5858
HasIPv6 bool
59+
// IPFamily defines default IP stack of the cluster, replaces upstream getDefaultClusterIPFamily
60+
IPFamily string
5961

6062
// HasSCTP determines whether SCTP connectivity tests can be run in the cluster
6163
HasSCTP bool
@@ -234,10 +236,17 @@ func LoadConfig(state *ClusterState) (*ClusterConfiguration, error) {
234236
config.NetworkPluginMode = string(state.NetworkSpec.DefaultNetwork.OpenShiftSDNConfig.Mode)
235237
}
236238

239+
// replaces IPFamily as determined by upstream getDefaultClusterIPFamily
240+
// always IPv4 default
241+
config.IPFamily = "ipv4"
237242
// Determine IP configuration
238-
for _, cidr := range state.NetworkSpec.ServiceNetwork {
243+
for i, cidr := range state.NetworkSpec.ServiceNetwork {
239244
if utilnet.IsIPv6CIDRString(cidr) {
240245
config.HasIPv6 = true
246+
// if the first ServiceNetwork is IPv6 we are IPFamily "ipv6"
247+
if i == 0 {
248+
config.IPFamily = "ipv6"
249+
}
241250
} else {
242251
config.HasIPv4 = true
243252
}

pkg/clioptions/clusterdiscovery/provider.go

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,8 @@ func InitializeTestFramework(context *e2e.TestContextType, config *ClusterConfig
6565
e2e.AfterReadingAllFlags(context)
6666
context.DumpLogsOnFailure = true
6767

68-
// these constants are taken from kube e2e and used by tests
69-
context.IPFamily = "ipv4"
70-
if config.HasIPv6 && !config.HasIPv4 {
71-
context.IPFamily = "ipv6"
72-
}
68+
// IPFamily constants are taken from kube e2e and used by tests
69+
context.IPFamily = config.IPFamily
7370
return nil
7471
}
7572

pkg/clioptions/clusterdiscovery/provider_test.go

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,16 @@ var ovnKubernetesConfig = &operatorv1.NetworkSpec{
141141
},
142142
}
143143

144+
var ovnKubernetesConfigIPv6Primary = &operatorv1.NetworkSpec{
145+
DefaultNetwork: operatorv1.DefaultNetworkDefinition{
146+
Type: operatorv1.NetworkTypeOVNKubernetes,
147+
},
148+
ServiceNetwork: []string{
149+
"fd02::/112",
150+
"172.30.0.0/16",
151+
},
152+
}
153+
144154
var e2eTests = map[string]string{
145155
"everyone": "[Skipped:Wednesday]",
146156
"not-gce": "[Skipped:gce]",
@@ -175,7 +185,7 @@ func TestDecodeProvider(t *testing.T) {
175185
discoveredMasters: gceMasters,
176186
discoveredNetwork: sdnConfig,
177187
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
178-
expectedConfig: `{"type":"gce","ProjectID":"openshift-gce-devel-ci","Region":"us-east1","Zone":"us-east1-a","NumNodes":3,"MultiMaster":true,"MultiZone":true,"Zones":["us-east1-a","us-east1-b","us-east1-c"],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
188+
expectedConfig: `{"type":"gce","ProjectID":"openshift-gce-devel-ci","Region":"us-east1","Zone":"us-east1-a","NumNodes":3,"MultiMaster":true,"MultiZone":true,"Zones":["us-east1-a","us-east1-b","us-east1-c"],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
179189
runTests: sets.NewString("everyone", "not-aws", "not-multitenant", "online", "ipv4", "requires-optional-cap"),
180190
},
181191
{
@@ -185,7 +195,7 @@ func TestDecodeProvider(t *testing.T) {
185195
discoveredMasters: gceMasters,
186196
discoveredNetwork: multitenantConfig,
187197
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
188-
expectedConfig: `{"type":"gce","ProjectID":"openshift-gce-devel-ci","Region":"us-east1","Zone":"us-east1-a","NumNodes":3,"MultiMaster":true,"MultiZone":true,"Zones":["us-east1-a","us-east1-b","us-east1-c"],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","NetworkPluginMode":"Multitenant","HasIPv4":true,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
198+
expectedConfig: `{"type":"gce","ProjectID":"openshift-gce-devel-ci","Region":"us-east1","Zone":"us-east1-a","NumNodes":3,"MultiMaster":true,"MultiZone":true,"Zones":["us-east1-a","us-east1-b","us-east1-c"],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","NetworkPluginMode":"Multitenant","HasIPv4":true,"HasIPv6":false,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
189199
runTests: sets.NewString("everyone", "not-aws", "online", "ipv4", "requires-optional-cap"),
190200
},
191201
{
@@ -195,7 +205,7 @@ func TestDecodeProvider(t *testing.T) {
195205
discoveredMasters: simpleMasters,
196206
discoveredNetwork: sdnConfig,
197207
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
198-
expectedConfig: `{"type":"skeleton","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
208+
expectedConfig: `{"type":"skeleton","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
199209
runTests: sets.NewString("everyone", "not-gce", "not-aws", "not-multitenant", "online", "ipv4", "requires-optional-cap"),
200210
},
201211
{
@@ -206,7 +216,7 @@ func TestDecodeProvider(t *testing.T) {
206216
discoveredNetwork: sdnConfig,
207217
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
208218
// NB: It does not actually use the passed-in Provider value
209-
expectedConfig: `{"type":"skeleton","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
219+
expectedConfig: `{"type":"skeleton","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
210220
runTests: sets.NewString("everyone", "not-gce", "not-aws", "not-multitenant", "online", "ipv4", "requires-optional-cap"),
211221
},
212222
{
@@ -216,7 +226,7 @@ func TestDecodeProvider(t *testing.T) {
216226
discoveredMasters: simpleMasters,
217227
discoveredNetwork: sdnConfig,
218228
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
219-
expectedConfig: `{"type":"skeleton","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
229+
expectedConfig: `{"type":"skeleton","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
220230
runTests: sets.NewString("everyone", "not-gce", "not-aws", "not-multitenant", "online", "ipv4", "requires-optional-cap"),
221231
},
222232
{
@@ -226,7 +236,7 @@ func TestDecodeProvider(t *testing.T) {
226236
discoveredMasters: simpleMasters,
227237
discoveredNetwork: sdnConfig,
228238
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
229-
expectedConfig: `{"type":"openstack","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
239+
expectedConfig: `{"type":"openstack","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
230240
runTests: sets.NewString("everyone", "not-gce", "not-aws", "not-multitenant", "online", "ipv4", "requires-optional-cap"),
231241
},
232242
{
@@ -236,15 +246,25 @@ func TestDecodeProvider(t *testing.T) {
236246
discoveredMasters: simpleMasters,
237247
discoveredNetwork: ovnKubernetesConfig,
238248
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
239-
expectedConfig: `{"type":"aws","ProjectID":"","Region":"us-east-2","Zone":"us-east-2a","NumNodes":3,"MultiMaster":false,"MultiZone":true,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OVNKubernetes","HasIPv4":true,"HasIPv6":true,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
249+
expectedConfig: `{"type":"aws","ProjectID":"","Region":"us-east-2","Zone":"us-east-2a","NumNodes":3,"MultiMaster":false,"MultiZone":true,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OVNKubernetes","HasIPv4":true,"HasIPv6":true,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
250+
runTests: sets.NewString("everyone", "not-gce", "not-sdn", "not-multitenant", "online", "ipv4", "ipv6", "dual-stack", "requires-optional-cap"),
251+
},
252+
{
253+
name: "complex override dual-stack IPv6 Primary",
254+
provider: `{"type":"aws","region":"us-east-2","zone":"us-east-2a","multimaster":false,"multizone":true}`,
255+
discoveredPlatform: awsPlatform,
256+
discoveredMasters: simpleMasters,
257+
discoveredNetwork: ovnKubernetesConfigIPv6Primary,
258+
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
259+
expectedConfig: `{"type":"aws","ProjectID":"","Region":"us-east-2","Zone":"us-east-2a","NumNodes":3,"MultiMaster":false,"MultiZone":true,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OVNKubernetes","HasIPv4":true,"HasIPv6":true,"IPFamily":"ipv6","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
240260
runTests: sets.NewString("everyone", "not-gce", "not-sdn", "not-multitenant", "online", "ipv4", "ipv6", "dual-stack", "requires-optional-cap"),
241261
},
242262
{
243263
name: "complex override without discovery",
244264
provider: `{"type":"aws","region":"us-east-2","zone":"us-east-2a","multimaster":false,"multizone":true}`,
245265
discoveredPlatform: nil,
246266
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
247-
expectedConfig: `{"type":"aws","ProjectID":"","Region":"us-east-2","Zone":"us-east-2a","NumNodes":0,"MultiMaster":false,"MultiZone":true,"Zones":null,"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"","HasIPv4":false,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
267+
expectedConfig: `{"type":"aws","ProjectID":"","Region":"us-east-2","Zone":"us-east-2a","NumNodes":0,"MultiMaster":false,"MultiZone":true,"Zones":null,"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"","HasIPv4":false,"HasIPv6":false,"IPFamily":"","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
248268
runTests: sets.NewString("everyone", "not-gce", "not-sdn", "not-multitenant", "online", "requires-optional-cap"),
249269
},
250270
{
@@ -254,17 +274,17 @@ func TestDecodeProvider(t *testing.T) {
254274
discoveredMasters: simpleMasters,
255275
discoveredNetwork: ovnKubernetesConfig,
256276
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
257-
expectedConfig: `{"type":"none","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":true,"SingleReplicaTopology":false,"NetworkPlugin":"OVNKubernetes","HasIPv4":true,"HasIPv6":true,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
277+
expectedConfig: `{"type":"none","ProjectID":"","Region":"","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":true,"SingleReplicaTopology":false,"NetworkPlugin":"OVNKubernetes","HasIPv4":true,"HasIPv6":true,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
258278
runTests: sets.NewString("everyone", "not-gce", "not-aws", "not-sdn", "not-multitenant", "ipv4", "ipv6", "dual-stack", "requires-optional-cap"),
259279
},
260280
{
261281
name: "override network plugin",
262-
provider: `{"type":"aws","networkPlugin":"Calico","hasIPv4":false,"hasIPv6":true,"hasSCTP":true}`,
282+
provider: `{"type":"aws","networkPlugin":"Calico","hasIPv4":false,"hasIPv6":true,"ipFamily":"ipv6","hasSCTP":true}`,
263283
discoveredPlatform: awsPlatform,
264284
discoveredMasters: simpleMasters,
265285
discoveredNetwork: ovnKubernetesConfig,
266286
optionalCapabilities: configv1.KnownClusterVersionCapabilities,
267-
expectedConfig: `{"type":"aws","ProjectID":"","Region":"us-east-2","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"Calico","HasIPv4":false,"HasIPv6":true,"HasSCTP":true,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
287+
expectedConfig: `{"type":"aws","ProjectID":"","Region":"us-east-2","Zone":"","NumNodes":3,"MultiMaster":true,"MultiZone":false,"Zones":[],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"Calico","HasIPv4":false,"HasIPv6":true,"IPFamily":"ipv6","HasSCTP":true,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":false}`,
268288
runTests: sets.NewString("everyone", "not-gce", "not-sdn", "not-multitenant", "online", "ipv6", "sctp", "requires-optional-cap"),
269289
},
270290
{
@@ -274,7 +294,7 @@ func TestDecodeProvider(t *testing.T) {
274294
discoveredMasters: gceMasters,
275295
discoveredNetwork: sdnConfig,
276296
optionalCapabilities: []configv1.ClusterVersionCapability{},
277-
expectedConfig: `{"type":"gce","ProjectID":"openshift-gce-devel-ci","Region":"us-east1","Zone":"us-east1-a","NumNodes":3,"MultiMaster":true,"MultiZone":true,"Zones":["us-east1-a","us-east1-b","us-east1-c"],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":true}`,
297+
expectedConfig: `{"type":"gce","ProjectID":"openshift-gce-devel-ci","Region":"us-east1","Zone":"us-east1-a","NumNodes":3,"MultiMaster":true,"MultiZone":true,"Zones":["us-east1-a","us-east1-b","us-east1-c"],"ConfigFile":"","Disconnected":false,"SingleReplicaTopology":false,"NetworkPlugin":"OpenShiftSDN","HasIPv4":true,"HasIPv6":false,"IPFamily":"ipv4","HasSCTP":false,"IsProxied":false,"IsIBMROKS":false,"HasNoOptionalCapabilities":true}`,
278298
runTests: sets.NewString("everyone", "not-aws", "not-multitenant", "online", "ipv4"),
279299
},
280300
}

0 commit comments

Comments
 (0)