GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser le modèle Jinja2 dans Ansible Playbook

Jinja2 est un moteur de template basé sur python puissant et facile à utiliser qui est pratique dans un environnement informatique avec plusieurs serveurs où les configurations varient à chaque fois. La création de fichiers de configuration statiques pour chacun de ces nœuds est fastidieuse et peut ne pas être une option viable car elle consommera plus de temps et d'énergie. Et c'est là que les modèles entrent en jeu.

Les modèles Jinja2 sont de simples fichiers de modèles qui stockent des variables qui peuvent changer de temps à autre. Lorsque les Playbooks sont exécutés, ces variables sont remplacées par les valeurs réelles définies dans Ansible Playbooks. De cette façon, les modèles offrent une solution efficace et flexible pour créer ou modifier facilement un fichier de configuration.

Dans ce guide, nous allons nous concentrer sur la façon dont vous pouvez configurer et utiliser le modèle Jinja2 dans le playbook Ansible.

Architecture des modèles

Un fichier de modèle Jinja2 est un fichier texte qui contient des variables qui sont évaluées et remplacées par des valeurs réelles lors de l'exécution ou de l'exécution du code. Dans un fichier modèle Jinja2, vous trouverez les balises suivantes :

  • {{ }} :Ces accolades doubles sont les balises largement utilisées dans un fichier de modèle et elles sont utilisées pour incorporer des variables et finalement imprimer leur valeur lors de l'exécution du code. Par exemple, une syntaxe simple utilisant les doubles accolades est la suivante :Le {{ serveur Web }} s'exécute sur {{ nginx-version }}
  • {%  %}  :elles sont principalement utilisées pour les instructions de contrôle telles que les boucles et les instructions if-else.
  • {#  #}  :ils indiquent les commentaires qui décrivent une tâche.

Dans la plupart des cas, les fichiers de modèle Jinja2 sont utilisés pour créer des fichiers ou remplacer des fichiers de configuration sur des serveurs. En dehors de cela, vous pouvez effectuer des instructions conditionnelles telles que des boucles et si-autre déclarations, et transformer les données à l'aide de filtres et bien plus encore.

Les fichiers modèles portent le .j2 extension, ce qui implique que le modèle Jinja2 est utilisé.

Créer des fichiers modèles

Voici un exemple de fichier de modèle Jinja2 example_template.j2 que nous utiliserons pour créer un nouveau fichier avec les variables affichées

Hey guys!
Apache webserver {{ version_number }} is running on {{ server }}
Enjoy!

Ici, les variables sont {{ version_number }} &{{ serveur }

Ces variables sont définies dans un playbook et seront remplacées par des valeurs réelles dans le fichier playbook YAML example1.yml ci-dessous.

Lorsque le playbook est exécuté, les variables du fichier de modèle sont remplacées par les valeurs réelles et un nouveau fichier est soit créé, soit remplace un file.txt déjà existant dans le chemin de destination.

À partir de l'exécution du playbook, affichez la destination et notez que les variables ont été remplacées par les valeurs définies dans le fichier playbook Ansible.

Pour avoir une meilleure idée de la façon dont vous pouvez pousser les fichiers de configuration, nous allons créer un modèle Jinja2 qui crée un index.html fichier dans la racine Web ou le répertoire de documents /var/www/html sur un serveur CentOS 7. Apache est déjà en cours d'exécution et affiche la page d'accueil par défaut comme indiqué,

Le fichier de modèle, index.html.j2 apparaît comme indiqué. Notez la présence du ansible_hostname variable qui est une variable intégrée. Lorsqu'un playbook est exécuté, il sera remplacé par le nom d'hôte du serveur Web.

<html>
    <center><h1> The Apache webserver is running on {{ ansible_hostname }} </h1>
    </center>
</html>

Le fichier playbook est illustré ci-dessous.

Lorsque le playbook est exécuté, un nouveau fichier index.html est créé et comme vous pouvez le voir, la variable ansible_hostname a été remplacée par le nom d'hôte réel du serveur, dans ce cas, Centos-7.

Modèle Jinja2 avec conditions

Les modèles Jinja2 peuvent également être utilisés avec des instructions conditionnelles telles que des boucles for pour itérer sur une liste d'éléments. Considérez le Playbook example2.yml comme indiqué dans l'image ci-dessous :nous allons créer un modèle qui itérera sur la liste des modèles de voitures appelés "voitures" et imprimera le résultat dans le fichier de destination file2.txt.

La boucle for dans le fichier de modèle Jinja2 – example2_template.j2 – est comme indiqué

Lorsque le playbook est exécuté, la boucle parcourt la liste des voitures et imprime les modèles de voiture dans le fichier de destination. Vous pouvez utiliser la commande cat pour examiner la sortie et vérifier où les modèles existent dans le fichier.

Modèle Jinja2 avec filtres

Les filtres sont utilisés pour modifier l'apparence des données de sortie ou de formatage. Cela fonctionne en redirigeant le nom de la variable comme indiqué :

{{ variables | argument }}

Voyons quelques cas d'utilisation :

a) Transformer les chaînes en majuscules ou en minuscules

Par exemple, pour imprimer les valeurs de la liste précédente en caractères majuscules à l'aide du modèle, dirigez l'élément variable vers l'argument "UPPER", comme indiqué :{{ élément | supérieur }}

Lorsque le playbook est exécuté, les valeurs sont transformées en majuscules

Si les valeurs sont en minuscules dès le début, utilisez l'argument "minuscule".

{{ élément | inférieur }}

b) Utilisez des filtres de liste pour afficher les valeurs maximales et minimales

Si vous travaillez avec des tableaux ou des listes à l'intérieur du modèle comme indiqué, vous pouvez choisir d'imprimer vos valeurs préférées en fonction de certains critères.

Par exemple, pour imprimer la valeur minimale d'une liste, passez toute la liste au champ 'min ’ filtre comme indiqué.

{{ [ 100, 37, 45, 65, 60, 78 ] | min }}     =>   37

Pour obtenir la valeur maximale, utilisez le filtre "max".

{{ [ 100, 37, 45, 65, 60, 78 ] | max }}     =>   100

Vous pouvez obtenir des valeurs uniques à partir d'une liste de valeurs en double dans un tableau à l'aide du filtre unique comme indiqué :

{{ [ 3, 4, 3, 3, 4, 2, 2 ] | unique }}     =>   3,4,2

c) Remplacer une valeur de chaîne par une autre

De plus, vous pouvez remplacer une chaîne par une nouvelle en utilisant l'argument de remplacement comme indiqué

{{ "Bonjour les gars" | remplacer ("les gars", "le monde") }} => Bonjour le monde

Dans l'exemple ci-dessus, la chaîne guy sera remplacée par world et l'instruction se lira désormais :

Bonjour le monde

Ce ne sont que quelques filtres. Il existe des tonnes de filtres intégrés que vous pouvez utiliser pour manipuler la sortie de l'exécution d'Ansible Playbook.

Le modèle Jinja2 est une solution idéale pour gérer les variables dynamiques dans les fichiers de configuration. C'est une option beaucoup plus efficace que la modification manuelle des valeurs, ce qui prend souvent beaucoup de temps et peut être assez fastidieux. Vos commentaires sur cet article sont les bienvenus.

Lire aussi  :Comment remplacer les chaînes et les lignes par Ansible

Lire aussi  :  Comment créer des rôles Ansible et les utiliser dans Playbook


Linux
  1. Comment créer un fichier dans Ansible

  2. Comment créer un Playbook Ansible

  3. Comment passer des variables supplémentaires à un playbook Ansible

  4. Comment utiliser le type de fichier dans Vim ?

  5. Comment utiliser chmod pour modifier l'autorisation d'un fichier ?

Comment définir et utiliser des gestionnaires dans des playbooks Ansible

Comment créer et exécuter un fichier Playbook Ansible

Comment utiliser le modèle Jinja2 dans Ansible

Comment utiliser Ansible pour configurer Vim

Comment utiliser la commande lsof sous Linux

Comment utiliser gzip sous Linux ?