使用变量时,通过 Azure CLI 将多个标签分配给资源会导致一个大标签

问题描述 投票:0回答:5

通过 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. 

这里缺少什么?

azure azure-virtual-machine azure-cli
5个回答
16
投票

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

--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
一样。


1
投票

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


1
投票

我花了 2 个小时来解决这个问题。 在 az cli 版本 2.40 上,标签不接受数组 @("tag1=value1","tag2"="value2")。

我不得不升级到 2.42,现在它按预期工作了。


0
投票

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

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

图片

Image

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

希望这有帮助。


0
投票

对于像我这样在 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]

这是假设您确切知道要应用多少个标签。在我的例子中,我们以相同的方式在某个脚本创建的所有资源上应用标签,所以我可以在整个脚本中使用这个数组。

© www.soinside.com 2019 - 2024. All rights reserved.