Skip to content

Commit 10f3258

Browse files
Fix review comments 3
1 parent 4ea52c8 commit 10f3258

File tree

1 file changed

+36
-6
lines changed

1 file changed

+36
-6
lines changed

controllers/awsmachinetemplate_controller.go

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ import (
2727
corev1 "k8s.io/api/core/v1"
2828
apierrors "k8s.io/apimachinery/pkg/api/errors"
2929
"k8s.io/apimachinery/pkg/api/resource"
30+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
31+
"k8s.io/apimachinery/pkg/runtime/schema"
32+
"k8s.io/utils/ptr"
3033
ctrl "sigs.k8s.io/controller-runtime"
3134
"sigs.k8s.io/controller-runtime/pkg/client"
3235
"sigs.k8s.io/controller-runtime/pkg/controller"
@@ -359,24 +362,28 @@ func (r *AWSMachineTemplateReconciler) getNodeInfoFromAMI(ctx context.Context, e
359362
// getKubernetesVersion attempts to find the Kubernetes version by querying MachineDeployments
360363
// or KubeadmControlPlanes that reference this AWSMachineTemplate.
361364
func (r *AWSMachineTemplateReconciler) getKubernetesVersion(ctx context.Context, template *infrav1.AWSMachineTemplate) (string, error) {
365+
listOpts, err := getParentListOptions(template.ObjectMeta)
366+
if err != nil {
367+
return "", errors.Wrap(err, "failed to get parent list options")
368+
}
369+
362370
// Try to find version from MachineDeployment first
363371
machineDeploymentList := &clusterv1.MachineDeploymentList{}
364-
if err := r.List(ctx, machineDeploymentList, client.InNamespace(template.Namespace)); err != nil {
372+
if err := r.List(ctx, machineDeploymentList, listOpts...); err != nil {
365373
return "", errors.Wrap(err, "failed to list MachineDeployments")
366374
}
367375

368376
// Find MachineDeployments that reference this AWSMachineTemplate
369377
for _, md := range machineDeploymentList.Items {
370-
if md.Spec.Template.Spec.InfrastructureRef.Kind == "AWSMachineTemplate" &&
371-
md.Spec.Template.Spec.InfrastructureRef.Name == template.Name &&
372-
md.Spec.Template.Spec.Version != nil {
373-
return *md.Spec.Template.Spec.Version, nil
378+
if version := ptr.Deref(md.Spec.Template.Spec.Version, ""); md.Spec.Template.Spec.InfrastructureRef.Kind == "AWSMachineTemplate" &&
379+
md.Spec.Template.Spec.InfrastructureRef.Name == template.Name && version != "" {
380+
return version, nil
374381
}
375382
}
376383

377384
// If not found in MachineDeployment, try KubeadmControlPlane
378385
kcpList := &controlplanev1.KubeadmControlPlaneList{}
379-
if err := r.List(ctx, kcpList, client.InNamespace(template.Namespace)); err != nil {
386+
if err := r.List(ctx, kcpList, listOpts...); err != nil {
380387
return "", errors.Wrap(err, "failed to list KubeadmControlPlanes")
381388
}
382389

@@ -391,3 +398,26 @@ func (r *AWSMachineTemplateReconciler) getKubernetesVersion(ctx context.Context,
391398

392399
return "", errors.New("no MachineDeployment or KubeadmControlPlane found referencing this AWSMachineTemplate with a version")
393400
}
401+
402+
func getParentListOptions(obj metav1.ObjectMeta) ([]client.ListOption, error) {
403+
listOpts := []client.ListOption{
404+
client.InNamespace(obj.Namespace),
405+
}
406+
407+
for _, ref := range obj.GetOwnerReferences() {
408+
if ref.Kind != "Cluster" {
409+
continue
410+
}
411+
gv, err := schema.ParseGroupVersion(ref.APIVersion)
412+
if err != nil {
413+
return nil, errors.WithStack(err)
414+
}
415+
if gv.Group == clusterv1.GroupVersion.Group {
416+
listOpts = append(listOpts, client.MatchingLabels{
417+
clusterv1.ClusterNameLabel: ref.Name,
418+
})
419+
break
420+
}
421+
}
422+
return listOpts, nil
423+
}

0 commit comments

Comments
 (0)