Dodawanie logiki warunkowej do szablonów usługi ARM

Ukończone

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 szablonu equals(arg1, arg2). Wartość arg1 musi być równa arg2, aby funkcja mogła obliczyć wartość true. Konstrukcja condition 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ówna true lub false. Musi być dopasowywana do drugiego argumentu w funkcji equals(). W powyższym przykładzie kodu JSON wartość parametru newOrExisting ma być zgodna z ciągiem new, aby wartość funkcji była obliczona jako true.