in internal/deployers/eksapi/node.go [559:594]
func (m *nodeManager) verifyASGAMI(asgName string, amiId string) (bool, error) {
klog.Infof("verifying AMI is %s for ASG: %s", amiId, asgName)
asgOut, err := m.clients.ASG().DescribeAutoScalingGroups(context.TODO(), &autoscaling.DescribeAutoScalingGroupsInput{
AutoScalingGroupNames: []string{asgName},
})
if err != nil {
return false, nil
}
if len(asgOut.AutoScalingGroups) != 1 {
return false, fmt.Errorf("autoscaling group not found: %s", asgName)
}
var instanceIds []string
for _, instance := range asgOut.AutoScalingGroups[0].Instances {
instanceIds = append(instanceIds, *instance.InstanceId)
}
klog.Infof("verifying AMI for instances: %v", instanceIds)
ec2Out, err := m.clients.EC2().DescribeInstances(context.TODO(), &ec2.DescribeInstancesInput{
InstanceIds: instanceIds,
})
if err != nil {
return false, err
}
var errs []error
for _, reservation := range ec2Out.Reservations {
for _, instance := range reservation.Instances {
if *instance.ImageId != amiId {
errs = append(errs, fmt.Errorf("instance %s using wrong AMI: %s", *instance.InstanceId, *instance.ImageId))
}
}
}
if len(errs) > 0 {
return false, errors.Join(errs...)
}
klog.Infof("ASG instances are using expected AMI: %s", amiId)
return true, nil
}