Skip to content

Commit bdc953f

Browse files
committed
Check if NodePool field is nil
1 parent e87d502 commit bdc953f

File tree

1 file changed

+39
-10
lines changed

1 file changed

+39
-10
lines changed

controllers/karpentermachinepool_controller.go

Lines changed: 39 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/go-logr/logr"
1515
v1 "k8s.io/api/core/v1"
1616
k8serrors "k8s.io/apimachinery/pkg/api/errors"
17+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1718
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
1819
"k8s.io/apimachinery/pkg/runtime/schema"
1920
capa "sigs.k8s.io/cluster-api-provider-aws/v2/api/v1beta2"
@@ -581,20 +582,46 @@ func (r *KarpenterMachinePoolReconciler) createOrUpdateNodePool(ctx context.Cont
581582
labels := map[string]string{
582583
"giantswarm.io/machine-pool": fmt.Sprintf("%s-%s", cluster.Name, karpenterMachinePool.Name),
583584
}
584-
if len(karpenterMachinePool.Spec.NodePool.Template.ObjectMeta.Labels) > 0 {
585+
if karpenterMachinePool.Spec.NodePool != nil && len(karpenterMachinePool.Spec.NodePool.Template.ObjectMeta.Labels) > 0 {
585586
for labelKey, labelValue := range karpenterMachinePool.Spec.NodePool.Template.ObjectMeta.Labels {
586587
labels[labelKey] = labelValue
587588
}
588589
}
589590

591+
requirements := []v1alpha1.NodeSelectorRequirementWithMinValues{}
592+
taints := []v1.Taint{}
593+
expireAfter := v1alpha1.MustParseNillableDuration("720h")
594+
budgets := []v1alpha1.Budget{}
595+
consolidateAfter := v1alpha1.MustParseNillableDuration("0s")
596+
consolidationPolicy := "WhenEmptyOrUnderutilized"
597+
598+
if karpenterMachinePool.Spec.NodePool != nil {
599+
requirements = karpenterMachinePool.Spec.NodePool.Template.Spec.Requirements
600+
taints = karpenterMachinePool.Spec.NodePool.Template.Spec.Taints
601+
expireAfter = karpenterMachinePool.Spec.NodePool.Template.Spec.ExpireAfter
602+
budgets = karpenterMachinePool.Spec.NodePool.Disruption.Budgets
603+
consolidateAfter = karpenterMachinePool.Spec.NodePool.Disruption.ConsolidateAfter
604+
consolidationPolicy = string(karpenterMachinePool.Spec.NodePool.Disruption.ConsolidationPolicy)
605+
}
606+
607+
terminationGracePeriod := metav1.Duration{}
608+
if karpenterMachinePool.Spec.NodePool != nil && karpenterMachinePool.Spec.NodePool.Template.Spec.TerminationGracePeriod != nil {
609+
terminationGracePeriod = *karpenterMachinePool.Spec.NodePool.Template.Spec.TerminationGracePeriod
610+
}
611+
612+
weight := int32(1)
613+
if karpenterMachinePool.Spec.NodePool != nil && karpenterMachinePool.Spec.NodePool.Weight != nil {
614+
weight = *karpenterMachinePool.Spec.NodePool.Weight
615+
}
616+
590617
operation, err := controllerutil.CreateOrUpdate(ctx, workloadClusterClient, nodePool, func() error {
591-
nodePool.Object["spec"] = map[string]interface{}{
618+
spec := map[string]interface{}{
592619
"template": map[string]interface{}{
593620
"metadata": map[string]interface{}{
594621
"labels": labels,
595622
},
596623
"spec": map[string]interface{}{
597-
"taints": karpenterMachinePool.Spec.NodePool.Template.Spec.Taints,
624+
"taints": taints,
598625
"startupTaints": []interface{}{
599626
map[string]interface{}{
600627
"effect": "NoExecute",
@@ -607,25 +634,27 @@ func (r *KarpenterMachinePoolReconciler) createOrUpdateNodePool(ctx context.Cont
607634
"value": "true",
608635
},
609636
},
610-
"requirements": karpenterMachinePool.Spec.NodePool.Template.Spec.Requirements,
637+
"requirements": requirements,
611638
"nodeClassRef": map[string]interface{}{
612639
"group": "karpenter.k8s.aws",
613640
"kind": "EC2NodeClass",
614641
"name": karpenterMachinePool.Name,
615642
},
616-
"terminationGracePeriodSeconds": karpenterMachinePool.Spec.NodePool.Template.Spec.TerminationGracePeriod,
617-
"expireAfter": karpenterMachinePool.Spec.NodePool.Template.Spec.ExpireAfter,
643+
"terminationGracePeriodSeconds": terminationGracePeriod,
644+
"expireAfter": expireAfter,
618645
},
619646
},
620647
"disruption": map[string]interface{}{
621-
"budgets": karpenterMachinePool.Spec.NodePool.Disruption.Budgets,
622-
"consolidateAfter": karpenterMachinePool.Spec.NodePool.Disruption.ConsolidateAfter,
623-
"consolidationPolicy": karpenterMachinePool.Spec.NodePool.Disruption.ConsolidationPolicy,
648+
"budgets": budgets,
649+
"consolidateAfter": consolidateAfter,
650+
"consolidationPolicy": consolidationPolicy,
624651
},
625652
"limits": karpenterMachinePool.Spec.NodePool.Limits,
626-
"weight": karpenterMachinePool.Spec.NodePool.Weight,
653+
"weight": weight,
627654
}
628655

656+
nodePool.Object["spec"] = spec
657+
629658
return nil
630659
})
631660

0 commit comments

Comments
 (0)