Dodawanie logiki warunkowej do szablonów usługi ARM
W pewnych warunkach może być konieczne opcjonalne wdrożenie zasobu. Często do maszyny wirtualnej dodaje się moduł równoważenia obciążenia. Załóżmy, że masz witrynę do handlu elektronicznego i chcesz upewnić się, że wytrzyma zwiększony ruch sieciowy w związku z dużą sprzedażą. Moduł równoważenia obciążenia to typ zasobu, który można powiązać z maszyną wirtualną. Dodając regułę warunkowo, możesz włączyć lub wyłączyć moduł równoważenia obciążenia stosowany w danej maszynie wirtualnej.
Wyobraź sobie następujące sytuacje:
- Istniejący zasób. Gdy określisz w szablonie zasób oraz wdrożysz go, dojdzie do jednej z dwóch sytuacji. Zasób został wdrożony lub nie wdrożono go, jeśli już istnieje. Usługa Azure Resource Manager sprawdza, czy zasób istnieje. Odbywa się to niejawnie. Powstaje pytanie, czy można skorzystać z tego mechanizmu, kiedy zastanawiamy się nad sposobem na sprawdzenie wcześniejszej obecności elementu.
- Rozgałęzianie logiki. W zależności od parametrów przekazywanych do szablonu w czasie wdrażania można zamierzać wdrażanie różnych zestawów zasobów. Takie wyrażenie jest nazywane rozgałęzianiem logiki. Jeśli parametr ma określony typ wartości, wówczas wybierz pierwszą gałąź. W przeciwnym razie wybierz drugą lub trzecią gałąź do wdrożenia. Logika rozgałęzienia jest kontynuowana w ten sposób.
Obie powyższe sytuacje reprezentują scenariusze, w których jest stosowana logika warunkowa. Logika jest albo zawarta w samym systemie Resource Manager, albo jest czymś co trzeba jawnie wyrazić.
Wdrożenie warunkowe
Konstrukcja condition
umożliwia wyrażenie, czy chcesz coś wdrożyć, czy nie. Jest to właściwość o wartości true
lub false
, która jest dołączana do elementu zasobów. Zazwyczaj w szablonie można znaleźć konstrukcję podobną condition
do następującego kodu JSON:
"resources" : [
{
"condition": "[parameters('shouldDeploy')]"
}
]
W powyższym kodzie JSON właściwość condition
jest dodawana do zasobu. Wartość właściwości zostanie obliczona jako wartość parametru shouldDeploy
.
Ocena
Istnieją dwa sposoby condition
oceny konstrukcji. Informacje na temat tych dwóch sposobów mogą mieć wpływ na sposób, w jaki użytkownik wyraża logikę warunkową. Istnieją dwa różne sposoby:
Wartość jest równa true/false. Rozważmy na przykład następującą konstrukcję:
"condition": "[parameters('deployAccount')]"
Wartość
deployAccount
to parametr, którego wartość może zostać przekazana w czasie wdrażania lub może przyjąć wartość domyślną. Niezależnie od użytego podejścia wartością jest konkretnie false lub true. Próba przypisania innej wartości, która nie jest wartością logiczną, doprowadzi do wystąpienia błędu.Istnieje wyrażenie obliczające wartość true/false. W tym przypadku zamiast przypisywać ścisłą wartość true/false do konstrukcji
condition
, stosowana jest wbudowana funkcja szablonuequals(arg1, arg2)
. Wartośćarg1
musi być równaarg2
, aby funkcja mogła obliczyć wartość true. Konstrukcjacondition
może teraz być wyrażona w następujący sposób:"condition": "[equals(parameters('newOrExisting'),'new')]"
Używając funkcji
equals()
, wartość przekazywana do parametru nie musi już być równatrue
lubfalse
. Musi być dopasowywana do drugiego argumentu w funkcjiequals()
. W powyższym przykładzie kodu JSON wartość parametrunewOrExisting
ma być zgodna z ciągiemnew
, aby wartość funkcji była obliczona jakotrue
.