@@ -63,9 +63,7 @@ func TestReconcileSubnets(t *testing.T) {
63
63
{ID : "subnet-private-us-east-1-wl1-nyc-wlz-1" , AvailabilityZone : "us-east-1-wl1-nyc-wlz-1" , CidrBlock : "10.0.7.0/24" , IsPublic : false },
64
64
{ID : "subnet-public-us-east-1-wl1-nyc-wlz-1" , AvailabilityZone : "us-east-1-wl1-nyc-wlz-1" , CidrBlock : "10.0.8.0/24" , IsPublic : true },
65
65
}
66
- // TODO(mtulio): replace by slices.Concat(...) on go 1.22+
67
- stubSubnetsAllZones := stubSubnetsAvailabilityZone
68
- stubSubnetsAllZones = append (stubSubnetsAllZones , stubSubnetsLocalZone ... )
66
+ stubSubnetsAllZones := append (stubSubnetsAvailabilityZone , stubSubnetsLocalZone ... )
69
67
stubSubnetsAllZones = append (stubSubnetsAllZones , stubSubnetsWavelengthZone ... )
70
68
71
69
// NetworkSpec with subnets in zone type availability-zone
@@ -1057,55 +1055,7 @@ func TestReconcileSubnets(t *testing.T) {
1057
1055
},
1058
1056
Subnets : []infrav1.SubnetSpec {},
1059
1057
}).WithTagUnmanagedNetworkResources (true ),
1060
- expect : func (m * mocks.MockEC2APIMockRecorder ) {
1061
- m .DescribeSubnetsWithContext (context .TODO (), gomock .Eq (& ec2.DescribeSubnetsInput {
1062
- Filters : []* ec2.Filter {
1063
- {
1064
- Name : aws .String ("state" ),
1065
- Values : []* string {aws .String ("pending" ), aws .String ("available" )},
1066
- },
1067
- {
1068
- Name : aws .String ("vpc-id" ),
1069
- Values : []* string {aws .String (subnetsVPCID )},
1070
- },
1071
- },
1072
- })).
1073
- Return (& ec2.DescribeSubnetsOutput {
1074
- Subnets : []* ec2.Subnet {
1075
- {
1076
- VpcId : aws .String (subnetsVPCID ),
1077
- SubnetId : aws .String ("subnet-1" ),
1078
- AvailabilityZone : aws .String ("us-east-1a" ),
1079
- CidrBlock : aws .String ("10.0.10.0/24" ),
1080
- MapPublicIpOnLaunch : aws .Bool (false ),
1081
- },
1082
- {
1083
- VpcId : aws .String (subnetsVPCID ),
1084
- SubnetId : aws .String ("subnet-2" ),
1085
- AvailabilityZone : aws .String ("us-east-1a" ),
1086
- CidrBlock : aws .String ("10.0.20.0/24" ),
1087
- MapPublicIpOnLaunch : aws .Bool (false ),
1088
- },
1089
- },
1090
- }, nil )
1091
- m .DescribeRouteTablesWithContext (context .TODO (), gomock .AssignableToTypeOf (& ec2.DescribeRouteTablesInput {})).
1092
- Return (& ec2.DescribeRouteTablesOutput {}, nil )
1093
-
1094
- m .DescribeNatGatewaysPagesWithContext (context .TODO (),
1095
- gomock .Eq (& ec2.DescribeNatGatewaysInput {
1096
- Filter : []* ec2.Filter {
1097
- {
1098
- Name : aws .String ("vpc-id" ),
1099
- Values : []* string {aws .String (subnetsVPCID )},
1100
- },
1101
- {
1102
- Name : aws .String ("state" ),
1103
- Values : []* string {aws .String ("pending" ), aws .String ("available" )},
1104
- },
1105
- },
1106
- }),
1107
- gomock .Any ()).Return (nil )
1108
- },
1058
+ expect : func (m * mocks.MockEC2APIMockRecorder ) {},
1109
1059
errorExpected : true ,
1110
1060
tagUnmanagedNetworkResources : true ,
1111
1061
},
@@ -2625,6 +2575,183 @@ func TestReconcileSubnets(t *testing.T) {
2625
2575
}, nil ).AnyTimes ()
2626
2576
},
2627
2577
},
2578
+ {
2579
+ name : "Managed VPC, existing public and private subnets, 2 subnets in spec, custom tags in spec should be created" ,
2580
+ input : NewClusterScope ().WithNetwork (& infrav1.NetworkSpec {
2581
+ VPC : infrav1.VPCSpec {
2582
+ ID : subnetsVPCID ,
2583
+ Tags : infrav1.Tags {
2584
+ infrav1 .ClusterTagKey ("test-cluster" ): "owned" ,
2585
+ },
2586
+ },
2587
+ Subnets : []infrav1.SubnetSpec {
2588
+ {
2589
+ ID : "subnet-1" ,
2590
+ AvailabilityZone : "us-east-1a" ,
2591
+ IsPublic : true ,
2592
+ Tags : map [string ]string {"this-tag-is-in-the-spec" : "but-its-not-on-aws" },
2593
+ },
2594
+ {
2595
+ ID : "subnet-2" ,
2596
+ AvailabilityZone : "us-east-1a" ,
2597
+ IsPublic : false ,
2598
+ Tags : map [string ]string {"subnet-2-this-tag-is-in-the-spec" : "subnet-2-but-its-not-on-aws" },
2599
+ },
2600
+ },
2601
+ }),
2602
+ expect : func (m * mocks.MockEC2APIMockRecorder ) {
2603
+ tagsOnSubnet1 := []* ec2.Tag {
2604
+ {
2605
+ Key : aws .String ("Name" ),
2606
+ Value : aws .String ("test-cluster-subnet-public" ),
2607
+ },
2608
+ {
2609
+ Key : aws .String ("kubernetes.io/cluster/test-cluster" ),
2610
+ Value : aws .String ("owned" ),
2611
+ },
2612
+ {
2613
+ Key : aws .String ("sigs.k8s.io/cluster-api-provider-aws/role" ),
2614
+ Value : aws .String ("public" ),
2615
+ },
2616
+ }
2617
+ tagsOnSubnet2 := []* ec2.Tag {
2618
+ {
2619
+ Key : aws .String ("Name" ),
2620
+ Value : aws .String ("test-cluster-subnet-private" ),
2621
+ },
2622
+ {
2623
+ Key : aws .String ("kubernetes.io/cluster/test-cluster" ),
2624
+ Value : aws .String ("owned" ),
2625
+ },
2626
+ {
2627
+ Key : aws .String ("sigs.k8s.io/cluster-api-provider-aws/role" ),
2628
+ Value : aws .String ("private" ),
2629
+ },
2630
+ }
2631
+ m .DescribeSubnetsWithContext (context .TODO (), gomock .Eq (& ec2.DescribeSubnetsInput {
2632
+ Filters : []* ec2.Filter {
2633
+ {
2634
+ Name : aws .String ("state" ),
2635
+ Values : []* string {aws .String ("pending" ), aws .String ("available" )},
2636
+ },
2637
+ {
2638
+ Name : aws .String ("vpc-id" ),
2639
+ Values : []* string {aws .String (subnetsVPCID )},
2640
+ },
2641
+ },
2642
+ })).
2643
+ Return (& ec2.DescribeSubnetsOutput {
2644
+ Subnets : []* ec2.Subnet {
2645
+ {
2646
+ VpcId : aws .String (subnetsVPCID ),
2647
+ SubnetId : aws .String ("subnet-1" ),
2648
+ AvailabilityZone : aws .String ("us-east-1a" ),
2649
+ CidrBlock : aws .String ("10.0.0.0/17" ),
2650
+ Tags : tagsOnSubnet1 ,
2651
+ },
2652
+ {
2653
+ VpcId : aws .String (subnetsVPCID ),
2654
+ SubnetId : aws .String ("subnet-2" ),
2655
+ AvailabilityZone : aws .String ("us-east-1a" ),
2656
+ CidrBlock : aws .String ("10.0.128.0/17" ),
2657
+ Tags : tagsOnSubnet2 ,
2658
+ },
2659
+ },
2660
+ }, nil )
2661
+
2662
+ m .DescribeRouteTablesWithContext (context .TODO (), gomock .AssignableToTypeOf (& ec2.DescribeRouteTablesInput {})).
2663
+ Return (& ec2.DescribeRouteTablesOutput {}, nil )
2664
+
2665
+ m .DescribeNatGatewaysPagesWithContext (context .TODO (),
2666
+ gomock .Eq (& ec2.DescribeNatGatewaysInput {
2667
+ Filter : []* ec2.Filter {
2668
+ {
2669
+ Name : aws .String ("vpc-id" ),
2670
+ Values : []* string {aws .String (subnetsVPCID )},
2671
+ },
2672
+ {
2673
+ Name : aws .String ("state" ),
2674
+ Values : []* string {aws .String ("pending" ), aws .String ("available" )},
2675
+ },
2676
+ },
2677
+ }),
2678
+ gomock .Any ()).Return (nil )
2679
+
2680
+ // Public subnet
2681
+ expectedAppliedAwsTagsForSubnet1 := []* ec2.Tag {
2682
+ {
2683
+ Key : aws .String ("Name" ),
2684
+ Value : aws .String ("test-cluster-subnet-public-us-east-1a" ),
2685
+ },
2686
+ {
2687
+ Key : aws .String ("kubernetes.io/cluster/test-cluster" ),
2688
+ Value : aws .String ("owned" ),
2689
+ },
2690
+ {
2691
+ Key : aws .String ("kubernetes.io/role/elb" ),
2692
+ Value : aws .String ("1" ),
2693
+ },
2694
+ {
2695
+ Key : aws .String ("sigs.k8s.io/cluster-api-provider-aws/cluster/test-cluster" ),
2696
+ Value : aws .String ("owned" ),
2697
+ },
2698
+ {
2699
+ Key : aws .String ("sigs.k8s.io/cluster-api-provider-aws/role" ),
2700
+ Value : aws .String ("public" ),
2701
+ },
2702
+ {
2703
+ Key : aws .String ("this-tag-is-in-the-spec" ),
2704
+ Value : aws .String ("but-its-not-on-aws" ),
2705
+ }}
2706
+ m .CreateTagsWithContext (context .TODO (), gomock .Eq (& ec2.CreateTagsInput {
2707
+ Resources : aws .StringSlice ([]string {"subnet-1" }),
2708
+ Tags : expectedAppliedAwsTagsForSubnet1 ,
2709
+ })).
2710
+ Return (nil , nil )
2711
+
2712
+ // Private subnet
2713
+ expectedAppliedAwsTagsForSubnet2 := []* ec2.Tag {
2714
+ {
2715
+ Key : aws .String ("Name" ),
2716
+ Value : aws .String ("test-cluster-subnet-private-us-east-1a" ),
2717
+ },
2718
+ {
2719
+ Key : aws .String ("kubernetes.io/cluster/test-cluster" ),
2720
+ Value : aws .String ("owned" ),
2721
+ },
2722
+ {
2723
+ Key : aws .String ("kubernetes.io/role/internal-elb" ),
2724
+ Value : aws .String ("1" ),
2725
+ },
2726
+ {
2727
+ Key : aws .String ("sigs.k8s.io/cluster-api-provider-aws/cluster/test-cluster" ),
2728
+ Value : aws .String ("owned" ),
2729
+ },
2730
+ {
2731
+ Key : aws .String ("sigs.k8s.io/cluster-api-provider-aws/role" ),
2732
+ Value : aws .String ("private" ),
2733
+ },
2734
+ {
2735
+ Key : aws .String ("subnet-2-this-tag-is-in-the-spec" ),
2736
+ Value : aws .String ("subnet-2-but-its-not-on-aws" ),
2737
+ }}
2738
+ m .CreateTagsWithContext (context .TODO (), gomock .Eq (& ec2.CreateTagsInput {
2739
+ Resources : aws .StringSlice ([]string {"subnet-2" }),
2740
+ Tags : expectedAppliedAwsTagsForSubnet2 ,
2741
+ })).
2742
+ Return (nil , nil )
2743
+
2744
+ m .DescribeAvailabilityZonesWithContext (context .TODO (), gomock .Any ()).
2745
+ Return (& ec2.DescribeAvailabilityZonesOutput {
2746
+ AvailabilityZones : []* ec2.AvailabilityZone {
2747
+ {
2748
+ ZoneName : aws .String ("us-east-1a" ),
2749
+ ZoneType : aws .String ("availability-zone" ),
2750
+ },
2751
+ },
2752
+ }, nil ).AnyTimes ()
2753
+ },
2754
+ },
2628
2755
{
2629
2756
name : "With ManagedControlPlaneScope, Managed VPC, no existing subnets exist, two az's, expect two private and two public from default, created with tag including eksClusterName not a name of Cluster resource" ,
2630
2757
input : NewManagedControlPlaneScope ().
0 commit comments