0

Deploying ARM Template Spec fails w/ missing Main Template parameters. I'm following Create Template Spec to create an ARM Template Spec via ARM template definition. But I hit an error when trying to deploy this:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "template_location": { "type": "string" },
    "template_name": { "type": "string" },
    "template_version": { "type": "string" }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/templateSpecs",
      "apiVersion": "2021-05-01",
      "name": "[parameters('template_name')]",
      "location": "[parameters('template_location')]",
      "properties": {
        "description": "Spec to deploy IPv4 resource with optional IP Tag.",
        "displayName": "IPv4 Template Spec"
      }
    },
    {
      "type": "Microsoft.Resources/templateSpecs/versions",
      "apiVersion": "2021-05-01",
      "name": "[format('{0}/{1}', parameters('template_name'), parameters('template_version'))]",
      "location": "[parameters('template_location')]",
      "dependsOn": ["[resourceId('Microsoft.Resources/templateSpecs', parameters('template_name'))]"],
      "properties": {
        "mainTemplate": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "cloud_suffix": { "type": "string" },
            "ip_tags": { "type": "object" },
            "resource_name": { "type": "string" },
            "resource_region": { "type": "string" }
          },
          "resources": [
            {
              "type": "Microsoft.Network/publicIPAddresses",
              "name": "[parameters('resource_name')]",
              "apiVersion": "2020-05-01",
              "location": "[parameters('resource_region')]",
              "sku": {
                "name": "Standard"
              },
              "properties": {
                "publicIPAddressVersion": "IPv4",
                "publicIPAllocationMethod": "Static",
                "idleTimeoutInMinutes": 4,
                "dnsSettings": {
                  "domainNameLabel": "[parameters('resource_name')]",
                  "fqdn": "[concat(parameters('resource_name'), '.', parameters('resource_region'), '.cloudapp', parameters('cloud_suffix'))]"
                },
                "ipTags": "[parameters('ip_tags')]"
              }
            }
          ]
        }
      }
    }
  ]
}

I receive the following Template Spec deployment failure message, where it is expecting a main template parameter to be provided:

"InvalidTemplate\",\"message\":\"Unable to process template language expressions for resource '/subscriptions//resourceGroups//providers/Microsoft.Resources/templateSpecs/public_ipv4/versions/1.0.0.0' at line '20' and column '5'. 'The template parameter 'resource_name' is not found.

I've tried a number of permutations, including providing the resource_name in the template spec deployment, but get the following error:

AzCliExecutionException: Exit Code:1, Result:unrecognized template parameter 'resource_name'. Allowed parameters: template_location, template_name, template_version

I've also tried some conditional logic like:

"name": "[if(empty(parameters('resource_name')), parameters('template_name'), parameters('resource_name'))]",

But I can't successfully deploy the ARM Template Spec. How do I unblock?

1 Answers1

0

But I can't successfully deploy the ARM Template Spec. How do I unblock?

I have tried as per your template, and I was also facing that missing main template parameters.

enter image description here

I have modified by adding parameters to the specified template check below.

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "template_location": { "type": "string" },
    "template_name": { "type": "string" },
    "template_version": { "type": "string" },
    "cloud_suffix": { "type": "string" },
    "ip_tags": { "type": "object" },
    "resource_name": { "type": "string" },
    "resource_region": { "type": "string" }
  },
  "resources": [
    {
      "type": "Microsoft.Resources/templateSpecs",
      "apiVersion": "2021-05-01",
      "name": "[parameters('template_name')]",
      "location": "[parameters('template_location')]",
      "properties": {
        "description": "Spec to deploy IPv4 resource with optional IP Tag.",
        "displayName": "IPv4 Template Spec"
      }
    },
    {
      "type": "Microsoft.Resources/templateSpecs/versions",
      "apiVersion": "2021-05-01",
      "name": "[format('{0}/{1}', parameters('template_name'), parameters('template_version'))]",
      "location": "[parameters('template_location')]",
      "dependsOn": ["[resourceId('Microsoft.Resources/templateSpecs', parameters('template_name'))]"],
      "properties": {
        "mainTemplate": {
          "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.0",
          "parameters": {
            "cloud_suffix": { "type": "string" },
            "ip_tags": { "type": "object" },
            "resource_name": { "type": "string" },
            "resource_region": { "type": "string" }
          },
          "resources": [
            {
              "type": "Microsoft.Network/publicIPAddresses",
              "name": "[parameters('resource_name')]",
              "apiVersion": "2020-05-01",
              "location": "<desired_location>", // Replace <desired_location> with the location you want to use, e.g., "eastus"
              "sku": {
                "name": "Standard"
              },
              "properties": {
                "publicIPAddressVersion": "IPv4",
                "publicIPAllocationMethod": "Static",
                "idleTimeoutInMinutes": 4,
                "dnsSettings": {
                  "domainNameLabel": "[parameters('resource_name')]",
                  "fqdn": "[concat(parameters('resource_name'), '.', parameters('resource_region'), '.cloudapp', parameters('cloud_suffix'))]"
                },
                "ipTags": "[parameters('ip_tags')]"
              }
            }
          ]
        }
      }
    }
  ]
}

  • The parameters defined within the main template are not automatically passed through the deployment of the template.
  • I have provided the main template parameters separately when deploying the template.

Check my results below :

enter image description here

enter image description here

enter image description here

Suresh Chikkam
  • 623
  • 2
  • 2
  • 6