I'd like to variablise one element of an Array parameter that I'm passing to a Bicep template. Here's a cut down version of the Parameter file:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"value": "uksouth"
},
"networkSecurityGroupRules": {
"value": [
{
"name": "RDP",
"properties": {
"priority": 300,
"protocol": "TCP",
"access": "Allow",
"direction": "Inbound",
"sourceAddressPrefix": "*",
"sourcePortRange": "*",
"destinationAddressPrefix": "*",
"destinationPortRange": "3389"
}
}
]
},
"vnetName": {
"value": "Dtldevopsagent"
},
"subnetName": {
"value": "sandbox_subnet_2"
},
"virtualMachineName": {
"value": "test-db"
},
"osDiskType": {
"value": "Premium_LRS"
},
"dataDisks": {
"value": [
{
"lun": 0,
"createOption": "attach",
"caching": "ReadOnly",
"writeAcceleratorEnabled": false,
"id": null,
"name": "[concat(parameters('virtualMachineName'), '-_DataDisk_0')]'",
"storageAccountType": null,
"diskSizeGB": null,
"diskEncryptionSet": null
},
{
"lun": 1,
"createOption": "attach",
"caching": "None",
"writeAcceleratorEnabled": false,
"id": null,
"name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
"storageAccountType": null,
"diskSizeGB": null,
"diskEncryptionSet": null
}
]
},
"dataDiskResources": {
"value": [
{
"name": "[concat(parameters('virtualMachineName'),'-DataDisk_0')]",
"sku": "Premium_LRS",
"properties": {
"diskSizeGB": 32,
"creationData": {
"createOption": "empty"
}
}
},
{
"name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
"sku": "Premium_LRS",
"properties": {
"diskSizeGB": 32,
"creationData": {
"createOption": "empty"
}
}
}
]
},
}
}
The Array parameter values I'm trying to set are dataDisks.value.name and dataDiskResources.value.name. I tried using "[concat(parameters('virtualMachineName'), '-_DataDisk_0')]'" in order to set the Virtual Machine disk's name, but I got an error "The value of parameter disk.name is invalid.".
Is there a way I can pass these values to a Variable in my Bicep template file and only edit the "name" value of each of these two parameters? Or is there another way I can edit it?
CodePudding user response:
In Parameters you can't concat value . It will error out with "The value of parameter disk.name is invalid.". Instead you can use Variables in both Bicep ARM or JSON ARM.
So your ARM template will be something link below :
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string",
"defaultValue": "uksouth"
},
"networkSecurityGroupRules": {
"type": "array",
"defaultValue": [
{
"name": "RDP",
"properties": {
"priority": 300,
"protocol": "TCP",
"access": "Allow",
"direction": "Inbound",
"sourceAddressPrefix": "*",
"sourcePortRange": "*",
"destinationAddressPrefix": "*",
"destinationPortRange": "3389"
}
}
]
},
"vnetName": {
"type": "string",
"defaultValue": "Dtldevopsagent"
},
"subnetName": {
"type": "string",
"defaultValue": "sandbox_subnet_2"
},
"virtualMachineName": {
"type": "string",
"defaultValue": "test-db"
},
"osDiskType": {
"type": "string",
"defaultValue": "Premium_LRS"
}
},
"variables":{
"dataDisks": [
{
"lun": 0,
"createOption": "attach",
"caching": "ReadOnly",
"writeAcceleratorEnabled": false,
"id": null,
"name": "[concat(parameters('virtualMachineName'), '-_DataDisk_0')]",
"storageAccountType": null,
"diskSizeGB": null,
"diskEncryptionSet": null
},
{
"lun": 1,
"createOption": "attach",
"caching": "None",
"writeAcceleratorEnabled": false,
"id": null,
"name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
"storageAccountType": null,
"diskSizeGB": null,
"diskEncryptionSet": null
}
],
"dataDiskResources": [
{
"name": "[concat(parameters('virtualMachineName'),'-DataDisk_0')]",
"sku": "Premium_LRS",
"properties": {
"diskSizeGB": 32,
"creationData": {
"createOption": "empty"
}
}
},
{
"name": "[concat(parameters('virtualMachineName'),'-DataDisk_1')]",
"sku": "Premium_LRS",
"properties": {
"diskSizeGB": 32,
"creationData": {
"createOption": "empty"
}
}
}
]
},
"resources":[],
"outputs": {
"DatadiskName": {
"value": "[variables('dataDisks')[0].name]",
"type": "string"
},
"DatadiskResourceName": {
"value": "[variables('dataDiskResources')[0].name]",
"type": "string"
}
}
}
Output:
You can refer Variables in Bicep - Azure Resource Manager | Microsoft Docs & Variables in templates - Azure Resource Manager | Microsoft Docs for more information.

