Skip to content

Instantly share code, notes, and snippets.

@allen-munsch
Last active October 22, 2023 05:13
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save allen-munsch/33d2c89e00538fc10925add74bee5736 to your computer and use it in GitHub Desktop.
Save allen-munsch/33d2c89e00538fc10925add74bee5736 to your computer and use it in GitHub Desktop.
generate a list of resources to destroy in google cloud project
#!/bin/bash
set -eux
# Thanks to: https://github.com/paulczar/gcp-cleaner/blob/master/delete-all.sh
export __region=$1
FAIL=0
waitfor() {
for job in $(jobs -p)
do
wait "$job" || let "FAIL+=1"
done
}
file='destroy-all-results.sh'
echo "#--> Destroy GKE Clusters"
gcloud container clusters list --format 'value(name,zone)' | xargs -n2 bash -c 'echo gcloud container clusters delete --quiet $0 --zone $1'
waitfor
echo "#--> Destroy VMs"
for i in a b c; do
export __zone=$__region-$i
echo "#====> ${__zone}"
gcloud compute instances list --format 'value(name)' --filter="zone:${__zone}" \
| xargs -I{} echo "gcloud compute instances delete --zone $__zone --quiet {}"
done
waitfor
echo "#--> Destroy Disks"
for i in a b c; do
export __zone=$__region-$i
echo "#====> ${__zone}"
gcloud compute disks list --format "value(name)" --filter="zone:${__zone} and -users:*" \
| xargs -I{} echo "gcloud compute disks delete --zone ${__zone} --quiet {}"
done
echo "#--> Destroy Images"
gcloud compute images list --no-standard-images --format 'value(name)' \
| xargs -I{} echo "gcloud compute images delete --quiet {}"
echo "#--> Destroy target proxies"
gcloud compute target-http-proxies list --format 'value(name)' \
| xargs -I{} echo 'gcloud compute target-http-proxies delete --quiet {}'
waitfor
gcloud compute target-https-proxies list --format 'value(name)' \
| xargs -I{} echo 'gcloud compute target-https-proxies delete --quiet {}'
waitfor
echo "#--> Destroy url maps"
gcloud compute url-maps list --format 'value(name)' \
| xargs -I{} echo 'gcloud compute url-maps delete --quiet {}'
waitfor
echo "#--> Destroy backend services"
gcloud compute backend-services list --global --format 'value(name)' \
| xargs -I{} echo 'gcloud compute backend-services delete --global --quiet {}'
waitfor
echo "#--> Destroy instance groups"
for i in a b c; do
export __zone=$__region-$i
gcloud compute instance-groups unmanaged list --filter="zone:(${__zone})" --format 'value(name)' \
| xargs -I{} echo "gcloud compute instance-groups unmanaged delete --quiet {} --zone ${__zone}"
done
waitfor
echo "#--> Destroy firewall rules"
gcloud compute firewall-rules list --format 'value(name)' \
| xargs -I{} echo 'gcloud compute firewall-rules delete --quiet {}'
echo "#--> Destroy forwarding rules"
gcloud compute forwarding-rules list --format 'value(name)' \
| xargs -I{} echo "gcloud compute forwarding-rules delete --quiet --region=${__region} {}"
gcloud compute forwarding-rules list --global --format 'value(name)' \
| xargs -I{} echo "gcloud compute forwarding-rules delete --quiet --global {}"
echo "#--> Destroy addresses"
gcloud compute addresses list --global --format 'value(name)' | \
xargs -I{} echo 'gcloud compute addresses delete --global --quiet {}'
gcloud compute addresses list --format 'value(name)' | \
xargs -I{} echo 'gcloud compute addresses delete --quiet {}'
echo "#--> Destroy routes"
gcloud compute routes list --format 'value(name)' --filter 'name!=default' | \
xargs -I{} echo 'gcloud compute routes delete --quiet {}'
waitfor
echo "#--> Destroy target pools"
gcloud compute target-pools list --format 'value(name)' \
| xargs -I{} echo 'gcloud compute target-pools delete --quiet {}'
waitfor
echo "#--> Destroy subnets"
gcloud compute networks subnets list --format 'value(name)' --filter 'name!=default' \
| xargs -I{} echo "gcloud compute networks subnets delete --quiet {} --region ${__region}"
echo "#--> Destroy networks"
gcloud compute networks list --format 'value(name)' --filter 'name!=default' \
| xargs -I{} echo "gcloud compute networks delete --quiet {}"
waitfor
echo "#--> Destroy Managed Zones"
for zone in $(gcloud dns managed-zones list --format="value(name)");do
gcloud dns record-sets list --zone "$zone" --format='value(name,type)' | grep -vE 'NS|SOA' \
| while read -r name type; do
echo "gcloud dns record-sets delete $name --type=$type --zone=$zone --quiet"
done
echo "gcloud dns managed-zones delete $zone --quiet"
done
echo "#--> Destroy Computer Router"
gcloud compute routers list --regions "${__region}" --format 'value(name)' \
| xargs -I{} echo "gcloud compute routers delete --quiet {} --region ${__region}"
echo "#--> Destroy Service Accounts"
gcloud iam service-accounts list --format 'value(name)' \
| xargs -I{} echo "gcloud iam service-accounts delete {} --quiet"
#echo "#--> Destroy GCS Buckets"
gsutil ls -b | xargs -I{} gsutil ls "{}" | xargs -I{} echo 'gsutil -m rm -r {}'
echo "#---------------------------------------"
echo "#Finished with $FAIL failures"
echo "#---------------------------------------"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment