【问题标题】:How to assign Tags to all VMs only in a resource group using Azure cli如何使用 Azure cli 仅将标签分配给资源组中的所有 VM
【发布时间】:2018-03-29 04:08:23
【问题描述】:

我正在尝试编写一个 Azure CLI 脚本,该脚本使用服务主体将我登录到门户,选择订阅,然后仅在每个资源组中标记该订阅中的 VM。

az login -u $service_principal_ID -p $service_principal_password --service-principal --tenant $tenant_ID

az account set --subscription $subID

az resource tag --resource-group $rg \
--tags tags.project=$project tags.owner=$owner tags.environment=$env \
--resource-type "Microsoft.Compute/virtualMachines" \
--output tsv

运行此语句时,Azure 给我一个错误 --name is missing,但我不想一一标记虚拟机。

有什么想法吗?

【问题讨论】:

    标签: azure tags virtual-machine command-line-interface


    【解决方案1】:

    我还没有实际尝试过(我不需要任何资源标记;))

    但这样的事情应该能让你工作。

    基本上,您需要传递该命名参数,唯一的方法是首先解析 VM 列表。

    sample=$(az vm list --resource-group $rg )
    for row in $(echo "${sample}" | jq -r '.[] | @base64'); do
        _jq() {
        echo ${row} | base64 --decode | jq -r ${1}
        }
    
    VMName=$(_jq '.name')
    
    az resource tag --resource-group $rg \
    --tags tags.project=$project tags.owner=$owner tags.environment=$env \
    --resource-type "Microsoft.Compute/virtualMachines" \
    --name $VMName \
    --output tsv
    
    done
    

    完全不相关,这可能应该被删除 - 但该死,我确实想念这些东西在 PowerShell 中是多么容易。

    【讨论】:

    • 我试过了,它卡住了。我有一个包含大约 6 个虚拟机的资源组,它只标记前 2 个,然后卡在 #2 上。仅供参考,我正在使用 Jenkins 来自动执行此操作。
    • @fumes007 没有更多信息很难回答,可能值得创建另一个问题,并参考这个问题,显示您正在使用的代码以及任何错误消息 - 所有这些爵士乐
    【解决方案2】:

    将所需的标签添加到资源组:

    az group update -n $rg \
    --set tags.project=$project tags.owner=$owner tags.environment=$env
    

    然后将该资源组中的所有标签应用到每个子资源:

    do
      jsontag=$(az group show -n $rg --query tags)
      t=$(echo $jsontag | tr -d '"{},' | sed 's/: /=/g')
      r=$(az resource list -g $rg --query [].id --output tsv)
      for resid in $r
      do
        az resource tag --tags $t --id $resid
      done
    done
    

    【讨论】:

    • 基于此,我看到它为RG中的所有资源分配了标签?
    • @fumes007 - 是的!这不是你要的吗?
    • 我只想标记 RG 中的 VM,并根据我指定的标记停止/重新启动这些 VM。停止/启动的示例脚本az vm deallocate --ids $(az resource list --tag Restart=$TAG_RESTART --query "[?type=='Microsoft.Compute/virtualMachines'].id" -o tsv) 我还想将报告输出到 Excel 电子表格
    • @fumes007 - 是的,我发布的代码 sn-p 将为 RG 中的所有资源添加标签。因此,只需将其添加到您的脚本中,您就可以开始了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多