通过 Azure CLI 为资源分配多个标签会在使用变量时产生一个大标签

Assigning multiple tags to a resource via Azure CLI results in one big tag when using a variable

通过 az cli (bash) 使用标签列表创建 VM 时。

首先设置这个变量:
tags='env=qa servertype=frontend Distinct=qa-frontend25 CI=Yes DataDog:True'

但是当运行下面的命令在bash

az vm create ... --tags "${tags}"

它创建一个具有键 env 和值 qa servertype=frontend Distinct=qa-frontend25 CI=Yes DataDog=True

的长标签

来自 Azure CLI documentation

--tags
     Space-separated tags in 'key[=value]' format. 

这里缺少什么?

如果你想为一个虚拟机创建多标签,你应该像这样添加参数--tags

--tags 'tag1=test1' 'tag2=test2'

结果是这样的:

它也显示在您提供的文件az vm create中。跟你有误会

--tags Space-separated tags in 'key[=value]' format. Use "" to clear existing tags.

更新

是的,你可以在一个变量中设置多标签,然后像这样在命令中获取它:

tags="tag1=test1 tag2=test2"

az vm create -g resourceGroupName -n vmName --image image --tags $tags

它将很好地工作并回答@Johan,如果您删除引号它也可以。这是一个很好的问题。实际上,该变量在 CLI 命令中的作用如下:

--tags $tags -> --tags tag1=test1 tag2=test2

就像在bash中使用echo $tags一样。

没有你想要的那么花哨,但这是我以前用过并确认仍然有效的一个。

tags1="tag1=test1"
tags2="tag2=test2"
az vm create -n MyVm2 -g MyResourceGroup --image UbuntuLTS --tags $tags1 $tags2

Image

还没有找到将标签分组到一个变量中的方法。

希望对您有所帮助。

tags="tag1=test1 tag2=test2" 的问题似乎是 Powershell 将其作为 1 个字符串传递给 az cli 命令,这样 az cli 就不会将其视为"Space-separated标签”,但作为单个标签。
对我有用的解决方案是将 $tags 定义为数组。然后它很好地扩展以供 az cli 解释。像这样:
$Tags=@("Purpose=Demo","Created=$DateShort")
az <命令> --tags $Tags