Модуль BICEP развертывает виртуальную сеть, но не NSG на основе оператора if

#azure #arm-template #infrastructure-as-code #azure-bicep

Вопрос:

У меня есть базовый модуль BICEP, который развертывает виртуальную сеть с подсетями и NSGS. 1 из подсетей предназначен для брандмауэра azure. Подсеть брандмауэра azure не может быть подключена к NSG, поэтому я поставил условие не развертывать nsg в подсети брандмауэра azure, но я не могу заставить это работать. Когда он запускается, он возвращает ошибку:

       {
    "code": "MissingJsonReferenceId",
    "message": "Value for reference id is missing. Path properties.subnets[6].properties.networkSecurityGroup."
  },
 

Условие таково

 id: VNetSettings.subnets[j].unique == false  ?  json('{"id": "[resourceId('Microsoft.Network/networkSecurityGroups', concat('nsg-snet-${vNetName}-${VNetSettings.subnets[j].name}'))]"') : json('null')
 

Условие оценивает VnetSettings.subnets.unique == false , и если false затем будет развернута nsg, но если VNetSettings.subnets.unique == true , то это должно быть json('null') и не развертывать NSG.

false подсети развертывают и подключают NSG, но true при этом возникает ошибка:

     "code": "MissingJsonReferenceId",
    "message": "Value for reference id is missing. Path properties.subnets[6].properties.networkSecurityGroup."
  },
 

Пожалуйста, кто-нибудь, помогите 🙁

Спасибо

Ответ №1:

Теперь у меня это работает. Хитрость в том, чтобы поставить условие на properties объекте, а не внутри networkSecurityGroup объекта