diff --git a/pkg/controllers/nodeclass/ami.go b/pkg/controllers/nodeclass/ami.go index 26a5a7462909..dd7e5bd7e2a0 100644 --- a/pkg/controllers/nodeclass/ami.go +++ b/pkg/controllers/nodeclass/ami.go @@ -22,9 +22,11 @@ import ( "github.com/samber/lo" corev1 "k8s.io/api/core/v1" + "sigs.k8s.io/controller-runtime/pkg/log" "sigs.k8s.io/controller-runtime/pkg/reconcile" karpv1 "sigs.k8s.io/karpenter/pkg/apis/v1" + "sigs.k8s.io/karpenter/pkg/utils/pretty" v1 "github.com/aws/karpenter-provider-aws/pkg/apis/v1" "github.com/aws/karpenter-provider-aws/pkg/providers/amifamily" @@ -32,6 +34,14 @@ import ( type AMI struct { amiProvider amifamily.Provider + cm *pretty.ChangeMonitor +} + +func NewAMIReconciler(provider amifamily.Provider) *AMI { + return &AMI{ + amiProvider: provider, + cm: pretty.NewChangeMonitor(), + } } func (a *AMI) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconcile.Result, error) { @@ -46,6 +56,12 @@ func (a *AMI) Reconcile(ctx context.Context, nodeClass *v1.EC2NodeClass) (reconc // Returning 'ok' in this case means that the nodeclass will remain in an unready state until the component is restarted. return reconcile.Result{RequeueAfter: time.Minute}, nil } + if uniqueAMIs := lo.Uniq(lo.Map(amis, func(a amifamily.AMI, _ int) string { + return a.AmiID + })); a.cm.HasChanged(fmt.Sprintf("amis/%s", nodeClass.Name), uniqueAMIs) { + log.FromContext(ctx).WithValues("ids", uniqueAMIs).V(1).Info("discovered amis") + } + nodeClass.Status.AMIs = lo.Map(amis, func(ami amifamily.AMI, _ int) v1.AMI { reqs := lo.Map(ami.Requirements.NodeSelectorRequirements(), func(item karpv1.NodeSelectorRequirementWithMinValues, _ int) corev1.NodeSelectorRequirement { return item.NodeSelectorRequirement diff --git a/pkg/controllers/nodeclass/controller.go b/pkg/controllers/nodeclass/controller.go index 9a05ea8cbdbb..48bd6b5f96c7 100644 --- a/pkg/controllers/nodeclass/controller.go +++ b/pkg/controllers/nodeclass/controller.go @@ -75,7 +75,7 @@ func NewController(kubeClient client.Client, recorder events.Recorder, subnetPro kubeClient: kubeClient, recorder: recorder, launchTemplateProvider: launchTemplateProvider, - ami: &AMI{amiProvider: amiProvider}, + ami: NewAMIReconciler(amiProvider), subnet: &Subnet{subnetProvider: subnetProvider}, securityGroup: &SecurityGroup{securityGroupProvider: securityGroupProvider}, instanceProfile: &InstanceProfile{instanceProfileProvider: instanceProfileProvider}, diff --git a/pkg/providers/amifamily/ami.go b/pkg/providers/amifamily/ami.go index ee6fdfc7257d..8c105d001177 100644 --- a/pkg/providers/amifamily/ami.go +++ b/pkg/providers/amifamily/ami.go @@ -26,7 +26,6 @@ import ( "github.com/patrickmn/go-cache" "github.com/samber/lo" "k8s.io/utils/clock" - "sigs.k8s.io/controller-runtime/pkg/log" v1 "github.com/aws/karpenter-provider-aws/pkg/apis/v1" sdk "github.com/aws/karpenter-provider-aws/pkg/aws" @@ -34,7 +33,6 @@ import ( "sigs.k8s.io/karpenter/pkg/cloudprovider" "sigs.k8s.io/karpenter/pkg/scheduling" - "sigs.k8s.io/karpenter/pkg/utils/pretty" "github.com/aws/karpenter-provider-aws/pkg/providers/ssm" ) @@ -49,7 +47,6 @@ type DefaultProvider struct { clk clock.Clock cache *cache.Cache ec2api sdk.EC2API - cm *pretty.ChangeMonitor versionProvider version.Provider ssmProvider ssm.Provider } @@ -59,7 +56,6 @@ func NewDefaultProvider(clk clock.Clock, versionProvider version.Provider, ssmPr clk: clk, cache: cache, ec2api: ec2api, - cm: pretty.NewChangeMonitor(), versionProvider: versionProvider, ssmProvider: ssmProvider, } @@ -78,11 +74,6 @@ func (p *DefaultProvider) List(ctx context.Context, nodeClass *v1.EC2NodeClass) return nil, err } amis.Sort() - uniqueAMIs := lo.Uniq(lo.Map(amis, func(a AMI, _ int) string { return a.AmiID })) - if p.cm.HasChanged(fmt.Sprintf("amis/%s", nodeClass.Name), uniqueAMIs) { - log.FromContext(ctx).WithValues( - "ids", uniqueAMIs).V(1).Info("discovered amis") - } return amis, nil }