@@ -22,6 +22,7 @@ import (
22
22
"reflect"
23
23
"testing"
24
24
25
+ "github.com/gophercloud/gophercloud/v2/openstack/networking/v2/extensions/layer3/routers"
25
26
"github.com/gophercloud/gophercloud/v2/openstack/networking/v2/networks"
26
27
"github.com/gophercloud/gophercloud/v2/openstack/networking/v2/subnets"
27
28
. "github.com/onsi/ginkgo/v2" //nolint:revive
@@ -38,6 +39,7 @@ import (
38
39
"sigs.k8s.io/controller-runtime/pkg/reconcile"
39
40
40
41
infrav1 "sigs.k8s.io/cluster-api-provider-openstack/api/v1beta1"
42
+ "sigs.k8s.io/cluster-api-provider-openstack/pkg/cloud/services/networking"
41
43
"sigs.k8s.io/cluster-api-provider-openstack/pkg/scope"
42
44
)
43
45
@@ -431,6 +433,140 @@ var _ = Describe("OpenStackCluster controller", func() {
431
433
Expect (err ).To (BeNil ())
432
434
Expect (testCluster .Status .Network .ID ).To (Equal (clusterNetworkID ))
433
435
})
436
+
437
+ It ("reconcile pre-existing network components by id" , func () {
438
+ const clusterNetworkID = "6c90b532-7ba0-418a-a276-5ae55060b5b0"
439
+ const clusterSubnetID = "cad5a91a-36de-4388-823b-b0cc82cadfdc"
440
+ const clusterRouterID = "e2407c18-c4e7-4d3d-befa-8eec5d8756f2"
441
+
442
+ testCluster .SetName ("pre-existing-network-components-by-id" )
443
+ testCluster .Spec = infrav1.OpenStackClusterSpec {
444
+ Network : & infrav1.NetworkParam {
445
+ ID : ptr .To (clusterNetworkID ),
446
+ },
447
+ Subnets : []infrav1.SubnetParam {
448
+ {
449
+ ID : ptr .To (clusterSubnetID ),
450
+ },
451
+ },
452
+ ManagedSubnets : []infrav1.SubnetSpec {},
453
+ Router : & infrav1.RouterParam {
454
+ ID : ptr .To (clusterRouterID ),
455
+ },
456
+ }
457
+ err := k8sClient .Create (ctx , testCluster )
458
+ Expect (err ).To (BeNil ())
459
+ err = k8sClient .Create (ctx , capiCluster )
460
+ Expect (err ).To (BeNil ())
461
+
462
+ log := GinkgoLogr
463
+ clientScope , err := mockScopeFactory .NewClientScopeFromObject (ctx , k8sClient , nil , log , testCluster )
464
+ Expect (err ).To (BeNil ())
465
+ scope := scope .NewWithLogger (clientScope , log )
466
+
467
+ networkClientRecorder := mockScopeFactory .NetworkClient .EXPECT ()
468
+
469
+ networkClientRecorder .GetSubnet (clusterSubnetID ).Return (& subnets.Subnet {
470
+ ID : clusterSubnetID ,
471
+ CIDR : "192.168.0.0/24" ,
472
+ NetworkID : clusterNetworkID ,
473
+ }, nil )
474
+
475
+ networkClientRecorder .GetNetwork (clusterNetworkID ).Return (& networks.Network {
476
+ ID : clusterNetworkID ,
477
+ }, nil )
478
+
479
+ networkClientRecorder .GetRouter (clusterRouterID ).Return (& routers.Router {
480
+ ID : clusterRouterID ,
481
+ }, nil )
482
+
483
+ networkingService , err := networking .NewService (scope )
484
+ Expect (err ).To (BeNil ())
485
+
486
+ err = reconcilePreExistingNetworkComponents (scope , networkingService , testCluster )
487
+ Expect (err ).To (BeNil ())
488
+ Expect (testCluster .Status .Network .ID ).To (Equal (clusterNetworkID ))
489
+ Expect (testCluster .Status .Network .Subnets [0 ].ID ).To (Equal (clusterSubnetID ))
490
+ Expect (testCluster .Status .Router .ID ).To (Equal (clusterRouterID ))
491
+ })
492
+
493
+ It ("reconcile pre-existing network components by name" , func () {
494
+ const clusterNetworkID = "6c90b532-7ba0-418a-a276-5ae55060b5b0"
495
+ const clusterNetworkName = "capo"
496
+ const clusterSubnetID = "cad5a91a-36de-4388-823b-b0cc82cadfdc"
497
+ const clusterSubnetName = "capo"
498
+ const clusterRouterID = "e2407c18-c4e7-4d3d-befa-8eec5d8756f2"
499
+ const clusterRouterName = "capo"
500
+
501
+ testCluster .SetName ("pre-existing-network-components-by-id" )
502
+ testCluster .Spec = infrav1.OpenStackClusterSpec {
503
+ Network : & infrav1.NetworkParam {
504
+ Filter : & infrav1.NetworkFilter {
505
+ Name : clusterNetworkName ,
506
+ },
507
+ },
508
+ Subnets : []infrav1.SubnetParam {
509
+ {
510
+ Filter : & infrav1.SubnetFilter {
511
+ Name : clusterSubnetName ,
512
+ },
513
+ },
514
+ },
515
+ ManagedSubnets : []infrav1.SubnetSpec {},
516
+ Router : & infrav1.RouterParam {
517
+ Filter : & infrav1.RouterFilter {
518
+ Name : clusterRouterName ,
519
+ },
520
+ },
521
+ }
522
+ err := k8sClient .Create (ctx , testCluster )
523
+ Expect (err ).To (BeNil ())
524
+ err = k8sClient .Create (ctx , capiCluster )
525
+ Expect (err ).To (BeNil ())
526
+
527
+ log := GinkgoLogr
528
+ clientScope , err := mockScopeFactory .NewClientScopeFromObject (ctx , k8sClient , nil , log , testCluster )
529
+ Expect (err ).To (BeNil ())
530
+ scope := scope .NewWithLogger (clientScope , log )
531
+
532
+ networkClientRecorder := mockScopeFactory .NetworkClient .EXPECT ()
533
+
534
+ networkClientRecorder .ListNetwork (networks.ListOpts {
535
+ Name : clusterNetworkName ,
536
+ }).Return ([]networks.Network {
537
+ {
538
+ ID : clusterNetworkID ,
539
+ },
540
+ }, nil )
541
+
542
+ networkClientRecorder .ListSubnet (subnets.ListOpts {
543
+ Name : clusterSubnetName ,
544
+ NetworkID : clusterNetworkID ,
545
+ }).Return ([]subnets.Subnet {
546
+ {
547
+ ID : clusterSubnetID ,
548
+ CIDR : "192.168.0.0/24" ,
549
+ NetworkID : clusterNetworkID ,
550
+ },
551
+ }, nil )
552
+
553
+ networkClientRecorder .ListRouter (routers.ListOpts {
554
+ Name : clusterRouterName ,
555
+ }).Return ([]routers.Router {
556
+ {
557
+ ID : clusterRouterID ,
558
+ },
559
+ }, nil )
560
+
561
+ networkingService , err := networking .NewService (scope )
562
+ Expect (err ).To (BeNil ())
563
+
564
+ err = reconcilePreExistingNetworkComponents (scope , networkingService , testCluster )
565
+ Expect (err ).To (BeNil ())
566
+ Expect (testCluster .Status .Network .ID ).To (Equal (clusterNetworkID ))
567
+ Expect (testCluster .Status .Network .Subnets [0 ].ID ).To (Equal (clusterSubnetID ))
568
+ Expect (testCluster .Status .Router .ID ).To (Equal (clusterRouterID ))
569
+ })
434
570
})
435
571
436
572
func createRequestFromOSCluster (openStackCluster * infrav1.OpenStackCluster ) reconcile.Request {
0 commit comments