From ced0131da691141d5a499ccf2c4827e6ec584b35 Mon Sep 17 00:00:00 2001 From: "Narinder.Doal" Date: Wed, 9 Aug 2023 16:45:18 +0100 Subject: [PATCH 1/2] adding vm shutdown script & status --- .../vm-auto-shutdown-status.sh | 25 ++++++++ scripts/Virtual_Machines/vm-auto-shutdown.sh | 61 +++++++++++++++++++ 2 files changed, 86 insertions(+) create mode 100755 scripts/Virtual_Machines/vm-auto-shutdown-status.sh create mode 100755 scripts/Virtual_Machines/vm-auto-shutdown.sh diff --git a/scripts/Virtual_Machines/vm-auto-shutdown-status.sh b/scripts/Virtual_Machines/vm-auto-shutdown-status.sh new file mode 100755 index 00000000..06aef9fc --- /dev/null +++ b/scripts/Virtual_Machines/vm-auto-shutdown-status.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +#set -x +shopt -s nocasematch +AMBER='\033[1;33m' +GREEN='\033[0;32m' + +SUBSCRIPTIONS=$(az account list -o json) +jq -c '.[]' <<< $SUBSCRIPTIONS | while read subscription; do + SUBSCRIPTION_ID=$(jq -r '.id' <<< $subscription) + az account set -s $SUBSCRIPTION_ID + virtualMachines=$(az resource list --resource-type Microsoft.Compute/virtualMachines --query "[?tags.autoShutdown == 'true']" -o json) + +jq -c '.[]' <<< $virtualMachines | while read cluster; do + RESOURCE_GROUP=$(jq -r '.resourceGroup' <<< $vm) + virtualMachines_name=$(jq -r '.name' <<< $virtualMachines) + virtualMachines_data=$(az vm show -n $virtualMachines_name -g $RESOURCE_GROUP -o json) + virtualMachines_status=$(jq -r '.powerState.code' <<< "$virtualMachines_data") + + if [[ $virtualMachines_status == "Stopped" ]]; then + echo -e "${GREEN}$virtualMachines_name is $virtualMachines_status" + elif [[ $virtualMachines_status == "Running" ]]; then + echo -e "${AMBER}$virtualMachines is $virtualMachines_status" + fi + done # end_of_vm_loop +done \ No newline at end of file diff --git a/scripts/Virtual_Machines/vm-auto-shutdown.sh b/scripts/Virtual_Machines/vm-auto-shutdown.sh new file mode 100755 index 00000000..5ddcfeed --- /dev/null +++ b/scripts/Virtual_Machines/vm-auto-shutdown.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +#set -x +shopt -s nocasematch +AMBER='\033[1;33m' +GREEN='\033[0;32m' + +SUBSCRIPTIONS=$(az account list -o json) +jq -c '.[]' <<< $SUBSCRIPTIONS | while read subscription; do + SUBSCRIPTION_ID=$(jq -r '.id' <<< $subscription) + az account set -s $SUBSCRIPTION_ID + virtualMachinesS=$(az resource list --resource-type Microsoft.Compute/virtualMachines --query "[?tags.autoShutdown == 'true']" -o json) + +jq -c '.[]' <<< $virtualMachinesS | while read virtualMachines; do + RESOURCE_GROUP=$(jq -r '.resourceGroup' <<< $virtualMachines) + SKIP="false" + virtualMachines_name=$(jq -r '.name' <<< $virtualMachines) + echo "---------------------" + virtualMachines_env=$(echo $virtualMachines_name|cut -d'-' -f2) + virtualMachines_env=${virtualMachines_env/#sbox/Sandbox} + virtualMachines_env=${virtualMachines_env/stg/Staging} + virtualMachines_business_area=$(echo $virtualMachines_name|cut -d'-' -f1) + virtualMachines_business_area=${virtualMachines_business_area/ss/cross-cutting} + echo $virtualMachines_name $virtualMachines_business_area $virtualMachines_env + while read id + do + business_area_entry=$(jq -r '."business_area"' <<< $id) + env_entry=$(jq -r '."environment"' <<< $id) + start_date=$(jq -r '."skip_start_date"' <<< $id) + end_date=$(jq -r '."skip_end_date"' <<< $id) + #start date formatting + start_date_formatting=$(awk -F'-' '{printf("%04d-%02d-%02d\n",$3,$2,$1)}' <<< $start_date) + start_date_seconds=$(date -d "$start_date_formatting 00:00:00" +%s) + #end date formatting + end_date_formatting=$(awk -F'-' '{printf("%04d-%02d-%02d\n",$3,$2,$1)}' <<< $end_date) + end_date_seconds=$(date -d "$end_date_formatting 00:00:00" +%s) + #current date formatting + current_date=$(date +'%d-%m-%Y') + current_date_formatting=$(awk -F'-' '{printf("%04d-%02d-%02d\n",$3,$2,$1)}' <<< $current_date) + current_date_seconds=$(date -d "$current_date_formatting 00:00:00" +%s) + #Skip logic + #if start date is equal to current date: skip shutdown on that virtualMachines + if [[ ${env_entry} =~ ${virtualMachines_env} ]] && [[ $virtualMachines_business_area == $business_area_entry ]] && [[ $start_date_seconds -eq $current_date_seconds ]] ; then + echo "Match: $id" + SKIP="true" + continue + #if current date is less than skip end date: skip shutdown on that virtualMachines + elif [[ ${env_entry} =~ ${virtualMachines_env} ]] && [[ $virtualMachines_business_area == $business_area_entry ]] && [[ $current_date_seconds -ge $start_date_seconds ]] &&[[ $current_date_seconds -le $end_date_seconds ]]; then + echo "Match : $id" + SKIP="true" + continue + fi + done < <(jq -c '.[]' issues_list.json) + if [[ $SKIP == "false" ]]; then + echo -e "${GREEN}About to shutdown virtualMachines $virtualMachines_name (rg:$RESOURCE_GROUP)" + echo az vm stop --resource-group $RESOURCE_GROUP --name $virtualMachines_name --no-wait || echo Ignoring any errors stopping virtualMachines + az vm stop --resource-group $RESOURCE_GROUP --name $virtualMachines_name --no-wait || echo Ignoring any errors stopping virtualMachines + else + echo -e "${AMBER}virtualMachines $virtualMachines_name (rg:$RESOURCE_GROUP) has been skipped from todays shutdown schedule" + fi + done # end_of_virtualMachines_loop +done From c05264325a335fffd319b11b5efe9c9ef9ded66a Mon Sep 17 00:00:00 2001 From: "Narinder.Doal" Date: Thu, 10 Aug 2023 16:50:43 +0100 Subject: [PATCH 2/2] update typos --- scripts/Virtual_Machines/vm-auto-shutdown.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/Virtual_Machines/vm-auto-shutdown.sh b/scripts/Virtual_Machines/vm-auto-shutdown.sh index 5ddcfeed..077197bd 100755 --- a/scripts/Virtual_Machines/vm-auto-shutdown.sh +++ b/scripts/Virtual_Machines/vm-auto-shutdown.sh @@ -8,9 +8,9 @@ SUBSCRIPTIONS=$(az account list -o json) jq -c '.[]' <<< $SUBSCRIPTIONS | while read subscription; do SUBSCRIPTION_ID=$(jq -r '.id' <<< $subscription) az account set -s $SUBSCRIPTION_ID - virtualMachinesS=$(az resource list --resource-type Microsoft.Compute/virtualMachines --query "[?tags.autoShutdown == 'true']" -o json) + virtualMachines=$(az resource list --resource-type Microsoft.Compute/virtualMachines --query "[?tags.autoShutdown == 'true']" -o json) -jq -c '.[]' <<< $virtualMachinesS | while read virtualMachines; do +jq -c '.[]' <<< $virtualMachines | while read virtualMachines; do RESOURCE_GROUP=$(jq -r '.resourceGroup' <<< $virtualMachines) SKIP="false" virtualMachines_name=$(jq -r '.name' <<< $virtualMachines)