From 446f4f25ca78162864d9957d4c1b49baaa880643 Mon Sep 17 00:00:00 2001 From: Oleg Atamanenko Date: Thu, 12 Nov 2020 14:38:40 -0800 Subject: [PATCH] If instance is in standby mode already, just return --- controllers/helpers.go | 2 +- controllers/rollingupgrade_controller.go | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/controllers/helpers.go b/controllers/helpers.go index e3ead121..bcab1e00 100644 --- a/controllers/helpers.go +++ b/controllers/helpers.go @@ -85,7 +85,7 @@ func getInServiceIds(instances []*autoscaling.Instance) []string { return list } -func getGroupInstanceState(group *autoscaling.Group, instanceID string) (string, error) { +func getInstanceStateInASG(group *autoscaling.Group, instanceID string) (string, error) { for _, instance := range group.Instances { if aws.StringValue(instance.InstanceId) == instanceID { return aws.StringValue(instance.LifecycleState), nil diff --git a/controllers/rollingupgrade_controller.go b/controllers/rollingupgrade_controller.go index 63778811..1c52be38 100644 --- a/controllers/rollingupgrade_controller.go +++ b/controllers/rollingupgrade_controller.go @@ -299,28 +299,33 @@ func (r *RollingUpgradeReconciler) GetAutoScalingGroup(rollupName string) (*auto // SetStandby sets the autoscaling instance to standby mode. func (r *RollingUpgradeReconciler) SetStandby(ruObj *upgrademgrv1alpha1.RollingUpgrade, instanceID string) error { r.info(ruObj, "Setting to stand-by", ruObj.Name, instanceID) - input := &autoscaling.EnterStandbyInput{ - AutoScalingGroupName: aws.String(ruObj.Spec.AsgName), - InstanceIds: aws.StringSlice([]string{instanceID}), - ShouldDecrementDesiredCapacity: aws.Bool(false), - } asg, err := r.GetAutoScalingGroup(ruObj.Name) if err != nil { return err } - instanceState, err := getGroupInstanceState(asg, instanceID) + instanceState, err := getInstanceStateInASG(asg, instanceID) if err != nil { r.info(ruObj, fmt.Sprintf("WARNING: %v", err)) return nil } + if instanceState == autoscaling.LifecycleStateStandby { + return nil + } + if !isInServiceLifecycleState(instanceState) { r.info(ruObj, "Cannot set instance to stand-by, instance is in state", "instanceState", instanceState, "instanceID", instanceID) return nil } + input := &autoscaling.EnterStandbyInput{ + AutoScalingGroupName: aws.String(ruObj.Spec.AsgName), + InstanceIds: aws.StringSlice([]string{instanceID}), + ShouldDecrementDesiredCapacity: aws.Bool(false), + } + _, err = r.ASGClient.EnterStandby(input) if err != nil { r.error(ruObj, err, "Failed to enter standby", "instanceID", instanceID)