Add script for removing old artifacts from Azure
This commit is contained in:
parent
8a8802aab7
commit
f26fcba902
1
Makefile
1
Makefile
@ -70,6 +70,7 @@ clean_cloud_envs:
|
||||
sudo rm -rf /var/tmp/beakerlib-*/
|
||||
sudo -E ./tests/cleanup/remove_old_objects_aws.sh
|
||||
sudo -E ./tests/cleanup/remove_old_objects_openstack.sh
|
||||
sudo -E ./tests/cleanup/remove_old_objects_azure.sh
|
||||
# make sure all cleanup scripts finished successfully
|
||||
sudo sh -c 'grep RESULT_STRING /var/tmp/beakerlib-*/TestResults | grep -v PASS && exit 1 || exit 0'
|
||||
|
||||
|
147
tests/cleanup/remove_old_objects_azure.sh
Executable file
147
tests/cleanup/remove_old_objects_azure.sh
Executable file
@ -0,0 +1,147 @@
|
||||
#!/bin/bash
|
||||
# Script removes virtual machines and other artifacts older than HOURS_LIMIT (24 hours by default) from Azure
|
||||
|
||||
. /usr/share/beakerlib/beakerlib.sh
|
||||
|
||||
|
||||
# Delete old objects based on the $TAG_NAME tag value defined in a previous execution of the script
|
||||
delete_old_resources() {
|
||||
local resource_type="$1"
|
||||
|
||||
# list resources older than $TIMESTAMP based on the $TAG_NAME tag created in a previous run
|
||||
rlRun -c -s 'az resource list --resource-type $resource_type --query "[?tags.$TAG_NAME < \`$TIMESTAMP\`].name" --output tsv' 0 "Get a list of $resource_type older than $TIMESTAMP"
|
||||
resources_to_delete=$(cat $rlRun_LOG)
|
||||
|
||||
if [ -n "$resources_to_delete" ]; then
|
||||
for object in $resources_to_delete; do
|
||||
rlRun -t -c "az resource delete --resource-type=$resource_type --name $object --resource-group $AZURE_RESOURCE_GROUP"
|
||||
done
|
||||
else
|
||||
rlLogInfo "No $resource_type older than $TIMESTAMP was found."
|
||||
fi
|
||||
}
|
||||
|
||||
# Find objects without the $TAG_NAME tag and create the tag with the current date/time value
|
||||
tag_new_resources() {
|
||||
local resource_type="$1"
|
||||
|
||||
# list resources without the $TAG_NAME tag
|
||||
rlRun -c -s 'az resource list --resource-type $resource_type --query "[?tags.$TAG_NAME == null].name" --output tsv' 0 "Get a list of $resource_type without the $TAG_NAME tag."
|
||||
resources_without_tag=$(cat $rlRun_LOG)
|
||||
|
||||
if [ -n "$resources_without_tag" ]; then
|
||||
now=$(date -u '+%FT%T')
|
||||
for object in $resources_without_tag; do
|
||||
rlRun -t -c 'az resource update --resource-type $resource_type --name $object --resource-group $AZURE_RESOURCE_GROUP --set "tags.$TAG_NAME=$now"' 0 "Add tag $TAG_NAME:$now to $resource_type: $object"
|
||||
done
|
||||
else
|
||||
rlLogInfo "No $resource_type without the $TAG_NAME tag was found."
|
||||
fi
|
||||
}
|
||||
|
||||
rlJournalStart
|
||||
rlPhaseStartSetup
|
||||
if [ -z "$AZURE_SUBSCRIPTION_ID" ]; then
|
||||
rlFail "AZURE_SUBSCRIPTION_ID is empty!"
|
||||
else
|
||||
rlLogInfo "AZURE_SUBSCRIPTION_ID is configured"
|
||||
fi
|
||||
|
||||
if [ -z "$AZURE_TENANT" ]; then
|
||||
rlFail "AZURE_TENANT is empty!"
|
||||
else
|
||||
rlLogInfo "AZURE_TENANT is configured"
|
||||
fi
|
||||
|
||||
if [ -z "$AZURE_CLIENT_ID" ]; then
|
||||
rlFail "AZURE_CLIENT_ID is empty!"
|
||||
else
|
||||
rlLogInfo "AZURE_CLIENT_ID is configured"
|
||||
fi
|
||||
|
||||
if [ -z "$AZURE_SECRET" ]; then
|
||||
rlFail "AZURE_SECRET is empty!"
|
||||
else
|
||||
rlLogInfo "AZURE_SECRET is configured"
|
||||
fi
|
||||
|
||||
export AZURE_RESOURCE_GROUP="${AZURE_RESOURCE_GROUP:-composer}"
|
||||
rlLogInfo "AZURE_RESOURCE_GROUP=$AZURE_RESOURCE_GROUP"
|
||||
|
||||
export AZURE_STORAGE_ACCOUNT="${AZURE_STORAGE_ACCOUNT:-composerredhat}"
|
||||
rlLogInfo "AZURE_STORAGE_ACCOUNT=$AZURE_STORAGE_ACCOUNT"
|
||||
|
||||
export AZURE_STORAGE_CONTAINER="${AZURE_STORAGE_CONTAINER:-composerredhat}"
|
||||
rlLogInfo "AZURE_STORAGE_CONTAINER=$AZURE_STORAGE_CONTAINER"
|
||||
|
||||
# VMs older than HOURS_LIMIT will be deleted
|
||||
HOURS_LIMIT="${HOURS_LIMIT:-24}"
|
||||
export TIMESTAMP=`date -u -d "$HOURS_LIMIT hours ago" '+%FT%T'`
|
||||
|
||||
rlLogInfo "HOURS_LIMIT=$HOURS_LIMIT"
|
||||
rlLogInfo "TIMESTAMP=$TIMESTAMP"
|
||||
|
||||
# It's not easily possible to get creation date/time of Azure objects.
|
||||
# Use a tag to record when the object was seen for the first time
|
||||
# and remove objects based on the value of the tag. The value is UTC
|
||||
# date/time, format: 2019-01-29T15:16:40
|
||||
TAG_NAME="first_seen"
|
||||
|
||||
# Use Microsoft repository to install azure-cli
|
||||
rlRun -t -c "rpm --import https://packages.microsoft.com/keys/microsoft.asc"
|
||||
cat > /etc/yum.repos.d/azure-cli.repo << __EOF__
|
||||
[azure-cli]
|
||||
name=Azure CLI
|
||||
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
|
||||
enabled=1
|
||||
gpgcheck=1
|
||||
gpgkey=https://packages.microsoft.com/keys/microsoft.asc
|
||||
__EOF__
|
||||
rlRun -c -t "dnf install -y azure-cli"
|
||||
|
||||
# sign in
|
||||
rlRun -c -t 'az login --service-principal --username "$AZURE_CLIENT_ID" --password "$AZURE_SECRET" --tenant "$AZURE_TENANT"'
|
||||
rlPhaseEnd
|
||||
|
||||
# A list of Azure resources we want to clean
|
||||
resource_types="
|
||||
Microsoft.Compute/virtualMachines
|
||||
Microsoft.Network/networkInterfaces
|
||||
Microsoft.Network/publicIPAddresses
|
||||
Microsoft.Network/networkSecurityGroups
|
||||
Microsoft.Compute/disks
|
||||
Microsoft.Compute/images
|
||||
"
|
||||
|
||||
# Remove old resources and tag new resources
|
||||
for resource_type in $resource_types; do
|
||||
rlPhaseStartTest "Delete old $resource_type"
|
||||
delete_old_resources $resource_type
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartTest "Tag new $resource_type"
|
||||
tag_new_resources $resource_type
|
||||
rlPhaseEnd
|
||||
done
|
||||
|
||||
rlPhaseStartTest "Delete old blobs"
|
||||
# get a list of blobs older than $TIMESTAMP
|
||||
rlRun -c -s 'az storage blob list --container-name $AZURE_STORAGE_CONTAINER --query "[?properties.creationTime < \`$TIMESTAMP\`].[name,properties.creationTime]" --output tsv'
|
||||
blobs_to_delete=$(cat $rlRun_LOG)
|
||||
|
||||
if [ -n "$blobs_to_delete" ]; then
|
||||
while read name creation_time; do
|
||||
rlLogInfo "Removing blob $name created $creation_time"
|
||||
rlRun -t -c "az storage blob delete --container-name $AZURE_STORAGE_CONTAINER --name $name"
|
||||
done <<< "$blobs_to_delete"
|
||||
else
|
||||
rlLogInfo "No blob older than $TIMESTAMP was found."
|
||||
fi
|
||||
rlPhaseEnd
|
||||
|
||||
rlPhaseStartCleanup
|
||||
rlRun -c -t "rm -f /etc/yum.repos.d/azure-cli.repo"
|
||||
rlPhaseEnd
|
||||
|
||||
rlJournalEnd
|
||||
rlJournalPrintText
|
Loading…
Reference in New Issue
Block a user