@@ -258,9 +258,10 @@ var _ = Describe("e2e tests [PR-Blocking]", func() {
258
258
259
259
// Note that as the bootstrap config does not have cloud.conf, the node will not be added to the cluster.
260
260
// We still expect the port for the machine to be created.
261
+ machineDeployment := makeMachineDeployment (namespace .Name , md3Name , clusterName , "" , 1 )
261
262
framework .CreateMachineDeployment (ctx , framework.CreateMachineDeploymentInput {
262
263
Creator : e2eCtx .Environment .BootstrapClusterProxy .GetClient (),
263
- MachineDeployment : makeMachineDeployment ( namespace . Name , md3Name , clusterName , "" , 1 ) ,
264
+ MachineDeployment : machineDeployment ,
264
265
BootstrapConfigTemplate : makeJoinBootstrapConfigTemplate (namespace .Name , md3Name ),
265
266
InfraMachineTemplate : makeOpenStackMachineTemplateWithPortOptions (namespace .Name , clusterName , md3Name , customPortOptions , machineTags ),
266
267
})
@@ -274,33 +275,133 @@ var _ = Describe("e2e tests [PR-Blocking]", func() {
274
275
return len (plist )
275
276
}, e2eCtx .E2EConfig .GetIntervals (specName , "wait-worker-nodes" )... ).Should (Equal (1 ))
276
277
277
- port := plist [0 ]
278
- Expect (port .Description ).To (Equal ("primary" ))
279
- Expect (port .Tags ).To (ContainElement (testTag ))
278
+ primaryPort := plist [0 ]
279
+ Expect (primaryPort .Description ).To (Equal ("primary" ))
280
+ Expect (primaryPort .Tags ).To (ContainElement (testTag ))
280
281
281
282
// assert trunked port is created.
282
283
Eventually (func () int {
283
284
plist , err = shared .DumpOpenStackPorts (e2eCtx , ports.ListOpts {Description : "trunked" , Tags : testTag })
284
285
Expect (err ).To (BeNil ())
285
286
return len (plist )
286
287
}, e2eCtx .E2EConfig .GetIntervals (specName , "wait-worker-nodes" )... ).Should (Equal (1 ))
287
- port = plist [0 ]
288
- Expect (port .Description ).To (Equal ("trunked" ))
289
- Expect (port .Tags ).To (ContainElement (testTag ))
288
+ trunkedPort : = plist [0 ]
289
+ Expect (trunkedPort .Description ).To (Equal ("trunked" ))
290
+ Expect (trunkedPort .Tags ).To (ContainElement (testTag ))
290
291
291
292
// assert trunk data.
292
293
var trunk * trunks.Trunk
293
294
Eventually (func () int {
294
- trunk , err = shared .DumpOpenStackTrunks (e2eCtx , port .ID )
295
+ trunk , err = shared .DumpOpenStackTrunks (e2eCtx , trunkedPort .ID )
295
296
Expect (err ).To (BeNil ())
296
297
Expect (trunk ).NotTo (BeNil ())
297
298
return 1
298
299
}, e2eCtx .E2EConfig .GetIntervals (specName , "wait-worker-nodes" )... ).Should (Equal (1 ))
299
- Expect (trunk .PortID ).To (Equal (port .ID ))
300
+ Expect (trunk .PortID ).To (Equal (trunkedPort .ID ))
301
+
300
302
// assert port level security group is created by name using SecurityGroupFilters
303
+
301
304
securityGroupsList , err := shared .DumpOpenStackSecurityGroups (e2eCtx , groups.ListOpts {Name : testSecurityGroupName })
302
305
Expect (err ).NotTo (HaveOccurred ())
303
306
Expect (securityGroupsList ).To (HaveLen (1 ))
307
+
308
+ // Testing subports
309
+ shared .Logf ("Create a new port and add it as a subport of the trunk" )
310
+
311
+ providerClient , clientOpts , _ , err := shared .GetTenantProviderClient (e2eCtx )
312
+ Expect (err ).To (BeNil (), "Cannot create providerClient" )
313
+
314
+ networkClient , err := openstack .NewNetworkV2 (providerClient , gophercloud.EndpointOpts {
315
+ Region : clientOpts .RegionName ,
316
+ })
317
+ Expect (err ).To (BeNil (), "Cannot create network client" )
318
+
319
+ networksList , err := shared .DumpOpenStackNetworks (
320
+ e2eCtx ,
321
+ networks.ListOpts {
322
+ TenantID : securityGroupsList [0 ].TenantID ,
323
+ },
324
+ )
325
+ Expect (err ).To (BeNil (), "Cannot get network List" )
326
+
327
+ createOpts := ports.CreateOpts {
328
+ Name : "subPort" ,
329
+ NetworkID : networksList [0 ].ID ,
330
+ }
331
+
332
+ subPort , err := ports .Create (networkClient , createOpts ).Extract ()
333
+ Expect (err ).To (BeNil (), "Cannot create subPort" )
334
+
335
+ addSubportsOpts := trunks.AddSubportsOpts {
336
+ Subports : []trunks.Subport {
337
+ {
338
+ SegmentationID : 1 ,
339
+ SegmentationType : "vlan" ,
340
+ PortID : subPort .ID ,
341
+ },
342
+ },
343
+ }
344
+ shared .Logf ("Add subport to trunk" )
345
+ _ , err = trunks .AddSubports (networkClient , trunk .ID , addSubportsOpts ).Extract ()
346
+ Expect (err ).To (BeNil (), "Cannot add subports" )
347
+
348
+ subports , err := trunks .GetSubports (networkClient , trunk .ID ).Extract ()
349
+ Expect (err ).To (BeNil ())
350
+ Expect (subports ).To (HaveLen (1 ))
351
+
352
+ shared .Logf ("Get machine object from MachineDeployments" )
353
+ c := e2eCtx .Environment .BootstrapClusterProxy .GetClient ()
354
+
355
+ machines := framework .GetMachinesByMachineDeployments (ctx , framework.GetMachinesByMachineDeploymentsInput {
356
+ Lister : c ,
357
+ ClusterName : clusterName ,
358
+ Namespace : namespace .Name ,
359
+ MachineDeployment : * machineDeployment ,
360
+ })
361
+
362
+ Expect (machines ).To (HaveLen (1 ))
363
+
364
+ machine := machines [0 ]
365
+
366
+ shared .Logf ("Fetching serverID" )
367
+ allServers , err := shared .DumpOpenStackServers (e2eCtx , servers.ListOpts {Name : machine .Spec .InfrastructureRef .Name })
368
+ Expect (err ).To (BeNil ())
369
+ Expect (allServers ).To (HaveLen (1 ))
370
+ serverID := allServers [0 ].ID
371
+ Expect (err ).To (BeNil ())
372
+
373
+ shared .Logf ("Deleting the machine deployment, which should trigger trunk deletion" )
374
+
375
+ err = c .Delete (ctx , machineDeployment )
376
+ Expect (err ).To (BeNil ())
377
+
378
+ shared .Logf ("Waiting for the server to be cleaned" )
379
+
380
+ computeClient , err := openstack .NewComputeV2 (providerClient , gophercloud.EndpointOpts {
381
+ Region : clientOpts .RegionName ,
382
+ })
383
+ Expect (err ).To (BeNil (), "Cannot create compute client" )
384
+
385
+ Eventually (
386
+ func () bool {
387
+ _ , err := servers .Get (computeClient , serverID ).Extract ()
388
+ _ , ok := err .(gophercloud.ErrDefault404 )
389
+ return ok
390
+ }, e2eCtx .E2EConfig .GetIntervals (specName , "wait-delete-cluster" )... ,
391
+ ).Should (BeTrue ())
392
+
393
+ // Wait here for some time, to make sure the reconciler fully cleans everything
394
+ time .Sleep (10 * time .Second )
395
+
396
+ // Verify that the trunk is deleted
397
+ _ , err = trunks .Get (networkClient , trunk .ID ).Extract ()
398
+ _ , ok := err .(gophercloud.ErrDefault404 )
399
+ Expect (ok ).To (BeTrue ())
400
+
401
+ // Verify that subPort is deleted
402
+ _ , err = ports .Get (networkClient , subPort .ID ).Extract ()
403
+ _ , ok = err .(gophercloud.ErrDefault404 )
404
+ Expect (ok ).To (BeTrue ())
304
405
})
305
406
})
306
407
0 commit comments