Voorwaardelijke logica toevoegen aan uw ARM-sjablonen

Voltooid

Mogelijk moet u een resource optioneel implementeren, onder bepaalde voorwaarden. Een veelvoorkomend geval is het toevoegen van een load balancer op een virtuele machine. Stel dat u een e-commercesite hebt en u ervoor wilt zorgen dat de site het toegenomen verkeer van een grote verkoop kan verwerken. Een load balancer is een type resource dat u kunt koppelen aan een VM. Door een regel voorwaardelijk toe te voegen, kunt u inschakelen of uitschakelen of de load balancer wordt toegepast op de betreffende VM.

Stelt u zich de volgende situaties voor:

  • Bestaande resource. Wanneer u een resource opgeeft in een sjabloon en deze implementeert, gebeurt er een van de volgende twee dingen. De resource wordt geïmplementeerd of de resource wordt niet geïmplementeerd als deze al bestaat. Controleren of een resource bestaat, doet Azure Resource Manager voor u. Dat gaat impliciet. De vraag is of u dit mechanisme in uw voordeel kunt gebruiken wanneer u nadenkt over hoe u kunt controleren of iets bestaat.
  • Vertakkingslogica. Afhankelijk van de parameters die u aan een sjabloon doorgeeft, is het mogelijk dat u tijdens de implementatie een andere set resources wilt implementeren. Wat u uitdrukt, is iets wat vertakkingslogica wordt genoemd. Als de parameter een bepaald waardetype heeft, selecteert u de eerste vertakking. Als dat niet het geval is, selecteert u de tweede of derde vertakking die u wilt implementeren. De vertakkingslogica gaat op deze manier verder.

Beide bovenstaande situaties zijn scenario's waarin voorwaardelijke logica wordt toegepast. De logica bevindt zich in het Resource Manager-systeem zelf of moet u expliciet uitdrukken.

Voorwaardelijke implementatie

Met de condition constructie kunt u uitdrukken of u iets wilt implementeren of niet. Het is een eigenschap met een waarde van true of false die u aan een resource-element koppelt. Meestal vindt u een condition constructie die eruitziet als de volgende JSON in uw sjabloon:

"resources" : [
  {
    "condition": "[parameters('shouldDeploy')]"
  }
]

In de bovenstaande JSON wordt de eigenschap condition toegevoegd aan een resource. De waarde van de eigenschap wordt geëvalueerd als de waarde van de parameter shouldDeploy.

Beoordeling

Er zijn twee manieren waarop de condition constructie kan worden geëvalueerd. Als u deze twee manieren kent, kan dit van invloed zijn op hoe u uw voorwaardelijke logica wilt uitdrukken. De twee verschillende manieren zijn:

  • De waarde is waar/onwaar. Kijk bijvoorbeeld eens naar de volgende constructie:

    "condition": "[parameters('deployAccount')]"
    

    De waarde deployAccount is een parameter waarvan de waarde kan worden doorgegeven tijdens de implementatie, of kan terugvallen op de standaardwaarde. Ongeacht de gebruikte methode is de waarde strikt onwaar of waar. Als u probeert een andere waarde toe te wijzen die geen Booleaanse waarde is, resulteert dit in een fout.

  • Er wordt een expressie geëvalueerd als waar/onwaar. In plaats van een strikte waar/onwaar-waarde toe te wijzen aan de condition-constructie, gebruikt u hier de ingebouwde sjabloonfunctie equals(arg1, arg2). Als arg1 gelijk is aan arg2, wordt de functie geëvalueerd als waar. Uw condition-constructie kan nu als volgt worden uitgedrukt:

    "condition": "[equals(parameters('newOrExisting'),'new')]"
    

    Als u de functie equals() gebruikt, hoeft de waarde die u doorgeeft aan een parameter niet meer true of false te zijn. De waarde moet overeenkomen met het tweede argument in de functie equals(). In het vorige JSON-voorbeeld moet de waarde van de parameter newOrExisting overeenkomen met de tekenreeks new om de functie als true te evalueren.