azureazure-rm-templateazure-management-groups

Resource [parameters('mgName')] Location must be an expression or 'global'


I am experimenting with Azure Management Groups Arm template.

As you can see in this link, I have this Arm template:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-08-01/managementGroupDeploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "mgName": {
      "type": "string",
      "defaultValue": "[concat('mg-', uniqueString(newGuid()))]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.Management/managementGroups",
      "apiVersion": "2021-04-01",
      "name": "[parameters('mgName')]",
      "scope": "/",
      "location": "eastus",
      "properties": {}
    }
  ],
  "outputs": {
    "output": {
      "type": "string",
      "value": "[parameters('mgName')]"
    }
  }
}

Saved as mg.json and it works fine.

Later I start experimenting with validating and testing Arm template using Test-AzTemplate (https://github.com/Azure/arm-ttk). When I run following command to test Arm Template:

Test-AzTemplate -TemplatePath .\mg.json

I get this test error:

[-] Resources Should Have Location (3 ms)
    Resource [parameters('mgName')] Location must be an expression or 'global'

enter image description here

Now when I remove "location": "eastus", line form Arm template, the test does not fail and pass the test.

My Question:

Is this location in Management Group Arm required or not required? And why it is failing when it is part of Microsoft documentation! Any idea?


Solution

  • Location is not required in Management Group. As you can check this Azure Create Management Group REST API documentation, location is not needed here.

    That's why in the template either you can remove the location or you can provide 'global' as the value, as the test command output specifies.