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  }