Skip to content

Commit 4fd5651

Browse files
committed
Use envtest k8s client
1 parent e18c5b6 commit 4fd5651

13 files changed

+2229
-245
lines changed

Makefile.custom.mk

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,6 @@ generate: controller-gen crds ## Generate code containing DeepCopy, DeepCopyInto
2727
go generate ./...
2828
$(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..."
2929

30-
.PHONY: fmt
31-
fmt: ## Run go fmt against code.
32-
go fmt ./...
33-
34-
.PHONY: vet
35-
vet: ## Run go vet against code.
36-
go vet ./...
37-
3830
.PHONY: create-acceptance-cluster
3931
create-acceptance-cluster: kind
4032
KIND=$(KIND) CLUSTER=$(CLUSTER) IMG=$(IMG) MANAGEMENT_CLUSTER_NAMESPACE=$(MANAGEMENT_CLUSTER_NAMESPACE) ./scripts/ensure-kind-cluster.sh

api/v1alpha1/karpentermachinepool_types.go

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -114,9 +114,14 @@ type TaintSpec struct {
114114

115115
// EC2NodeClassSpec defines the configuration for a Karpenter EC2NodeClass
116116
type EC2NodeClassSpec struct {
117-
// AMIID specifies the AMI ID to use
118-
// +optional
119-
AMIID *string `json:"amiId,omitempty"`
117+
// Name is the ami name in EC2.
118+
// This value is the name field, which is different from the name tag.
119+
AMIName string `json:"amiName,omitempty"`
120+
// Owner is the owner for the ami.
121+
// You can specify a combination of AWS account IDs, "self", "amazon", and "aws-marketplace"
122+
AMIOwner string `json:"amiOwner,omitempty"`
123+
// - name: flatcar-stable-{{ $.Values.baseOS }}-kube-{{ $.Values.k8sVersion }}-tooling-{{ $.Values.toolingVersion }}-gs
124+
// // owner: {{ int64 $.Values.amiOwner | quote }}
120125

121126
// SecurityGroups specifies the security groups to use
122127
// +optional

api/v1alpha1/zz_generated.deepcopy.go

Lines changed: 0 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/infrastructure.cluster.x-k8s.io_karpentermachinepools.yaml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,15 @@ spec:
5454
description: EC2NodeClass specifies the configuration for the Karpenter
5555
EC2NodeClass
5656
properties:
57-
amiId:
58-
description: AMIID specifies the AMI ID to use
57+
amiName:
58+
description: |-
59+
Name is the ami name in EC2.
60+
This value is the name field, which is different from the name tag.
61+
type: string
62+
amiOwner:
63+
description: |-
64+
Owner is the owner for the ami.
65+
You can specify a combination of AWS account IDs, "self", "amazon", and "aws-marketplace"
5966
type: string
6067
securityGroups:
6168
description: SecurityGroups specifies the security groups to use

controllers/controllers_suite_test.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ import (
3939
capi "sigs.k8s.io/cluster-api/api/v1beta1"
4040
"sigs.k8s.io/controller-runtime/pkg/client"
4141
"sigs.k8s.io/controller-runtime/pkg/envtest"
42+
"sigs.k8s.io/controller-runtime/pkg/envtest/komega"
4243
logf "sigs.k8s.io/controller-runtime/pkg/log"
4344
"sigs.k8s.io/controller-runtime/pkg/log/zap"
4445

@@ -89,8 +90,10 @@ var _ = BeforeSuite(func() {
8990
testEnv = &envtest.Environment{
9091
CRDDirectoryPaths: []string{
9192
filepath.Join(build.Default.GOPATH, "pkg", "mod", "sigs.k8s.io", fmt.Sprintf("cluster-api@%s", capiModule[0].Module.Version), "config", "crd", "bases"),
93+
filepath.Join(build.Default.GOPATH, "pkg", "mod", "sigs.k8s.io", fmt.Sprintf("cluster-api@%s", capiModule[0].Module.Version), "controlplane", "kubeadm", "config", "crd", "bases"),
9294
filepath.Join(build.Default.GOPATH, "pkg", "mod", "sigs.k8s.io", "cluster-api-provider-aws", fmt.Sprintf("v2@%s", capaModule[0].Module.Version), "config", "crd", "bases"),
9395
crdPath,
96+
filepath.Join("..", "config", "crd", "bases"),
9497
},
9598
ErrorIfCRDPathMissing: true,
9699
}
@@ -111,6 +114,8 @@ var _ = BeforeSuite(func() {
111114
k8sClient, err = client.New(cfg, client.Options{Scheme: scheme.Scheme})
112115
Expect(err).NotTo(HaveOccurred())
113116
Expect(k8sClient).NotTo(BeNil())
117+
118+
komega.SetClient(k8sClient)
114119
})
115120

116121
var _ = AfterSuite(func() {

controllers/karpentermachinepool_controller.go

Lines changed: 49 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ func (r *KarpenterMachinePoolReconciler) Reconcile(ctx context.Context, req reco
196196
karpenterMachinePool.Status.Replicas = numberOfNodeClaims
197197
karpenterMachinePool.Status.Ready = true
198198

199-
logger.Info("Found NodeClaims in workload cluster, patching KarpenterMachinePool", "numberOfNodeClaims", numberOfNodeClaims)
199+
logger.Info("Found NodeClaims in workload cluster, patching KarpenterMachinePool", "numberOfNodeClaims", numberOfNodeClaims, "providerIDList", providerIDList)
200200

201201
if err := r.client.Status().Patch(ctx, karpenterMachinePool, client.MergeFrom(karpenterMachinePoolCopy), client.FieldOwner("karpentermachinepool-controller")); err != nil {
202202
logger.Error(err, "failed to patch karpenterMachinePool.status.Replicas")
@@ -293,6 +293,7 @@ func (r *KarpenterMachinePoolReconciler) computeProviderIDListFromNodeClaimsInWo
293293
logger.Error(err, "error retrieving nodeClaim.status.providerID", "nodeClaim", nc.GetName())
294294
continue
295295
}
296+
logger.Info("nodeClaim.status.providerID", "nodeClaimName", nc.GetName(), "statusFieldFound", found, "nodeClaim", nc.Object)
296297
if found && providerID != "" {
297298
providerIDList = append(providerIDList, providerID)
298299
}
@@ -413,46 +414,66 @@ func (r *KarpenterMachinePoolReconciler) createOrUpdateEC2NodeClass(ctx context.
413414
ec2NodeClass.SetNamespace("")
414415

415416
// Generate user data for Ignition
416-
userData := r.generateUserData(awsCluster.Spec.Region, cluster.Name, karpenterMachinePool.Name)
417+
userData := r.generateUserData(awsCluster.Spec.S3Bucket.Name, cluster.Name, karpenterMachinePool.Name)
417418

418419
operation, err := controllerutil.CreateOrUpdate(ctx, workloadClusterClient, ec2NodeClass, func() error {
419420
// Build the EC2NodeClass spec
420421
spec := map[string]interface{}{
421422
"amiFamily": "AL2",
422-
"role": karpenterMachinePool.Spec.IamInstanceProfile,
423-
"userData": userData,
424-
}
425-
426-
// Add AMI ID if specified
427-
if karpenterMachinePool.Spec.EC2NodeClass != nil && karpenterMachinePool.Spec.EC2NodeClass.AMIID != nil {
428-
spec["amiSelectorTerms"] = []map[string]interface{}{
423+
"amiSelectorTerms": []map[string]interface{}{
429424
{
430-
"id": *karpenterMachinePool.Spec.EC2NodeClass.AMIID,
425+
"name": karpenterMachinePool.Spec.EC2NodeClass.AMIName,
426+
"owner": karpenterMachinePool.Spec.EC2NodeClass.AMIOwner,
431427
},
432-
}
433-
}
434-
435-
// Add security groups if specified
436-
if karpenterMachinePool.Spec.EC2NodeClass != nil && len(karpenterMachinePool.Spec.EC2NodeClass.SecurityGroups) > 0 {
437-
spec["securityGroupSelectorTerms"] = []map[string]interface{}{
428+
},
429+
"instanceProfile": karpenterMachinePool.Spec.IamInstanceProfile,
430+
"securityGroupSelectorTerms": []map[string]interface{}{
438431
{
439432
"tags": map[string]string{
440433
"Name": karpenterMachinePool.Spec.EC2NodeClass.SecurityGroups[0], // Using first security group for now
441434
},
442435
},
443-
}
436+
},
437+
"subnetSelectorTerms": []map[string]interface{}{
438+
{
439+
"tags": map[string]string{
440+
"Name": karpenterMachinePool.Spec.EC2NodeClass.Subnets[0], // Using first security group for now
441+
},
442+
},
443+
},
444+
"userData": userData,
444445
}
445446

447+
// Add AMI ID if specified
448+
// if karpenterMachinePool.Spec.EC2NodeClass != nil && karpenterMachinePool.Spec.EC2NodeClass.AMIID != nil {
449+
// spec["amiSelectorTerms"] = []map[string]interface{}{
450+
// {
451+
// "id": *karpenterMachinePool.Spec.EC2NodeClass.AMIID,
452+
// },
453+
// }
454+
// }
455+
456+
// Add security groups if specified
457+
// if karpenterMachinePool.Spec.EC2NodeClass != nil && len(karpenterMachinePool.Spec.EC2NodeClass.SecurityGroups) > 0 {
458+
// spec["securityGroupSelectorTerms"] = []map[string]interface{}{
459+
// {
460+
// "tags": map[string]string{
461+
// "Name": karpenterMachinePool.Spec.EC2NodeClass.SecurityGroups[0], // Using first security group for now
462+
// },
463+
// },
464+
// }
465+
// }
466+
446467
// Add subnets if specified
447-
if karpenterMachinePool.Spec.EC2NodeClass != nil && len(karpenterMachinePool.Spec.EC2NodeClass.Subnets) > 0 {
448-
subnetSelectorTerms := []map[string]interface{}{}
449-
for _, subnet := range karpenterMachinePool.Spec.EC2NodeClass.Subnets {
450-
subnetSelectorTerms = append(subnetSelectorTerms, map[string]interface{}{
451-
"id": subnet,
452-
})
453-
}
454-
spec["subnetSelectorTerms"] = subnetSelectorTerms
455-
}
468+
// if karpenterMachinePool.Spec.EC2NodeClass != nil && len(karpenterMachinePool.Spec.EC2NodeClass.Subnets) > 0 {
469+
// subnetSelectorTerms := []map[string]interface{}{}
470+
// for _, subnet := range karpenterMachinePool.Spec.EC2NodeClass.Subnets {
471+
// subnetSelectorTerms = append(subnetSelectorTerms, map[string]interface{}{
472+
// "id": subnet,
473+
// })
474+
// }
475+
// spec["subnetSelectorTerms"] = subnetSelectorTerms
476+
// }
456477

457478
// Add tags if specified
458479
if karpenterMachinePool.Spec.EC2NodeClass != nil && len(karpenterMachinePool.Spec.EC2NodeClass.Tags) > 0 {
@@ -636,13 +657,13 @@ func (r *KarpenterMachinePoolReconciler) deleteKarpenterResources(ctx context.Co
636657
}
637658

638659
// generateUserData generates the user data for Ignition configuration
639-
func (r *KarpenterMachinePoolReconciler) generateUserData(region, clusterName, karpenterMachinePoolName string) string {
660+
func (r *KarpenterMachinePoolReconciler) generateUserData(s3bucketName, clusterName, karpenterMachinePoolName string) string {
640661
userData := map[string]interface{}{
641662
"ignition": map[string]interface{}{
642663
"config": map[string]interface{}{
643664
"merge": []map[string]interface{}{
644665
{
645-
"source": fmt.Sprintf("s3://%s-capa-%s/%s/%s", region, clusterName, S3ObjectPrefix, karpenterMachinePoolName),
666+
"source": fmt.Sprintf("s3://%s/%s/%s-%s", s3bucketName, S3ObjectPrefix, clusterName, karpenterMachinePoolName),
646667
"verification": map[string]interface{}{},
647668
},
648669
},

0 commit comments

Comments
 (0)