Добавление условной логики в шаблоны ARM
При определенных условиях может понадобиться развернуть ресурс (необязательно). Распространенным случаем является добавление подсистемы балансировки нагрузки в виртуальную машину. Предположим, у вас есть веб-узел электронной коммерции и вы хотите убедиться, что сайт может выдержать увеличенный трафик в период распродажи. Подсистема балансировки нагрузки — это тот тип ресурса, который можно связать с виртуальной машиной. Добавляя правило по условию, вы включаете или отключаете подсистему балансировки нагрузки, применяемую к рассматриваемой виртуальной машине.
Вообразите следующие ситуации:
- Существующий ресурс. При указании ресурса в шаблоне и его развертывании происходит одно из двух. Ресурс развертывается либо нет, если он уже существует. Azure Resource Manager проверяет для вас существование ресурса. Это неявная реализация. Вопрос заключается в том, что вы можете использовать этот механизм в свою пользу, если вам нужно знать, как проверить наличие чего-то.
- Логика ветвления. В зависимости от параметров, передаваемых в шаблон, может потребоваться развернуть другой набор ресурсов. Это выражение называется логикой ветвления. Если этот параметр содержит значение определенного типа, выберите первую ветвь. В противном случае выберите вторую или третью ветвь для развертывания. Далее логика ветвления будет подобна.
Обе приведенные выше ситуации представляют сценарии, в которых применяется условная логика. Логика находится либо в самой системе Resource Manager, либо в том, что необходимо явно выразить.
Условное развертывание
Конструкция condition
позволяет выразить, хотите ли вы развернуть что-то развернутые или нет. Вы присоединяете к элементу ресурса свойство со значением true
или false
. Обычно в шаблоне вы найдете конструкцию, похожую condition
на следующий код JSON:
"resources" : [
{
"condition": "[parameters('shouldDeploy')]"
}
]
В приведенном выше фрагменте JSON свойство condition
добавляется в ресурс. Значение свойства будет оцениваться как значение параметра shouldDeploy
.
Оценка
Существует два способа condition
вычисления конструкции. Знание этих двух способов может повлиять на выбор способа выражения условной логики. Ниже показаны два этих разных способа.
Значение равно true или false. Например, рассмотрим следующую конструкцию:
"condition": "[parameters('deployAccount')]"
Значение
deployAccount
— это параметр, значение которого может быть передано во время развертывания или же его можно вернуть в значение по умолчанию. Независимо от используемого подхода, значение строго равно false или true. Попытка присвоить другое значение, которое не является логическим, приведет к ошибке.Выражение, которое возвращается значение true или false. Здесь вместо присвоения значения строго true/false конструкции
condition
вы используете встроенную функцию шаблонаequals(arg1, arg2)
.arg1
должен иметь значениеarg2
, чтобы функция вычисляют значение true. Теперь конструкциюcondition
можно выразить следующим образом:"condition": "[equals(parameters('newOrExisting'),'new')]"
При использовании функции
equals()
значение, передаваемое в параметре, больше не должно бытьtrue
илиfalse
. Оно должно соответствовать второму аргументу функцииequals()
. В приведенном выше примере JSON значение параметраnewOrExisting
должно совпадать со строкойnew
, чтобы функция возвращала значениеtrue
.