gpt4 book ai didi

Azure CLI - 删除资源而不删除资源组

转载 作者:行者123 更新时间:2023-12-05 01:34:22 24 4
gpt4 key购买 nike

目标是删除资源组中的所有资源,而不使用 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 中的对象列表,然后运行az resource delete使用 foreach 循环对每个对象 id 进行处理。

$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自己解析JSON输出,使用grepawk .

#!/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}

关于Azure CLI - 删除资源而不删除资源组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63744842/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com