Удалите каждую виртуальную машину, включая группу ресурсов в Azure.

avatar
Nishant Bhagat
8 августа 2021 в 19:17
87
1
0

Я пытаюсь создать сценарий bash для удаления каждой виртуальной машины со связанной с ней группой ресурсов, доступной во всех подписках. Однострочный код.

Итак, я сделал вот что:

for i in `az account list --query "[].{id:id}" --output tsv`; do az account set --subscription $i; VMS=`az vm list --query [].name --output tsv`; tLen=${#VMS[@]} ; for (( i=0; i<${tLen}; i++ )); do RG=`az vm list --query [$i].resourceGroup --output tsv`; az vm delete --ids $(az vm list -g ${RG} --query "[].id" -o tsv) --yes --no-wait ; az group delete --name ${RG} --yes --no-wait; done ; done

Ну, работает, но не идеально. Остались некоторые виртуальные машины и связанные с ними группы ресурсов. Итак, я подумал загрузить код здесь на stack-overflow. Что ж, может кому пригодится, да и мне тоже нужна помощь.

Итак, кто-нибудь может мне помочь? Пожалуйста, просмотрите мой код, я так хорошо умею кодировать. Мне нужен совет эксперта здесь. Заранее спасибо :)

Источник
Cyrus
8 августа 2021 в 19:19
0

Пожалуйста, ознакомьтесь с Как создать минимальный, полный и проверяемый пример.

Gaurav Mantri
9 августа 2021 в 02:15
1

Вместо того, чтобы удалять виртуальную машину и содержащую ее группу ресурсов по отдельности, вы можете просто удалить группу ресурсов. Это также удалит виртуальную машину. Нет необходимости сначала удалять виртуальную машину, а затем удалять группу ресурсов.

Nishant Bhagat
9 августа 2021 в 08:39
0

@GauravMantri Спасибо за подсказку. Я подправил свой код, и теперь он работает отлично. Я буду публиковать код в ответах.

Ответы (1)

avatar
Nishant Bhagat
9 августа 2021 в 08:43
0

Я изменил свой код, и теперь он работает идеально, как я и хотел. Этот код удаляет все группы ресурсов, доступные в каждой подписке на учетную запись Azure.

for i in `az account list --query "[].{id:id}" --output tsv`; do az account set --subscription $i; for j in `az vm list --query [].resourceGroup --output tsv`; do az group delete --name $j --yes --no-wait; done ; done

Он работает как с Powershell, так и с Bash:

echo 'for i in `az account list --query "[].{id:id}" --output tsv`; do az account set --subscription $i; for j in `az vm list --query [].resourceGroup --output tsv`; do az group delete --name $j --yes --no-wait; done ; done' > deletevms.sh && bash deletevms.sh