Добавление условной логики в шаблоны 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.