Les templates ARM vous permettent de déployer vos infrastructures sur Azure ou Azure Stack, et ils vous évitent de nombreux clics dans le portail.
Un des retours que j’ai souvent à leur sujet c’est :
- Trop verbeux
- Trop de json
- Pas assez de méthode built-in
- …
Ce dernier point peut être en parti résolu par une fonctionnalité méconnue des templates ARM.
Pour la plupart des personnes, un template ARM ressemble à ça :
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"resources": [],
"outputs": {}
}
Et bien sachez qu’il y a une propriété de plus qui n’est pas obligatoire, et qu’on peut voir ici :
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {},
"functions": [],
"resources": [],
"outputs": {}
}
Voyons comment créer notre fonction, et oui c’est toujours du json:
{
"namespace": "woivre",
"members": {
"arrayToString": {
"parameters": [
{
"name": "input",
"type": "array"
}
],
"output": {
"type": "string",
"value": "[replace(substring(string(parameters('input')), 1, sub(length(string(parameters('input'))), 2)), '\"', '')]"
}
}
}
}
Ce que l’on peut faire dans les fonctions est assez limité, mais pour de la manipulation de données c’est très efficace.
Au global cela nous donne le template suivant :
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {},
"variables": {
"testValues": [
"One",
"Two",
"Three",
"Four"
]
},
"functions": [
{
"namespace": "woivre",
"members": {
"arrayToString": {
"parameters": [
{
"name": "input",
"type": "array"
}
],
"output": {
"type": "string",
"value": "[replace(substring(string(parameters('input')), 1, sub(length(string(parameters('input'))), 2)), '\"', '')]"
}
}
}
}
],
"resources": [],
"outputs": {
"test": {
"type": "string",
"value": "[woivre.arrayToString(variables('testValues'))]"
}
}
}
Pratique si vous ne voulez pas trop vous répéter dans vos templates.
Comments
Post comment