1-07 Fonctions intégrées à Terraform
Objectifs
- Connaître et savoir utiliser les fonctions intégrées dans Terraform
Les fonctions dans Terraform
Documentation:
Terraform intègre de nombreuses fonctions mais ne permet pas l'ajout de fonctions utilisateurs.
Les fonctions Terraform sont des blocs de code intégrés et réutilisables qui exécutent des tâches spécifiques dans les configurations Terraform.
Collection : fonctions pour manipuler des structures - tableaux, objets, listes et maps
Ces fonctions sont courantes pour faire des créations, extractions et conversions de structures complexes.
Codage : fonctions d'encodage et de décodage qui traitent de divers formats - base64, texte, JSON, YAML, etc.
Utiles pour transformer un contenu d'un format vers un autre.
Système de fichiers : fonctions pour effectuer des opérations essentielles sur les fichiers
Peu de fonctions, car contrairement à ansible Terraform opère sur des API réseaux et les accès au système de fichiers sont limités.
Numérique : fonctions pour effectuer des opérations mathématiques sur des valeurs numériques
Une dizaine de fonctions pour faire des opérations mathématiques de base.
Date et heure : fonctions de manipulation de la date et de l'heure
Quelques fonctions pour manipuler des timestamps.
Hachage et crypto : fonctions qui fonctionnent avec des mécanismes de hachage et cryptographiques
En cas de besoin, on peut vérifier une checksum ou obtenir un UUID
Réseau IP : fonctions pour travailler avec les plages CIDR
Utile pour calculer des IPs ou obtenir des CIDR
Conversion de types : fonctions pour convertir les types de données
Des fonctions utiles pour valider le contenu d'une variable ou la transformer à chaud
Une sélection de fonctions couramment utilisées
format(string_format, unformatted_string)
La fonction format est similaire à la fonction printf en C et fonctionne en formatant un certain nombre de valeurs selon une chaîne de spécification.
Il peut être utilisé pour créer différentes chaînes pouvant être utilisées conjointement avec d'autres variables. Voici un exemple d'utilisation de cette fonction :
> format("%s_%s_%d", "foo", "bar", 2)
"foo_bar_2"
formatlist(string_format, unformatted_list)
La fonction formatlist utilise la même syntaxe que la fonction format mais modifie les éléments d'une liste.
Voici un exemple d'utilisation de cette fonction :
> formatlist("Bonjour, %s!", ["A", "B", "C"])
tolist([
"Bonjour, A!",
"Bonjour, B!",
"Bonjour, C!",
])
length (liste / chaîne / carte)
Renvoie la longueur d'une chaîne, d'une liste ou d'une carte.
> length([10, 20, 30])
3
join (séparateur, liste)
Cette fonction crée une chaîne en concaténant tous les éléments d'une liste et un séparateur. Par exemple, considérez le code suivant :
> join(",", ["a", "b", "c"])
"a,b,c"
flatten (liste)
Dans Terraform, vous pouvez travailler avec des types de données complexes pour gérer votre infrastructure. Dans ces cas, vous souhaiterez peut-être aplatir une liste de listes en une seule liste.
> flatten([[1, 2, 3], [4, 5], [6]])
[
1,
2,
3,
4,
5,
6,
]
keys(map) & values(map)
> keys({ "a": 1, "b": 2 })
[
"a",
"b",
]
> values({ "a": 1, "b": 2 })
[
1,
2,
]
slice(list, startindex, endindex)
> slice([1, 2, 3, 4], 2, 4)
[
3,
4,
]
range(...)
Crée une plage de nombres :
- un argument (limite)
- deux arguments (valeur_initiale, limite)
- trois arguments (initial_value, limit, step)
> range(14)
> range(10,26,2)
lookup(map, key, fallback_value)
Récupère une valeur d'une map à l'aide de sa clé.
Si la valeur n'est pas trouvée, il renverra la valeur par défaut à la place.
> lookup({ "a": 1, "b": 2 }, "c", 3)
3
concat(listes)
Prend deux ou plusieurs listes et les combine en une seule.
> concat([1, 2, 3], [4, 5, 6])
merge(maps)
Fusionne des maps.
> merge( {"a": 1, "b": 2 },{"c": 3, "z": 26 })
file(path_to_file)
Stocke le contenu d'un fichier dans une variable.
> file("/etc/resolv.conf")
templatefile(path, vars)
Renvoie le contenu d'un fichier avec des interpolations de variables.
## $cat /tmp/template
## Hello ${name}
> templatefile("/tmp/template", {"name": "world"})
(json|yaml)(decode|encode)(string|value)
Effectue des conversions depuis et vers les formats YAML / JSON.
> jsonencode({"a":1,"file":2}
Rappel des objectifs
- Connaître et savoir utiliser les fonctions intégrées dans Terraform