[英]Delete all stopped instances from Google Compute Engine
我在Google Compute Engine上有數千個VM實例。 幾乎所有它們都停止了。 如何一次刪除所有已停止的實例? (在UI上這樣做會花費一些時間,此外-UI崩潰)
謝謝!
首先從您的項目中獲取虛擬機列表:
gcloud compute instances list | grep TERMINATE
驗證是否需要刪除所有這些VM。 然后,以下命令將生成,您可以執行刪除所有命令。 您可以將輸出重定向到文件,然后運行“ bash”。 如果您感到幸運,可以隨意優化為單個命令行:)
gcloud compute instances list | grep TERMINATE | awk '{printf "gcloud comoute instances delete %s --zone %s\n", $1, $2}'
yes Y | gcloud compute instances list | awk '/TERMINATE/ {printf "gcloud compute instances delete %s --zone %s; ", $1, $2}' | bash
gcloud計算實例列表:逐一列出實例。
awk:打印出“ gcloud計算實例,刪除“ terminated_instance_name” --zone“實例所屬的區域名稱”
通過管道將此輸出傳輸到bash以使其在終端上執行;
當提示您進行確認時,“是Y”會提供“是”或“是”答案。
終止實例在gcloud控制台顯示為停止 。 假設您希望刪除終止的實例,則可以查找狀態為TERMINATED的實例。
此處的其他答案將起作用,但它們將遍歷您的所有實例。 一種更簡潔的方法是從gcloud請求經過過濾的實例列表,以便您僅迭代已知處於此狀態的實例。
最終,我發現輔助磁盤在其父實例刪除時並不總是刪除,因此我也想在清理過程中清除孤立的磁盤。
像這樣的事情應該做到(對於bash shell):
#!/bin/bash
# delete terminated instances
for terminated_instance_uri in $(gcloud compute instances list --uri --filter="status:TERMINATED" 2> /dev/null); do
terminated_instance_name=${terminated_instance_uri##*/}
terminated_instance_zone_uri=${terminated_instance_uri/\/instances\/${terminated_instance_name}/}
terminated_instance_zone=${terminated_instance_zone_uri##*/}
if [ -n "${terminated_instance_name}" ] && [ -n "${terminated_instance_zone}" ] && gcloud compute instances delete ${terminated_instance_name} --zone ${terminated_instance_zone} --delete-disks all --quiet; then
echo "deleted: ${terminated_instance_zone}/${terminated_instance_name}"
fi
done
# delete orphaned disks (filter for disks without a user)
for orphaned_disk_uri in $(gcloud compute disks list --uri --filter="-users:*" 2> /dev/null); do
orphaned_disk_name=${orphaned_disk_uri##*/}
orphaned_disk_zone_uri=${orphaned_disk_uri/\/disks\/${orphaned_disk_name}/}
orphaned_disk_zone=${orphaned_disk_zone_uri##*/}
if [ -n "${orphaned_disk_name}" ] && [ -n "${orphaned_disk_zone}" ] && gcloud compute disks delete ${orphaned_disk_name} --zone ${orphaned_disk_zone} --quiet; then
echo "deleted: ${orphaned_disk_zone}/${orphaned_disk_name}"
fi
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.