func()

in operator/pkg/awsprovider/instances/reconciler.go [87:121]


func (c *Controller) updateAutoScalingGroup(ctx context.Context, dataplane *v1alpha1.DataPlane, asg *autoscaling.Group) error {
	subnets, err := c.subnetsFor(ctx, dataplane)
	if err != nil {
		return fmt.Errorf("getting private subnet for %s, %w", dataplane.Spec.ClusterName, err)
	}
	if len(subnets) == 0 {
		return fmt.Errorf("failed to find private subnets for dataplane")
	}
	if functional.ValidateAll(
		func() bool { return asg != nil },
		func() bool {
			return functional.StringsMatch(strings.Split(ptr.StringValue(asg.VPCZoneIdentifier), ","), subnets)
		},
		func() bool { return ptr.Int64Value(asg.DesiredCapacity) == int64(dataplane.Spec.NodeCount) },
		func() bool {
			return functional.StringsMatch(
				parseOverridesFromASG(asg.MixedInstancesPolicy.LaunchTemplate.Overrides),
				parseOverridesFromASG(instanceTypes(dataplane.Spec.InstanceTypes)),
			)
		}) {
		return nil
	}
	zap.S().Infof("[%v] updating ASG %v", dataplane.Spec.ClusterName, *asg.AutoScalingGroupName)
	_, err = c.autoscaling.UpdateAutoScalingGroupWithContext(ctx, &autoscaling.UpdateAutoScalingGroupInput{
		AutoScalingGroupName: ptr.String(AutoScalingGroupNameFor(dataplane)),
		DesiredCapacity:      ptr.Int64(int64(dataplane.Spec.NodeCount)),
		VPCZoneIdentifier:    ptr.String(strings.Join(subnets, ",")),
		MixedInstancesPolicy: &autoscaling.MixedInstancesPolicy{
			LaunchTemplate: &autoscaling.LaunchTemplate{
				Overrides: instanceTypes(dataplane.Spec.InstanceTypes),
			},
		},
	})
	return err
}