43 lines
1.4 KiB
Bash
Executable File
43 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# Check if DELETE_INSTANCE_DAYS is set and is a number
|
|
if ! [[ "${DELETE_INSTANCE_DAYS}" =~ ^[0-9]+$ ]]; then
|
|
echo "ERROR: DELETE_INSTANCE_DAYS is not set or not a number"
|
|
exit 1
|
|
fi
|
|
|
|
# Set pipefail to catch errors in pipelines
|
|
set -o pipefail
|
|
|
|
# Calculate the date before which instances should be deleted
|
|
DELETE_BEFORE_DATE=$(date --date="${DELETE_INSTANCE_DAYS} days ago" '+%Y%m%d')
|
|
|
|
# Check if gcloud command is available
|
|
if ! command -v gcloud &> /dev/null; then
|
|
echo "ERROR: gcloud command not found"
|
|
exit 1
|
|
fi
|
|
|
|
# Fetch the list of instances to delete
|
|
if ! INSTANCES=$(gcloud compute instances list --sort-by=creationTimestamp --filter="name~-[0-9a-f]{7,}$ AND creationTimestamp < ${DELETE_BEFORE_DATE}" --format='value(NAME,ZONE)' | sed 's/\(.*\)\t\(.*\)/\1 --zone=\2/'); then
|
|
echo "Error fetching instances."
|
|
exit 1
|
|
fi
|
|
|
|
# Delete instances if any are found
|
|
if [[ -n "${INSTANCES}" ]]; then
|
|
IFS=$'\n'
|
|
for INSTANCE_AND_ZONE in ${INSTANCES}; do
|
|
IFS=$' '
|
|
echo "Deleting instance: ${INSTANCE_AND_ZONE}"
|
|
gcloud compute instances delete --verbosity=info "${INSTANCE_AND_ZONE}" --delete-disks=all || {
|
|
echo "Failed to delete instance: ${INSTANCE_AND_ZONE}"
|
|
continue
|
|
}
|
|
IFS=$'\n'
|
|
done
|
|
IFS=$' \t\n' # Reset IFS to its default value
|
|
else
|
|
echo "No instances to delete."
|
|
fi
|