通过 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 文档
--tags
Space-separated tags in 'key[=value]' format.
这里缺少什么?
如果你想为一个虚拟机创建多标签,你应该像这样添加参数
--tags
:
--tags 'tag1=test1' 'tag2=test2'
结果是这样的:
它也显示在您提供的文件
az vm create
中。跟你有误会
--tags 空格分隔的标签,格式为“key[=value]”。使用“”清除现有标签。
更新
是的,你可以在变量中设置多标签,然后像这样在命令中获取它:
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
一样。
tags="tag1=test1 tag2=test2" 的问题似乎是 Powershell 将其作为 1 个字符串传递给 az cli 命令,这样 az cli 就不会将其视为“空格分隔的标签”,而是将其视为单个标签。
对我有用的解决方案是将 $tags 定义为数组。然后它很好地扩展以供 az cli 解释。像这样:
$Tags=@("Purpose=Demo","Created=$DateShort")
az
我花了 2 个小时来解决这个问题。 在 az cli 版本 2.40 上,标签不接受数组 @("tag1=value1","tag2"="value2")。
我不得不升级到 2.42,现在它按预期工作了。
没有你想要的那么花哨,但这是我以前用过并确认仍然有效的一个。
tags1="tag1=test1"
tags2="tag2=test2"
az vm create -n MyVm2 -g MyResourceGroup --image UbuntuLTS --tags $tags1 $tags2
还没有找到一种将标签分组到一个变量中的方法。
希望这有帮助。
对于像我这样在 VSCode/PowerShell 7 中运行 Azure cli 的人,我必须以这种方式引用每个标签,例如:
$tags=@('Customer=$Customer','SQLSERVER=$SQLSERVER','costcenter=''customer''')
az group create --name $rgName --location $Location --subscription $Subscription --tags $tags[0] $tags[1] $tags[2]
这是假设您确切知道要应用多少个标签。在我的例子中,我们以相同的方式在某个脚本创建的所有资源上应用标签,所以我可以在整个脚本中使用这个数组。