从 Azure 资源管理器模板中的资源组获取标签
Get tags from a Resource Group in an Azure Resource Manager Template
从一个标签定义为 tag1
的资源组(通过门户完成),我在 Visual Studio 中有以下部署模板:
{
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('websiteName'))]"
],
"tags": {
"displayName": "website AppSettings"
},
"properties": {
"Setting1": "[resourceGroup().tags.tag1]",
"Setting2": "[parameters('param2')]"
}
}
我得到这个错误:
... 'The language expression property 'tags' doesn't exist, available properties are 'id, name, location, properties'...
但是使用 https://resources.azure.com 我可以看到资源组确实有 tag
属性:
{
"id": "/subscriptions/{someguid}/resourceGroups/resourceGroup1",
"name": "resourceGroup1",
"location": "brazilsouth",
"tags": {
"tag1": "test"
},
"properties": {
"provisioningState": "Succeeded"
}
}
有没有办法获取部署模板中的资源组标签?
更新
正如@juvchan 所指出的,标签必须存在,否则会发生此错误。我创建了标签,但是当从 VisualStudio 部署模板时,标签被删除,当从门户部署时,标签被保留。这导致了不同的问题。
原因是 visual studio 项目有一个包含此行的 PowerShell 脚本:
#Create or update the resource group using the specified template file and template parameters file
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -ErrorAction Stop
但是 New-AzureRmResourceGroup
cmdlet 不保留现有标记。意识到。解决方案:如果资源组已存在,请将脚本修改为不 运行 cmdlet。
您用于获取以下资源组标记的 ARM 模板语法是正确的。
"[resourceGroup().tags.tag1]"
在部署 ARM 模板之前,您需要确保您的资源组已创建上述标签,以便获取特定标签的值。
"tags": { "tag1": "test" },
当我尝试部署 ARM 模板以获取尚未创建的资源组标签时,我能够重现您的确切错误。
当我在部署前为资源组创建标签时,我也能够在我的 ARM 模板部署中获得预期的资源组标签值。
{
"id": "/subscriptions/{id}/resourceGroups/ResourceGroupwithTag",
"name": "ResourceGroupwithTag",
"location": "southeastasia",
"tags": {
"displayName": "test"
},
"properties": {
"provisioningState": "Succeeded"
}
}
我的 ARM 模板的输出部分显示资源组标记。
"outputs": {
"rgTag": {
"type": "String",
"value": "[resourceGroup().tags.displayName]"
}
}
希望对您有所帮助!
从一个标签定义为 tag1
的资源组(通过门户完成),我在 Visual Studio 中有以下部署模板:
{
"name": "appsettings",
"type": "config",
"apiVersion": "2015-08-01",
"dependsOn": [
"[resourceId('Microsoft.Web/sites', variables('websiteName'))]"
],
"tags": {
"displayName": "website AppSettings"
},
"properties": {
"Setting1": "[resourceGroup().tags.tag1]",
"Setting2": "[parameters('param2')]"
}
}
我得到这个错误:
... 'The language expression property 'tags' doesn't exist, available properties are 'id, name, location, properties'...
但是使用 https://resources.azure.com 我可以看到资源组确实有 tag
属性:
{
"id": "/subscriptions/{someguid}/resourceGroups/resourceGroup1",
"name": "resourceGroup1",
"location": "brazilsouth",
"tags": {
"tag1": "test"
},
"properties": {
"provisioningState": "Succeeded"
}
}
有没有办法获取部署模板中的资源组标签?
更新
正如@juvchan 所指出的,标签必须存在,否则会发生此错误。我创建了标签,但是当从 VisualStudio 部署模板时,标签被删除,当从门户部署时,标签被保留。这导致了不同的问题。
原因是 visual studio 项目有一个包含此行的 PowerShell 脚本:
#Create or update the resource group using the specified template file and template parameters file
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $ResourceGroupLocation -Verbose -Force -ErrorAction Stop
但是 New-AzureRmResourceGroup
cmdlet 不保留现有标记。意识到。解决方案:如果资源组已存在,请将脚本修改为不 运行 cmdlet。
您用于获取以下资源组标记的 ARM 模板语法是正确的。
"[resourceGroup().tags.tag1]"
在部署 ARM 模板之前,您需要确保您的资源组已创建上述标签,以便获取特定标签的值。
"tags": { "tag1": "test" },
当我尝试部署 ARM 模板以获取尚未创建的资源组标签时,我能够重现您的确切错误。
当我在部署前为资源组创建标签时,我也能够在我的 ARM 模板部署中获得预期的资源组标签值。
{
"id": "/subscriptions/{id}/resourceGroups/ResourceGroupwithTag",
"name": "ResourceGroupwithTag",
"location": "southeastasia",
"tags": {
"displayName": "test"
},
"properties": {
"provisioningState": "Succeeded"
}
}
我的 ARM 模板的输出部分显示资源组标记。
"outputs": {
"rgTag": {
"type": "String",
"value": "[resourceGroup().tags.displayName]"
}
}
希望对您有所帮助!