sigs.k8s.io/cluster-api-provider-aws@v1.5.5/pkg/cloud/services/ec2/helper_test.go (about) 1 /* 2 Copyright 2022 The Kubernetes Authors. 3 4 Licensed under the Apache License, Version 2.0 (the "License"); 5 you may not use this file except in compliance with the License. 6 You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10 Unless required by applicable law or agreed to in writing, software 11 distributed under the License is distributed on an "AS IS" BASIS, 12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 See the License for the specific language governing permissions and 14 limitations under the License. 15 */ 16 17 package ec2 18 19 import ( 20 "sort" 21 22 "github.com/aws/aws-sdk-go/aws" 23 "github.com/aws/aws-sdk-go/service/ec2" 24 corev1 "k8s.io/api/core/v1" 25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 26 "k8s.io/apimachinery/pkg/runtime" 27 "k8s.io/utils/pointer" 28 "sigs.k8s.io/controller-runtime/pkg/client" 29 30 infrav1 "sigs.k8s.io/cluster-api-provider-aws/api/v1beta1" 31 ekscontrolplanev1 "sigs.k8s.io/cluster-api-provider-aws/controlplane/eks/api/v1beta1" 32 expinfrav1 "sigs.k8s.io/cluster-api-provider-aws/exp/api/v1beta1" 33 "sigs.k8s.io/cluster-api-provider-aws/pkg/cloud/scope" 34 clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1" 35 "sigs.k8s.io/cluster-api/exp/api/v1beta1" 36 ) 37 38 func setupClusterScope(cl client.Client) (*scope.ClusterScope, error) { 39 return scope.NewClusterScope(scope.ClusterScopeParams{ 40 Client: cl, 41 Cluster: newCluster(), 42 AWSCluster: newAWSCluster(), 43 }) 44 } 45 46 func setupNewManagedControlPlaneScope(cl client.Client) (*scope.ManagedControlPlaneScope, error) { 47 return scope.NewManagedControlPlaneScope(scope.ManagedControlPlaneScopeParams{ 48 Client: cl, 49 Cluster: newCluster(), 50 ControlPlane: newAWSManagedControlPlane(), 51 }) 52 } 53 54 func setupMachinePoolScope(cl client.Client, ec2Scope scope.EC2Scope) (*scope.MachinePoolScope, error) { 55 return scope.NewMachinePoolScope(scope.MachinePoolScopeParams{ 56 Client: cl, 57 InfraCluster: ec2Scope, 58 Cluster: newCluster(), 59 MachinePool: newMachinePool(), 60 AWSMachinePool: newAWSMachinePool(), 61 }) 62 } 63 64 func defaultEC2Tags(name, clusterName string) []*ec2.Tag { 65 return []*ec2.Tag{ 66 { 67 Key: aws.String("Name"), 68 Value: aws.String(name), 69 }, 70 { 71 Key: aws.String(infrav1.ClusterAWSCloudProviderTagKey(clusterName)), 72 Value: aws.String("owned"), 73 }, 74 { 75 Key: aws.String(infrav1.ClusterTagKey(clusterName)), 76 Value: aws.String("owned"), 77 }, 78 { 79 Key: aws.String(infrav1.NameAWSClusterAPIRole), 80 Value: aws.String("node"), 81 }, 82 } 83 } 84 85 func newAWSMachinePool() *expinfrav1.AWSMachinePool { 86 return &expinfrav1.AWSMachinePool{ 87 TypeMeta: metav1.TypeMeta{ 88 Kind: "AWSMachinePool", 89 APIVersion: "v1", 90 }, 91 ObjectMeta: metav1.ObjectMeta{ 92 Name: "aws-mp-name", 93 Namespace: "aws-mp-ns", 94 }, 95 Spec: expinfrav1.AWSMachinePoolSpec{ 96 AvailabilityZones: []string{"us-east-1"}, 97 AdditionalTags: infrav1.Tags{}, 98 AWSLaunchTemplate: expinfrav1.AWSLaunchTemplate{ 99 Name: "aws-launch-template", 100 IamInstanceProfile: "instance-profile", 101 AMI: infrav1.AMIReference{}, 102 InstanceType: "t3.large", 103 SSHKeyName: aws.String("default"), 104 }, 105 }, 106 Status: expinfrav1.AWSMachinePoolStatus{ 107 LaunchTemplateID: "launch-template-id", 108 }, 109 } 110 } 111 112 func newCluster() *clusterv1.Cluster { 113 return &clusterv1.Cluster{ 114 TypeMeta: metav1.TypeMeta{ 115 Kind: "Cluster", 116 APIVersion: "v1", 117 }, 118 ObjectMeta: metav1.ObjectMeta{ 119 Name: "cluster-name", 120 Namespace: "cluster-ns", 121 }, 122 Spec: clusterv1.ClusterSpec{}, 123 } 124 } 125 126 func newAWSCluster() *infrav1.AWSCluster { 127 return &infrav1.AWSCluster{ 128 TypeMeta: metav1.TypeMeta{ 129 Kind: "AWSCluster", 130 APIVersion: "v1", 131 }, 132 ObjectMeta: metav1.ObjectMeta{ 133 Name: "aws-cluster-name", 134 Namespace: "aws-cluster-ns", 135 }, 136 Spec: infrav1.AWSClusterSpec{ 137 ImageLookupFormat: "img-lookup-format", 138 ImageLookupBaseOS: "img-lookup-os", 139 ImageLookupOrg: "img-lookup-org", 140 }, 141 Status: infrav1.AWSClusterStatus{ 142 Ready: true, 143 Network: infrav1.NetworkStatus{ 144 SecurityGroups: map[infrav1.SecurityGroupRole]infrav1.SecurityGroup{ 145 infrav1.SecurityGroupNode: {ID: "nodeSG"}, 146 infrav1.SecurityGroupLB: {ID: "lbSG"}, 147 }, 148 }, 149 }, 150 } 151 } 152 153 func newAWSManagedControlPlane() *ekscontrolplanev1.AWSManagedControlPlane { 154 return &ekscontrolplanev1.AWSManagedControlPlane{ 155 TypeMeta: metav1.TypeMeta{ 156 Kind: "AWSManagedControlPlane", 157 APIVersion: "v1", 158 }, 159 ObjectMeta: metav1.ObjectMeta{ 160 Name: "aws-cluster-name", 161 Namespace: "aws-cluster-ns", 162 }, 163 } 164 } 165 166 func newMachinePool() *v1beta1.MachinePool { 167 return &v1beta1.MachinePool{ 168 TypeMeta: metav1.TypeMeta{ 169 Kind: "MachinePool", 170 APIVersion: "v1", 171 }, 172 ObjectMeta: metav1.ObjectMeta{ 173 Name: "mp", 174 }, 175 Spec: v1beta1.MachinePoolSpec{ 176 Template: clusterv1.MachineTemplateSpec{ 177 Spec: clusterv1.MachineSpec{ 178 Version: pointer.StringPtr("v1.23.3"), 179 }, 180 }, 181 }, 182 } 183 } 184 185 func sortTags(a []*ec2.Tag) { 186 sort.Slice(a, func(i, j int) bool { 187 return *(a[i].Key) < *(a[j].Key) 188 }) 189 } 190 191 func setupScheme() (*runtime.Scheme, error) { 192 scheme := runtime.NewScheme() 193 if err := clusterv1.AddToScheme(scheme); err != nil { 194 return nil, err 195 } 196 if err := corev1.AddToScheme(scheme); err != nil { 197 return nil, err 198 } 199 if err := infrav1.AddToScheme(scheme); err != nil { 200 return nil, err 201 } 202 if err := expinfrav1.AddToScheme(scheme); err != nil { 203 return nil, err 204 } 205 if err := ekscontrolplanev1.AddToScheme(scheme); err != nil { 206 return nil, err 207 } 208 if err := v1beta1.AddToScheme(scheme); err != nil { 209 return nil, err 210 } 211 return scheme, nil 212 }