package core.aws.task.as;
import com.amazonaws.services.autoscaling.model.UpdateAutoScalingGroupRequest;
import core.aws.client.AWS;
import core.aws.env.Context;
import core.aws.resource.as.ASGroup;
import core.aws.workflow.Action;
import core.aws.workflow.Task;
/**
* @author neo
*/
@Action("update-asg")
public class UpdateASGroupTask extends Task<ASGroup> {
public UpdateASGroupTask(ASGroup asGroup) {
super(asGroup);
}
@Override
public void execute(Context context) throws Exception {
ASGroupHelper helper = new ASGroupHelper(context.env);
String asGroupName = resource.remoteASGroup.getAutoScalingGroupName();
String oldLaunchConfigName = null;
if (resource.launchConfig.changed()) {
oldLaunchConfigName = resource.remoteASGroup.getLaunchConfigurationName();
helper.createLaunchConfig(resource);
AWS.as.updateTag(asGroupName, helper.nameTag(resource));
}
AWS.as.updateASGroup(new UpdateAutoScalingGroupRequest()
.withAutoScalingGroupName(asGroupName)
.withLaunchConfigurationName(resource.launchConfig.remoteLaunchConfig.getLaunchConfigurationName())
.withTerminationPolicies(ASGroup.TERMINATE_POLICY_OLDEST_INSTANCE)
.withDesiredCapacity(resource.desiredSize)
.withMinSize(resource.minSize)
.withMaxSize(resource.maxSize));
if (oldLaunchConfigName != null) {
AWS.as.deleteLaunchConfig(oldLaunchConfigName);
}
}
}