Я работаю над шаблоном ARM и должен выполнить условное развертывание. Например, у меня есть две группы безопасности сети, определенные в переменной «подсети».
"variables": {
"subnets": [
{
"subnetname": "AzureBastionSubnet",
"nsgname": "nsg_bastion1"
},
{
"subnetname": "client-subnet",
"nsgname": "nsg_client1"
}
]
}
Группе сетевой безопасности 'nsg_bastion1' требуется особый режим с предопределенными правилами, поскольку она является группой сетевой безопасности для Azure Bastion su bnet. 'nsg_client1' получит несколько пользовательских правил, которые на данный момент не имеют значения.
Чтобы различать не-Bastion и группы безопасности Bastion-network, я создал два блока условных ресурсов:
"resources": [
// NSG (non-Bastion)
{
"condition": "[not(equals(variables('subnets')[copyIndex()].name, 'AzureBastionSubnet'))]",
"name": "[variables('subnets')[copyIndex()].nsg]",
"type": "Microsoft.Network/networkSecurityGroups",
"apiVersion": "2019-11-01",
"location": "[parameters('location')]",
"properties": {},
"copy": {
"name": "nsg-c",
"count": "[length(variables('subnets'))]"
}
},
// NSG (Bastion)
{
"condition": "[equals(variables('subnets')[copyIndex()].name, 'AzureBastionSubnet')]",
"name": "[variables('subnets')[copyIndex()].nsg]",
"type": "Microsoft.Network/networkSecurityGroups",
"apiVersion": "2019-11-01",
"location": "[parameters('location')]",
"properties": {},
"resources": [
// Bastion Security Rules .....
],
"copy": {
"name": "nsg-bastion-c",
"count": "[length(variables('subnets'))]"
}
},]
Свойство условия проверяет, называется ли su bnet AzureBastionSu bnet или нет. Я убедился, что это работает только для обоих блоков ресурсов, но это не так, когда они включены в код. Всегда выдается следующее сообщение об ошибке:
Code=InvalidTemplate; Message=Deployment template validation failed:
'The resource 'Microsoft.Network/networkSecurityGroups/AzureBastionSubnet' at line '' and column '' is defined multiple times in a template.
Буду признателен за любую помощь, заранее спасибо!