Я уверен, что вам удалось найти какое-то решение этой проблемы некоторое время назад ... однако у меня есть решение, которое хорошо работает для такого рода вещей ... хотя оно не использует условные выражения.
В PowerShell создайте несколько хеш-таблиц, например ...
# Resource group Hashtables.
$rgDev = @{
Name = "DEV-RG"
SubscriptionId = $subNonProd
Location = "desiredregion"
}
$rgUat = @{
Name = "UAT-RG"
SubscriptionId = $subNonProd
Location = "desiredregion"
}
#Vnet Hashtables
$vnetDev = @{
ResourceGroup = $rgDev
VnetName = "Dev-vnet"
CIDR = @('x.x.x.x/27')
Subnets = @(
@{
Name = "Dev-Web-subnet"
CIDR = "y.y.y.y/28"
},
@{
Name = "Dev-DB-subnet"
CIDR = "z.z.z.z/28"
})
}
$vnetUat = @{
ResourceGroup = $rgUat
VnetName = "UAT-vnet"
CIDR = @('f.f.f.f/27')
Subnets = @(
@{
Name = "UAT-Web-subnet"
CIDR = "g.g.g.g/28"
},
@{
Name = "UAT-DB-subnet"
CIDR = "h.h.h.h/28"
})
}
Далее я собираю хеш-таблицы в массив и выполняю foreach по всему лоту. У меня есть небольшой скрипт, который переключает мой контекст, чтобы я мог развернуть несколько подписок в одном скрипте типа начальной загрузки.
$vnets = @($vnetDev, $vnetUat)
ForEach ($vn in $vnets) {
$deploymentName = $vn.VnetName + "_Deployment."
.\SwitchSubscription.ps1 -subName $vn.ResourceGroup.SubscriptionName -subId $vn.ResourceGroup.SubscriptionId
New-AzureRmResourceGroupDeployment -Name $deploymentName `
-ResourceGroupName $vn.ResourceGroup.Name `
-TemplateFile .\JSONFiles\Vnets.json `
-vnet $vn
}
Раздел параметров шаблона ARM выглядит следующим образом ...
"parameters": {
"vnet": {
"type": "object",
}
},
тогда раздел ресурсов выглядит следующим образом ...
{
"name": "[concat(parameters('vnet').VnetName)]",
"type": "Microsoft.Network/virtualNetworks",
"apiVersion": "2017-10-01",
"location": "[resourceGroup().location]",
"tags": "[parameters('vnet').tags]",
"properties": {
"addressSpace": {
"addressPrefixes": "[parameters('vnet').CIDR]"
},
"copy": [
{
"name": "subnets",
"count": "[length(parameters('vnet').Subnets)]",
"input": {
"name": "[parameters('vnet').Subnets[copyIndex('Subnets')].Name]",
"properties": {
"addressPrefix": "[parameters('vnet').Subnets[copyIndex('Subnets')].CIDR]"
}
}
}
]
}
}
]
Итак, все, что это делает, это передает объект в шаблон ARM, который может иметь один Vnet с одной или несколькими подсетями, и создавать их все.
Надеюсь, это поможет кому-то другому, когда / если он обнаружит это, когда гуглит.
Приветствия
Дэйв.
:)