-
jmthibault79 authoredjmthibault79 authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
cleanup_clusters.sh 2.82 KiB
#!/usr/bin/env bash
ACTION=$1
LOG_SUFFIX=$2
if [[ "$ACTION" != "list" && "$ACTION" != "delete" ]]
then
echo "***ERROR***"
echo "Please choose 'list' or 'delete' actions and try again."
echo "***ERROR***"
exit 1
fi
TEST_ADMIN_SUFFIX='@test.firecloud.org'
QUALITY_ADMIN_SUFFIX='@quality.firecloud.org'
USER=$(gcloud auth list | grep '*' | tr -s ' ' | cut -f2 -d' ')
echo "You are currently logged in as $USER"
if [[ "$USER" != *"$TEST_ADMIN_SUFFIX" && "$USER" != *"$QUALITY_ADMIN_SUFFIX" ]]
then
echo "***ERROR***"
echo "This script is intended for running only by test-domain and quality-domain admins."
echo "Please run 'gcloud auth login' with an email ending in $TEST_ADMIN_SUFFIX or $QUALITY_ADMIN_SUFFIX and try again."
echo "***ERROR***"
exit 2
fi
# Leonardo only creates clusters in this region
CLUSTER_REGION='us-central1'
TODAY=$(date +"%Y-%m-%d")
LOG_FILE="deletions-$TODAY-$LOG_SUFFIX.csv"
for proj in `gcloud projects list --format='table(NAME)[no-heading]'`
do
# does this project have dataproc enabled? calling 'gcloud dataproc' will error if not
DATAPROC=$(gcloud services list --enabled --format='table(NAME)[no-heading]' --project $proj | grep dataproc.googleapis.com)
ERR=$?
if [ $ERR -eq 0 ]
then
for cluster in `gcloud dataproc clusters list --region $CLUSTER_REGION --format='table(NAME)[no-heading]' --project $proj`
do
# get the UTC time of the last status change for this cluster
LAST_STATUS=$(gcloud dataproc clusters describe --format='table(STATUS.stateStartTime)[no-heading]' --project $proj --region us-central1 $cluster | cut -f1 -d'.')
# NOTE! this assumes the BSD date command on OS X. Will likely need tweaks for GNU date on Linux.
SECONDS_AGO=$(( `date +%s` - `date -j -u -f '%Y-%m-%dT%H:%M:%S' $LAST_STATUS +%s` ))
DAYS_AGO=$(( $SECONDS_AGO / (60 * 60 * 24) ))
# $((evaluation)) truncates integers, so this means "within the last day"
if [ $DAYS_AGO -eq 0 ]
then
echo "Not deleting cluster $cluster in $proj ... last updated less than one full day ago"
else
if [[ "$ACTION" == "delete" ]]
then
echo "Deleting old cluster $cluster in $proj ... last updated $DAYS_AGO days ago"
yes | gcloud dataproc clusters delete --async --region $CLUSTER_REGION --project $proj $cluster
echo
echo "$proj,$cluster,$DAYS_AGO" >> $LOG_FILE
else
echo "Would delete old cluster $cluster in $proj ... last updated $DAYS_AGO days ago"
fi
fi
done
fi
done