Octopus.AwsRunScript exported 2025-01-10 by mcasperson belongs to ‘AWS’ category.
Initiates an instance refresh for an Auto Scaling group and waits for it to complete.
Parameters
When steps based on the template are included in a project’s deployment process, the parameters below can be set.
AWS Region
AWSBlueGreen.AWS.Region =
The AWS region. See https://aws.amazon.com/about-aws/global-infrastructure/regions_az/
for more information.
Account
AWSBlueGreen.AWS.Account =
ASG Name
AWSBlueGreen.AWS.ASG =
The name of the auto scaler group to refresh. See https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html
for more details.
Script body
Steps based on this template will execute the following Bash script.
#!/bin/bash
ASG=${1:-'#{AWSBlueGreen.AWS.ASG | Trim}'}
echoerror() { echo "$@" 1>&2; }
if ! command -v "aws" &> /dev/null; then
echoerror "You must have the AWS CLI installed for this step. Consider using a Container Image - https://octopus.com/docs/projects/steps/execution-containers-for-workers#how-to-use-execution-containers-for-workers"
exit 1
fi
if ! command -v "jq" &> /dev/null; then
echoerror "You must have jq installed for this step. Consider using a Container Image - https://octopus.com/docs/projects/steps/execution-containers-for-workers#how-to-use-execution-containers-for-workers"
exit 1
fi
if [[ -z "${ASG}" ]]; then
echoerror "Please provide the name of the Auto Scaling group as the first argument"
exit 1
fi
for i in {1..30}; do
EXISTINGREFRESHES=$(aws autoscaling describe-instance-refreshes --auto-scaling-group-name "${ASG}")
NOTSUCCESSFUL=$(jq '.InstanceRefreshes[] | select(.Status == "Pending" or .Status == "InProgress" or .Status == "Cancelling" or .Status == "RollbackInProgress" or .Status == "Baking")' <<< "${EXISTINGREFRESHES}")
if [[ -z "${NOTSUCCESSFUL}" ]];
then
break
fi
echo "Waiting for existing Auto Scaling group ${ASG} refresh to complete..."
sleep 12
done
REFRESH=$(aws autoscaling start-instance-refresh --auto-scaling-group-name "${ASG}")
if [[ $? -ne 0 ]];
then
echoerror "Failed to start instance refresh for Auto Scaling group ${ASG}"
exit 1
fi
REFRESHTOKEN=$(jq -r '.InstanceRefreshId' <<< "${REFRESH}")
echo "Refreshing instances in Auto Scaling group ${ASG}..."
write_verbose "${REFRESH}"
# Wait for all instances to be healthy
for i in {1..30}; do
REFRESHSTATUS=$(aws autoscaling describe-instance-refreshes --auto-scaling-group-name "${ASG}" --instance-refresh-ids "${REFRESHTOKEN}")
STATUS=$(jq -r '.InstanceRefreshes[0].Status' <<< "${REFRESHSTATUS}")
PERCENTCOMPLETE=$(jq -r '.InstanceRefreshes[0].PercentageComplete' <<< "${REFRESHSTATUS}")
# Treat a null percentage as 0
if [[ "${PERCENTCOMPLETE}" == "null" ]]
then
PERCENTCOMPLETE=0
fi
write_verbose "${REFRESHSTATUS}"
if [[ "${STATUS}" == "Successful" ]]
then
echo "Instance refresh succeeded"
break
elif [[ "${STATUS}" == "Failed" ]];
then
echo "Instance refresh failed!"
exit 1
fi
echo "Waiting for Auto Scaling group ${ASG} refresh to complete (${STATUS} ${PERCENTCOMPLETE}%)..."
sleep 12
done
Provided under the Apache License version 2.0.
To use this template in Octopus Deploy, copy the JSON below and paste it into the Library → Step templates → Import dialog.
{
"Id": "150c46d1-f33f-493b-a8c6-f5bd22f540f3",
"Name": "AWS - Initiate Instance Refresh",
"Description": "Initiates an instance refresh for an Auto Scaling group and waits for it to complete.",
"Version": 1,
"ExportedAt": "2025-01-10T04:12:22.681Z",
"ActionType": "Octopus.AwsRunScript",
"Author": "mcasperson",
"Packages": [],
"Parameters": [
{
"Id": "2fe001f5-39ee-40d9-b104-24817759ac6f",
"Name": "AWSBlueGreen.AWS.Region",
"Label": "AWS Region",
"HelpText": "The AWS region. See https://aws.amazon.com/about-aws/global-infrastructure/regions_az/ for more information.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
},
{
"Id": "f3630bb5-ab07-46b4-b764-19f1c3b2ec5f",
"Name": "AWSBlueGreen.AWS.Account",
"Label": "Account",
"HelpText": null,
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "AmazonWebServicesAccount"
}
},
{
"Id": "bdfdedee-fdeb-4292-96fd-e41c64b1e523",
"Name": "AWSBlueGreen.AWS.ASG",
"Label": "ASG Name",
"HelpText": "The name of the auto scaler group to refresh. See https://docs.aws.amazon.com/autoscaling/ec2/userguide/auto-scaling-groups.html for more details.",
"DefaultValue": "",
"DisplaySettings": {
"Octopus.ControlType": "SingleLineText"
}
}
],
"Properties": {
"OctopusUseBundledTooling": "False",
"Octopus.Action.Script.ScriptSource": "Inline",
"Octopus.Action.Script.Syntax": "Bash",
"Octopus.Action.Aws.AssumeRole": "False",
"Octopus.Action.AwsAccount.UseInstanceRole": "False",
"Octopus.Action.RunOnServer": "true",
"Octopus.Action.AwsAccount.Variable": "#{AWSBlueGreen.AWS.Account}",
"Octopus.Action.Aws.Region": "#{AWSBlueGreen.AWS.Region}",
"Octopus.Action.Script.ScriptBody": "#!/bin/bash\n\nASG=${1:-'#{AWSBlueGreen.AWS.ASG | Trim}'}\n\nechoerror() { echo \"$@\" 1>&2; }\n\nif ! command -v \"aws\" &> /dev/null; then\n echoerror \"You must have the AWS CLI installed for this step. Consider using a Container Image - https://octopus.com/docs/projects/steps/execution-containers-for-workers#how-to-use-execution-containers-for-workers\"\n exit 1\nfi\n\nif ! command -v \"jq\" &> /dev/null; then\n echoerror \"You must have jq installed for this step. Consider using a Container Image - https://octopus.com/docs/projects/steps/execution-containers-for-workers#how-to-use-execution-containers-for-workers\"\n exit 1\nfi\n\nif [[ -z \"${ASG}\" ]]; then\n echoerror \"Please provide the name of the Auto Scaling group as the first argument\"\n exit 1\nfi\n\nfor i in {1..30}; do\n EXISTINGREFRESHES=$(aws autoscaling describe-instance-refreshes --auto-scaling-group-name \"${ASG}\")\n NOTSUCCESSFUL=$(jq '.InstanceRefreshes[] | select(.Status == \"Pending\" or .Status == \"InProgress\" or .Status == \"Cancelling\" or .Status == \"RollbackInProgress\" or .Status == \"Baking\")' <<< \"${EXISTINGREFRESHES}\")\n if [[ -z \"${NOTSUCCESSFUL}\" ]];\n then\n break\n fi\n echo \"Waiting for existing Auto Scaling group ${ASG} refresh to complete...\"\n sleep 12\ndone\n\nREFRESH=$(aws autoscaling start-instance-refresh --auto-scaling-group-name \"${ASG}\")\n\nif [[ $? -ne 0 ]];\nthen\n echoerror \"Failed to start instance refresh for Auto Scaling group ${ASG}\"\n exit 1\nfi\n\nREFRESHTOKEN=$(jq -r '.InstanceRefreshId' <<< \"${REFRESH}\")\n\necho \"Refreshing instances in Auto Scaling group ${ASG}...\"\n\nwrite_verbose \"${REFRESH}\"\n\n# Wait for all instances to be healthy\nfor i in {1..30}; do\n REFRESHSTATUS=$(aws autoscaling describe-instance-refreshes --auto-scaling-group-name \"${ASG}\" --instance-refresh-ids \"${REFRESHTOKEN}\")\n STATUS=$(jq -r '.InstanceRefreshes[0].Status' <<< \"${REFRESHSTATUS}\")\n PERCENTCOMPLETE=$(jq -r '.InstanceRefreshes[0].PercentageComplete' <<< \"${REFRESHSTATUS}\")\n\n # Treat a null percentage as 0\n if [[ \"${PERCENTCOMPLETE}\" == \"null\" ]]\n then\n PERCENTCOMPLETE=0\n fi\n\n write_verbose \"${REFRESHSTATUS}\"\n\n if [[ \"${STATUS}\" == \"Successful\" ]]\n then\n echo \"Instance refresh succeeded\"\n break\n elif [[ \"${STATUS}\" == \"Failed\" ]];\n then\n echo \"Instance refresh failed!\"\n exit 1\n fi\n echo \"Waiting for Auto Scaling group ${ASG} refresh to complete (${STATUS} ${PERCENTCOMPLETE}%)...\"\n sleep 12\ndone"
},
"Category": "AWS",
"HistoryUrl": "https://github.com/OctopusDeploy/Library/commits/master/step-templates//opt/buildagent/work/75443764cd38076d/step-templates/aws-initiate-instance-refresh.json",
"Website": "/step-templates/150c46d1-f33f-493b-a8c6-f5bd22f540f3",
"Logo": "iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAMAAACahl6sAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADNQTFRF////9o0R/eLD/Nu0/erS95Qg+bhr95sv/vHh+r96/vjw+bFc/NSl+KI++82W+saI+KpNeDqM1wAAA41JREFUeNrsnG2XazAURiuo0Cr//9feliIvR3DvXJFZe3+a6XpW5+xWEpyY2w0AAAAAAAAAAAAAAAAAAADgf1J0bda/9N70q83a3enzUHWVjbR1sW0xp6sd6fPI72VmUt3zA+kymD6N5vnIBMrHsxHTjsUXOX0e+iVaTNU5Q0A/Q+k+4oAp+ixMbw6A4rGVVjGHR92ulNXWuTAlBNJN/FFyr5yy3qN9rawmF9IxR4hqX4U1WMplmGtruVBDuiuswbKkzaGhX+cfXsqbZlXXv0dsYR13nw9fLenGXD7f6U5Ony4yTpzyZLNMUcpMr0xNzfwdRRMR1/LP2cqMctNqKx1LZFydm2U022ueEtLL6HbHfmSRYRn4HDXaXyzU4XRkkZWK/+JlRBBBBBFEEEEEEUQQQQQRRBBB5B9uYJc7SyuLw+nI7R2ptKWJcywd18Utza0rnM4iN66M6qzS5E93Lf1zLaviUL/ISs/Nt6W00DEyuRgiP2Yxvrd15z/Y26ncG76jy1Ta5jEy/L0p/VMWy33woVm8UYN1Y9fqKrzfZ5iedtaV34+kNxHak2Wg2SSkY7djx/bQWkNP6nkE0lH3Lyx7D1aak1Z1erWJ+U130Vz0Sude7mZqv995nW7mZxJd27Sg5XQppuMdWY3xl1XXOge8MasWjZfund0KbvrkE9fK7OPNne+2U9YEWX3nemtSbvLv6LJ7gZ9X45yBl9ZxrZ9d3vjT8rz62tOsny7jXkpYPX9jQmvF8yF55TdaslGviZy1vAmfoTobsZztGNEv7qZZSr/6HRc/0yzlb3HiKhURRBBBBBFEEEEEEUQQQQQRRBD5XSLav38tllbVzeH02Ww/UWA+6XgsHdXFKc2vK5Quoz/duVRnlrb26crpizzXOVU3l2Zb5Pfe+d1OX8ViqW7qH9gt51K44bukr2XxrW54vMaoy7mxa/cgvPRVKcQG7uOCD58HLQLt3r17Iy6AqjYeDG7TUenWW+p9Ot/IOF/lwuHV1nk6o8M469PWXhtr+0BeX/x7Ue40W3xacfb2gXFxUZcX8TYB3Kyfp+GThsjKti2zgZuMiLshxW3gpiQyrn/DXhR/i1NqIte5pkUEEUQQQQQRRBBBBBFEEEEEEUR+g4jQUZBEqjqFO9mOiyeShoXvYoukZOG4GCLpWZgu83/vTNRidhlE0rYAAAAAAAAAAAAAAAAAAACAZPkjwAAMDi+bsnPP/wAAAABJRU5ErkJggg==",
"$Meta": {
"Type": "ActionTemplate"
}
}
Page updated on Friday, January 10, 2025