I have an ARM template that I am trying to check whether a given database exist in a condition
, if doesn't exist those principals will not be added, my template was validated but my deployment failed because this check didn't happen. How can I achieve this for each resource?
Condition I am using: "condition": "[not(empty(resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), parameters('databaseIDPrincipals')[copyIndex()].databaseName)))]"
Also, how can I create a dependency on Data Factory if that resource doesn't exist? I tried with condition as well, but didn't work.
ARM Template:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "0.0.0.0",
"parameters": {
"clusterName": {
"type": "string"
},
"databaseIDPrincipals": {
"type": "array"
},
"databaseADFPrincipals": {
"type": "array"
},
"databaseSYNPrincipals": {
"type": "array"
},
"description": {
"type": "string",
"defaultValue": ""
}
},
"resources": [
{
"type": "Microsoft.Kusto/clusters/databases/principalAssignments",
"apiVersion": "2019-11-09",
"name": "[concat(parameters('clusterName'), '/', parameters('databaseIDPrincipals')[copyIndex()].databaseName, '/', concat(parameters('databaseIDPrincipals')[copyIndex()].principalId, parameters('databaseIDPrincipals')[copyIndex()].role))]",
"copy": {
"name": "databaseIDPrincipalsCopy",
"count": "[length(parameters('databaseIDPrincipals'))]"
},
"condition": "[not(empty(resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), parameters('databaseIDPrincipals')[copyIndex()].databaseName)))]",
"properties": {
"principalId": "[parameters('databaseIDPrincipals')[copyIndex()].principalId]",
"role": "[parameters('databaseIDPrincipals')[copyIndex()].role]",
"tenantId": "[parameters('databaseIDPrincipals')[copyIndex()].tenantId]",
"principalType": "[parameters('databaseIDPrincipals')[copyIndex()].principalType]"
},
"tags": {
"Version": "0.0.0.0",
"Description": "[parameters('description')]"
}
},
{
"type": "Microsoft.Kusto/clusters/databases/principalAssignments",
"apiVersion": "2019-11-09",
"name": "[concat(parameters('clusterName'), '/', parameters('databaseADFPrincipals')[copyIndex()].databaseName, '/', concat(parameters('databaseADFPrincipals')[copyIndex()].principalId, parameters('databaseADFPrincipals')[copyIndex()].role))]",
"copy": {
"name": "databaseADFPrincipalsCopy",
"count": "[length(parameters('databaseADFPrincipals'))]"
},
"condition": "[not(empty(resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), parameters('databaseADFPrincipals')[copyIndex()].databaseName)))]",
"properties": {
"principalId": "[reference(resourceId(parameters('databaseADFPrincipals')[copyIndex()].subscriptionId, parameters('databaseADFPrincipals')[copyIndex()].resourceGroup, 'Microsoft.DataFactory/factories', parameters('databaseADFPrincipals')[copyIndex()].principalId), '2018-06-01','Full').identity.principalId]",
"role": "[parameters('databaseADFPrincipals')[copyIndex()].role]",
"tenantId": "[parameters('databaseADFPrincipals')[copyIndex()].tenantId]",
"principalType": "[parameters('databaseADFPrincipals')[copyIndex()].principalType]"
},
"tags": {
"Version": "0.0.0.0",
"Description": "[parameters('description')]"
}
},
{
"type": "Microsoft.Kusto/clusters/databases/principalAssignments",
"apiVersion": "2019-11-09",
"name": "[concat(parameters('clusterName'), '/', parameters('databaseSYNPrincipals')[copyIndex()].databaseName, '/', concat(parameters('databaseSYNPrincipals')[copyIndex()].principalId, parameters('databaseSYNPrincipals')[copyIndex()].role))]",
"copy": {
"name": "databaseSYNPrincipalsCopy",
"count": "[length(parameters('databaseSYNPrincipals'))]"
},
"condition": "[not(empty(resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), parameters('databaseSYNPrincipals')[copyIndex()].databaseName)))]",
"properties": {
"principalId": "[reference(resourceId(parameters('databaseSYNPrincipals')[copyIndex()].subscriptionId, parameters('databaseSYNPrincipals')[copyIndex()].resourceGroup, 'Microsoft.Synapse/workspaces', parameters('databaseSYNPrincipals')[copyIndex()].principalId), '2021-06-01','Full').identity.principalId]",
"role": "[parameters('databaseSYNPrincipals')[copyIndex()].role]",
"tenantId": "[parameters('databaseSYNPrincipals')[copyIndex()].tenantId]",
"principalType": "[parameters('databaseSYNPrincipals')[copyIndex()].principalType]"
},
"tags": {
"Version": "0.0.0.0",
"Description": "[parameters('description')]"
}
}
]
}
My current deployment:
But I would like to be something like this (since no database exists yet):
I was able to find the solution by removing the not
from condition. Somehow the documentation says otherwise I believe, but anyway.
Although I still have failure in regarding ADF, which I opened a new thread.
Here is my final template:
{
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "0.0.0.0",
"parameters": {
"clusterName": {
"type": "string"
},
"databaseIDPrincipals": {
"type": "array"
},
"databaseADFPrincipals": {
"type": "array"
},
"databaseSYNPrincipals": {
"type": "array"
},
"description": {
"type": "string",
"defaultValue": ""
}
},
"resources": [
{
"condition": "[empty(resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), parameters('databaseIDPrincipals')[copyIndex()].databaseName))]",
"type": "Microsoft.Kusto/clusters/databases/principalAssignments",
"apiVersion": "2019-11-09",
"name": "[concat(parameters('clusterName'), '/', parameters('databaseIDPrincipals')[copyIndex()].databaseName, '/', concat(parameters('databaseIDPrincipals')[copyIndex()].principalId, parameters('databaseIDPrincipals')[copyIndex()].role))]",
"copy": {
"name": "databaseIDPrincipalsCopy",
"count": "[length(parameters('databaseIDPrincipals'))]"
},
"properties": {
"principalId": "[parameters('databaseIDPrincipals')[copyIndex()].principalId]",
"role": "[parameters('databaseIDPrincipals')[copyIndex()].role]",
"tenantId": "[parameters('databaseIDPrincipals')[copyIndex()].tenantId]",
"principalType": "[parameters('databaseIDPrincipals')[copyIndex()].principalType]"
},
"tags": {
"Version": "0.0.0.0",
"Description": "[parameters('description')]"
}
},
{
"condition": "[empty(resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), parameters('databaseADFPrincipals')[copyIndex()].databaseName))]",
"type": "Microsoft.Kusto/clusters/databases/principalAssignments",
"apiVersion": "2019-11-09",
"name": "[concat(parameters('clusterName'), '/', parameters('databaseADFPrincipals')[copyIndex()].databaseName, '/', concat(parameters('databaseADFPrincipals')[copyIndex()].principalId, parameters('databaseADFPrincipals')[copyIndex()].role))]",
"copy": {
"name": "databaseADFPrincipalsCopy",
"count": "[length(parameters('databaseADFPrincipals'))]"
},
"properties": {
"principalId": "[reference(resourceId(parameters('databaseADFPrincipals')[copyIndex()].subscriptionId, parameters('databaseADFPrincipals')[copyIndex()].resourceGroup, 'Microsoft.DataFactory/factories', parameters('databaseADFPrincipals')[copyIndex()].principalId), '2018-06-01','Full').identity.principalId]",
"role": "[parameters('databaseADFPrincipals')[copyIndex()].role]",
"tenantId": "[parameters('databaseADFPrincipals')[copyIndex()].tenantId]",
"principalType": "[parameters('databaseADFPrincipals')[copyIndex()].principalType]"
},
"tags": {
"Version": "0.0.0.0",
"Description": "[parameters('description')]"
}
},
{
"condition": "[empty(resourceId('Microsoft.Kusto/clusters/databases', parameters('clusterName'), parameters('databaseSYNPrincipals')[copyIndex()].databaseName))]",
"type": "Microsoft.Kusto/clusters/databases/principalAssignments",
"apiVersion": "2019-11-09",
"name": "[concat(parameters('clusterName'), '/', parameters('databaseSYNPrincipals')[copyIndex()].databaseName, '/', concat(parameters('databaseSYNPrincipals')[copyIndex()].principalId, parameters('databaseSYNPrincipals')[copyIndex()].role))]",
"copy": {
"name": "databaseSYNPrincipalsCopy",
"count": "[length(parameters('databaseSYNPrincipals'))]"
},
"properties": {
"principalId": "[reference(resourceId(parameters('databaseSYNPrincipals')[copyIndex()].subscriptionId, parameters('databaseSYNPrincipals')[copyIndex()].resourceGroup, 'Microsoft.Synapse/workspaces', parameters('databaseSYNPrincipals')[copyIndex()].principalId), '2021-06-01','Full').identity.principalId]",
"role": "[parameters('databaseSYNPrincipals')[copyIndex()].role]",
"tenantId": "[parameters('databaseSYNPrincipals')[copyIndex()].tenantId]",
"principalType": "[parameters('databaseSYNPrincipals')[copyIndex()].principalType]"
},
"tags": {
"Version": "0.0.0.0",
"Description": "[parameters('description')]"
}
}
]
}