从Azure资源管理器模板中的资源组获取标记

时间:2017-05-05 22:12:03

标签: azure azure-resource-manager arm-template azure-resource-group

从标识为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')]"
      }
    }

我收到了这个错误:

  

...'语言表达式属性'tags'不存在,可用的属性是'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。

1 个答案:

答案 0 :(得分:1)

获取下面的资源组标记的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]"
    }
}

enter image description here

希望这有帮助!