Ajouter une logique conditionnelle à vos modèles ARM
Vous pouvez être amené à déployer une ressource de manière facultative, dans certaines conditions. Un cas courant consiste à ajouter un équilibreur de charge sur une machine virtuelle. Supposons que vous disposiez d’un site d’e-commerce et que vous souhaitiez vérifier que le site peut résister à l’augmentation du trafic en période des soldes. Un équilibreur de charge est un type de ressource que vous pouvez associer à une machine virtuelle. En ajoutant une règle de manière conditionnelle, vous activez ou désactivez l’équilibrage de charge appliqué à la machine virtuelle en question.
Imaginez les situations suivantes :
- Ressource préexistante. Lorsque vous spécifiez une ressource dans un modèle et que vous la déployez, deux choses peuvent se produire. Soit la ressource est déployée, soit elle n’est pas déployée si elle existe déjà. La vérification de l’existence d’une ressource est une opération qu’Azure Resource Manager fait pour vous. Elle est implicite. La question est de savoir si vous pouvez utiliser ce mécanisme à votre avantage quand vous cherchez comment vérifier la préexistence d’un événement.
- Logique de branchement. Selon les paramètres que vous transmettez à un modèle, au moment du déploiement, vous souhaiterez peut-être déployer un autre ensemble de ressources. Ce que vous exprimez s’appelle logique de branchement. Si le paramètre a un certain type de valeur, sélectionnez la première branche. Sinon, sélectionnez la deuxième ou la troisième branche à déployer. La logique de branchement se poursuit de cette manière.
Les deux situations ci-dessus représentent des scénarios dans lesquels une logique conditionnelle est appliquée. La logique se situe soit dans le système Resource Manager lui-même, soit dans quelque chose que vous devez exprimer de manière explicite.
Déploiement conditionnel
La construction condition
vous permet d’indiquer si vous souhaitez déployer ou non quelque chose. Il s’agit d’une propriété, dont la valeur est true
ou false
, que vous attachez à un élément de ressource. Vous trouverez généralement une construction condition
qui ressemble au code JSON suivant dans votre modèle :
"resources" : [
{
"condition": "[parameters('shouldDeploy')]"
}
]
Dans le code JSON ci-dessus, une propriété condition
est ajoutée à une ressource. La valeur de la propriété sera évaluée comme étant la valeur du paramètre shouldDeploy
.
Évaluation
Il existe deux façons d’évaluer la construction condition
. La connaissance de ces deux méthodes peut affecter la façon dont vous choisissez d’exprimer votre logique conditionnelle. Les deux méthodes sont les suivantes :
La valeur est true ou false. Par exemple, prenons la construction suivante :
"condition": "[parameters('deployAccount')]"
deployAccount
est un paramètre dont la valeur peut être passée au moment du déploiement, ou qui peut correspondre à une valeur par défaut. Quelle que soit l’approche utilisée, la valeur est strictement false ou true. Toute tentative d’affectation d’une valeur qui n’est pas booléenne entraîne une erreur.Une expression est évaluée sur true ou false. Ici, au lieu d’affecter une valeur true/false stricte à la construction
condition
, vous utilisez à la place la fonction de modèle intégréeequals(arg1, arg2)
.arg1
doit être égal àarg2
pour que la fonction soit évaluée sur true. Votre constructioncondition
peut désormais être exprimée ainsi :"condition": "[equals(parameters('newOrExisting'),'new')]"
Avec la fonction
equals()
, la valeur que vous passez à un paramètre n’a plus besoin d’êtretrue
oufalse
. Elle doit correspondre au deuxième argument de la fonctionequals()
. Dans l’exemple JSON précédent, la valeur du paramètrenewOrExisting
doit correspondre à la chaînenew
pour que la fonction ait la valeurtrue
.