Voorwaardelijke logica toevoegen aan uw ARM-sjablonen
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 sjabloonfunctieequals(arg1, arg2)
. Alsarg1
gelijk is aanarg2
, wordt de functie geëvalueerd als waar. Uwcondition
-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 meertrue
offalse
te zijn. De waarde moet overeenkomen met het tweede argument in de functieequals()
. In het vorige JSON-voorbeeld moet de waarde van de parameternewOrExisting
overeenkomen met de tekenreeksnew
om de functie alstrue
te evalueren.