Home > OS >  Use of ARM template function "reference" in "dependsOn" fails with error: The te
Use of ARM template function "reference" in "dependsOn" fails with error: The te

Time:02-06

I am using output from a linked template in my ARM template for deployment below are my templates :

  1. Link template :
"resources": [
        {
            "name": "[variables('clusterName')]",
            "type": "Microsoft.Kusto/clusters",
            "sku": {
                "name": "Standard_D13_v2",
                "tier": "Standard",
                "capacity": 2
            },
            "apiVersion": "2020-09-18",
            "location": "[parameters('location')]",
            "properties": {
                "trustedExternalTenants": [],
                "optimizedAutoscale": {
                    "version": 1,
                    "isEnabled": true,
                    "minimum": 2,
                    "maximum": 10
                },
                "enableDiskEncryption": false,
                "enableStreamingIngest": true,
                "enablePurge": false,
                "enableDoubleEncryption": false,
                "engineType": "V3"
            }
        }
    ],
    "outputs": {
    "clusterNameResult": {
      "type": "string",
      "value": "[variables('clusterName')]"
    }
  }
  1. Template using this linked template:
"resources": [
        {
            "type": "Microsoft.Resources/deployments",
            "apiVersion": "2021-04-01",
            "name": "linkedTemplate",
            "properties": {
                "mode": "Incremental",
                "templateLink": {
                "uri": "[concat(uri(deployment().properties.templateLink.uri, 'Dataexplorer_Deployment_Template.json'))]",
                "contentVersion": "1.0.0.0"
                }
            },
            "copy": {
                "name": "databasecopy",
                "count": "[length(parameters('databaseNameList'))]"
              }
        },
        {
            "type": "Microsoft.Kusto/Clusters/Databases",
            "apiVersion": "2020-09-18",
            "name": "[variables('databaseNameList').databaseNames[copyIndex()]]",
            "location": "[parameters('location')]",
            "dependsOn": [
                "[resourceId('Microsoft.Kusto/Clusters',  reference('linkedTemplate').outputs['clusterNameResult'].value)]"
            ],
            "kind": "ReadWrite",
            "properties": {
                "softDeletePeriod": "P5D",
                "hotCachePeriod": "P1D"
            },
            "copy": {
                "name": "databasecopy",
                "count": "[length(parameters('databaseNameList'))]"
              }
        },
        {
            "type": "Microsoft.Kusto/Clusters/Databases/PrincipalAssignments",
            "apiVersion": "2020-09-18",
            "name": "[variables('databaseNameList').databaseNames[copyIndex()]]",
            "dependsOn": [
                "[resourceId('Microsoft.Kusto/Clusters/Databases', variables('databaseNameList').databaseNames[copyIndex()])]",
                "[resourceId('Microsoft.Kusto/Clusters', reference('linkedTemplate').outputs['clusterNameResult'].value)]"
            ],
            "properties": {
                "principalId": "[email protected]",
                "role": "Viewer",
                "principalType": "User",
                "tenantId": "523547f7-9d12-45c5-9g15-2ysb44a3r2m4"
            },
            "copy": {
                "name": "databasecopy",
                "count": "[length(parameters('databaseNameList'))]"
              }
        }

    ]

I am refering to the cluster name deployed through template 1 in template 2 , specified at "dependsOn" but it fails with error The template resource 'adx-jtcjiot-dev-sea-adxdb001' at line '84' and column '9' is not valid: The template function 'reference' is not expected at this location. Has anyone used reference functions for deployment like this, I want to keep cluster and database deployment separately as database creation might occur often at the same time i don't want to hardcode the clustername in the database template. Is there any other way to do it or to resolve this error.

Thanks in advance!

CodePudding user response:

I'm not sure I understand why you want to keep those separate in the first place.

What about simply putting them together as in the example here: https://docs.microsoft.com/en-us/azure/data-explorer/automated-deploy-overview#step-3-create-an-arm-template-to-deploy-the-cluster?

CodePudding user response:

eventually dependsOn doesn't accept reference functions as appeared in the error message. My second thought was to find out resource name using resourceID function but apparently that's not supported . so I have defined the server name in variables and using it for database "name field"

CodePudding user response:

Because you're depending on a resource being deployed in the same deployment, you don't need to define a resource id, or use a reference. You can just use the name of the resource deployment (as defined in the arm template), like this:

"dependsOn": [
    "linkedTemplate"
]

That will ensure that the deployment of the database will not start until the deployment of the Kusto cluster has been completed.

  •  Tags:  
  • Related