Я пытаюсь развернуть виртуальную сеть, подсети и группы безопасности сети из объекта параметра
"vnetSettings": {
"value": {
"name": "myVnet",
"addressPrefixes": [
{
"name": "addressSpace",
"addressPrefix": "172.25.196.0/22"
}
],
"subnets": [
{
"name": "data-subnet",
"subnetPrefix": "172.25.196.0/27"
},
{
"name": "app-subnet",
"subnetPrefix": "172.25.196.32/27"
},
{
"name": "web-subnet",
"subnetPrefix": "172.25.196.64/27"
},
{
"name": "pridmz-subnet",
"subnetPrefix": "172.25.196.96/27"
},
{
"name": "pubdmz-subnet",
"subnetPrefix": "172.25.196.128/27"
},
{
"name": "AzureFirewallSubnet",
"subnetPrefix": "172.25.196.160/28"
}
]
}
}
Из этого объекта параметра мне нужно выполнить итерацию по каждому элементу и создать виртуальную сеть, подсети и NSG и назначить каждому su bnet NSG - это нормально, за исключением того, что мне нужно исключить создание NSG для брандмауэра Azure и исключить необходимость назначать брандмауэр su bnet NSG
Итак, я ' m пытается найти способ сделать это в copyIndex
{
"apiVersion": "2017-06-01",
"type": "Microsoft.Network/networkSecurityGroups",
"copy": {
"name": "iterator",
"count": "[length(parameters('VNetSettings').subnets)]"
},
"name": "[if(equals(parameters('VNetSettings').subnets[copyIndex()].name, 'AzureFirewallSubnet'), json('null'), toUpper(concat(parameters('VNetSettings').name , '-', resourceGroup().location, '-', parameters('VNetSettings').subnets[copyIndex()].name, '-nsg')))]",
"location":"[resourceGroup().location]",
"properties": {
"securityRules": []
}
},
Эти ошибки с
'The template resource '[if(equals(parameters('VNetSettings').subnets[copyIndex()].name, 'AzureFirewallSubnet'), json('null'), toUpper(concat(parameters('VNetSettings').name , '-', resourceGroup().location, '-', parameters('VNetSettings').subnets[copyIndex()].name, '-nsg')))]' at line '1' and column '467' is not valid: Evaluation result of language expression '[if(equals(parameters('VNetSettings').subnets[copyIndex()].name, 'AzureFirewallSubnet'), json('null'), toUpper(concat(parameters('VNetSettings').name , '-', resourceGroup().location, '-', parameters('VNetSettings').subnets[copyIndex()].name, '-nsg')))]' is type 'Null', expected type is 'String'
Я могу обойти эту ошибку, передав строку, а не JSON ( 'null'), который затем создает все группы безопасности сети, но проблема, с которой я сталкиваюсь, заключается в повторении copyIndex для подсетей.
{
"apiVersion": "2020-04-01",
"name": "[toUpper(concat(parameters('VNetSettings').name, '-', resourceGroup().location, '-vnet'))]",
"dependsOn": [
"iterator"
],
"type": "Microsoft.Network/virtualNetworks",
"location":"[resourceGroup().location]",
"properties": {
"addressSpace": {
"addressPrefixes": [
"[parameters('virtualNetworkaddressSpace')]"
]
},
"copy":[
{
"name": "subnets",
"count":6,
"input": {
"name": "[if(equals(parameters('VNetSettings').subnets[copyIndex('subnets')].name, 'AzureFirewallSubnet'), variables('azureFirewallSubnetName'), concat(parameters('VNetSettings').name,'-', resourceGroup().location, '-', parameters('VNetSettings').subnets[copyIndex('subnets')].name))]",
"properties": {
"addressPrefix": "[parameters('VNetSettings').subnets[copyIndex('subnets')].subnetPrefix]",
"networkSecurityGroup": {
"id": "[if(equals(parameters('VNetSettings').subnets[copyIndex('subnets')].name, 'AzureFirewallSubnet'), json('null'), resourceId('Microsoft.Network/networkSecurityGroups/', concat(parameters('VNetSettings').name, '-', resourceGroup().location, '-', parameters('VNetSettings').subnets[copyIndex('subnets')].name, '-nsg')))]"
},
Надеюсь, это имеет смысл, и кто-то может помочь?
Спасибо