From 85da9fb918e1476d8a7aee4793c73a26e5b7e439 Mon Sep 17 00:00:00 2001 From: Peter Rifel Date: Wed, 3 Jan 2024 21:16:18 -0600 Subject: [PATCH] Use instance metadata to get warm pool state --- upup/pkg/fi/nodeup/command.go | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/upup/pkg/fi/nodeup/command.go b/upup/pkg/fi/nodeup/command.go index 1cc0ad04ed..db43d9949b 100644 --- a/upup/pkg/fi/nodeup/command.go +++ b/upup/pkg/fi/nodeup/command.go @@ -32,6 +32,7 @@ import ( "time" "github.com/aws/aws-sdk-go/aws" + "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/ec2metadata" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/autoscaling" @@ -719,20 +720,17 @@ func getAWSConfigurationMode(ctx context.Context, c *model.NodeupModelContext) ( return "", nil } - svc := c.Cloud.(awsup.AWSCloud).Autoscaling() - - result, err := svc.DescribeAutoScalingInstancesWithContext(ctx, &autoscaling.DescribeAutoScalingInstancesInput{ - InstanceIds: []*string{&c.InstanceID}, - }) + targetLifecycleState, err := vfs.Context.ReadFile("metadata://aws/meta-data/autoscaling/target-lifecycle-state") if err != nil { - return "", fmt.Errorf("error describing instances: %v", err) + var awsErr awserr.RequestFailure + if errors.As(err, &awsErr) && awsErr.StatusCode() == 404 { + // The instance isn't in an ASG (karpenter, etc.) + return "", nil + } + return "", fmt.Errorf("error reading target-lifecycle-state from instance metadata: %v", err) } - // If the instance is not a part of an ASG, it won't be in a warm pool either. - if len(result.AutoScalingInstances) < 1 { - return "", nil - } - lifecycle := fi.ValueOf(result.AutoScalingInstances[0].LifecycleState) - if strings.HasPrefix(lifecycle, "Warmed:") { + + if strings.HasPrefix(string(targetLifecycleState), "Warmed:") { klog.Info("instance is entering warm pool") return model.ConfigurationModeWarming, nil } else {