如何解决Azure CLI-删除资源而不删除资源组
目标是删除资源组中的所有资源,而无需使用azure CLI删除它。
通过阅读文档,我可以做到:
az resource delete -g MyResourceGroup -n MyVm
因此,我假设我可以执行以下操作
az resource list --resource-group MyResourceGroup | az resource delete
Azure Powershell中的类似命令将像上面那样工作。我对CLI还是很陌生,这种方法可行吗?删除资源组中所有资源的有效方法是什么(如果我们有多种类型的资源)
解决方法
如果可以在Powershell中运行Azure CLI,则可以使用ConvertFrom-Json
将JSON结果转换为az resource list
中的对象列表,然后在每个对象ID上运行az resource delete
foreach
循环。
$resources = az resource list --resource-group myResourceGroup | ConvertFrom-Json
foreach ($resource in $resources) {
az resource delete --resource-group myResourceGroup --ids $resource.id --verbose
}
我们还可以使用Foreach-Object
在管道中完全运行此程序,这与您要执行的操作很接近。
az resource list --resource-group myResourceGroup
| ConvertFrom-Json
| Foreach-Object {az resource delete --resource-group myResourceGroup --ids $_.id --verbose}
如果您根本不想使用powershell,我们可以使用bash使用grep
和awk
自己解析JSON输出。
#!/bin/bash
resources="$(az resource list --resource-group myResourceGroup | grep id | awk -F \" '{print $4}')"
for id in $resources; do
az resource delete --resource-group myResourceGroup --ids "$id" --verbose
done
正如@Hong Ooi在评论中有帮助地指出的那样,上述内容的主要问题是某些资源依赖于其他资源,因此删除顺序很重要。一个示例是您不能在删除虚拟机之前删除虚拟机磁盘。
要解决此问题,我们可以定义删除资源的资源类型的顺序,如下面的示例哈希表所示:
$resourceOrderRemovalOrder = [ordered]@{
"Microsoft.Compute/virtualMachines" = 0
"Microsoft.Compute/disks" = 1
"Microsoft.Network/networkInterfaces" = 2
"Microsoft.Network/publicIpAddresses" = 3
"Microsoft.Network/networkSecurityGroups" = 4
"Microsoft.Network/virtualNetworks" = 5
}
然后按资源类型对资源进行排序并删除它们:
$resources = az resource list --resource-group myResourceGroup | ConvertFrom-Json
$orderedResources = $resources
| Sort-Object @{
Expression = {$resourceOrderRemovalOrder[$_.type]}
Descending = $False
}
$orderedResources | ForEach-Object {
az resource delete --resource-group myResourceGroup --ids $_.id --verbose
}
或者在一个管道中,如果您愿意:
az resource list --resource-group myResourceGroup
| ConvertFrom-Json
| Sort-Object @{Expression = {$resourceOrderRemovalOrder[$_.type]}; Descending = $False}
| ForEach-Object {az resource delete --resource-group myResourceGroup --ids $_.id --verbose}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。