Azure Шаблон Resource Manager: условное развертывание - PullRequest
0 голосов
/ 13 марта 2020

Я работаю над шаблоном 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.

Буду признателен за любую помощь, заранее спасибо!

1 Ответ

0 голосов
/ 20 марта 2020

Хорошо, я думал, что мы это исправили, но пока нет ...

Даже если ваши условия являются взаимоисключающими, вы не можете иметь 2 ресурса с одинаковым идентификатором ресурса в одном шаблоне.

Полагаю, разница между ними заключается в правилах безопасности? Если это так, простейшим вариантом может быть определение 2 отдельных переменных, а затем использование оператора if () для переключения между ними в зависимости от вашего состояния.

Если вы не захотите развернуть шаблон, вы увидите, есть ли лучший вариант ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...