Comment utiliser un module de modèle ANSIBL

Comment utiliser un module de modèle ANSIBL
Le anible modèle Le module est principalement utilisé pour copier des fichiers du client ANSIBLE (où ANIBLE est installé) aux hôtes anible (gérés par ANSIBLE). L'avantage de l'utilisation du modèle module, plutôt que le copie module, c'est que l'ANSIBLE modèle Le module peut utiliser le langage de modèles Jinja2. Jinja2 est un puissant langage de modèles Python à travers lequel vous pouvez générer des fichiers de configuration, des pages Web, etc. Vous pouvez également utiliser des variables, des boucles et des conditions de faits ANSIBLE dans vos modèles Jinja2.

Cet article vous montrera comment utiliser l'ANSIBLE modèle module et quelques bases de la langue des modèles Jinja2. Alors, commençons!

Conditions préalables


Si vous souhaitez essayer les exemples de cet article:

1) Vous devez faire installer un anible sur votre ordinateur.

2) Vous devez avoir au moins un hôte Ubuntu / Debian ou un hôte CENTOS / RHEL 8 configuré pour ANSIBLE AUTOMATION.

Il existe de nombreux articles sur Linuxhint dédiés à l'installation de Ansible et à la configuration des hôtes pour ANSIBLE AUTOMATION. Vous pouvez également les vérifier, si nécessaire.

Configuration d'un répertoire de projet ANSIBLE

Avant de progresser, c'est une bonne idée de créer une structure de répertoire de projet, juste pour garder les choses un peu organisées.

Pour créer un répertoire de projet modèle-Demo / et tous les sous-répertoires requis (dans votre répertoire de travail actuel), exécutez la commande suivante:

$ MKDIR -PV Template-Demo / Playbooks / Modèles

Une fois le répertoire du projet créé, accédez au répertoire du projet, comme suit:

$ CD Template-Demo /

Créer un hôtes Fichier d'inventaire, comme suit:

$ hôtes nano

Ensuite, ajoutez le nom de votre IP ou DNS de votre hôte (VM1.nodekite.com et VM2.nodekite.com) dans le fichier d'inventaire.

Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Créez un fichier de configuration anible dans le répertoire du projet, comme suit:

$ nano anible.CFG

Ensuite, tapez les lignes suivantes dans le anable.CFG déposer.

Une fois terminé cette étape, enregistrez le fichier en appuyant sur + X, suivie par Y et .

À ce stade, le répertoire du projet devrait ressembler à la suivante:

$ arbre

Comme vous pouvez le voir, les hôtes anibles sont également accessibles. Ainsi, nous pouvons passer à la section suivante de cet article.

$ anible all -u anible -m ping

Bases du module de modèle ANSIBLE

Le modèle Le module d'Anable accepte les mêmes options que le copie module d'ANSIBLE.

ANSIBLE COMMUNE modèle Options de module:

SRC - Le chemin du fichier de modèle Jinja2 sur votre ordinateur, qui sera analysé par la langue des modèles Jinja2 et copié aux hôtes distants.
destruction - Le chemin de destination sur les hôtes distants auxquels le fichier sera copié.
propriétaire - Le propriétaire du fichier sur les hôtes distants.
groupe - Le groupe du fichier sur les hôtes distants.
mode - Le mode d'autorisation du fichier sur les hôtes distants.

Laissez-nous regarder un exemple.

Tout d'abord, créez un nouveau manuel ANSIBLE copy_file_template1.yaml dans le Playbooks / Répertoire, comme suit:

$ nano playbooks / copy_file_template1.yaml

Ensuite, tapez les lignes suivantes dans le copy_file_template1.yaml livre de jeu.

- hôtes: tout
Utilisateur: ANSIBLE
Tâches:
- Nom: Index de copie.Fichier HTML sur serveur
modèle:
src: index.Jinja2
dest: / home / anible / index.html
Propriétaire: ANSIBLE
Groupe: ANSIBLE
Mode: 0644

Ce playbook copiera le indice.Jinja2 fichier à partir du PlayBooks / Templates / Répertoire (par rapport à votre répertoire de projet) aux hôtes distants à l'aide de l'ANSIBLE modèle module.

Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Créer le indice.Jinja2 Fichier de modèle dans le Playingbooks / modèles Répertoire, comme suit:

$ Nano Playbooks / modèles / index.Jinja2

Tapez les lignes suivantes dans le indice.Jinja2 Fichier de modèle:




Démo du modèle Jinja2


Bienvenue à Linuxhint!



Ceci est juste un fichier html simple. Je n'ai utilisé aucune syntaxe Jinja2 fantaisie ici.

Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Exécutez le livre de jeu copy_file_template1.yaml comme suit:

$ anible-playbook playbooks / copy_file_template1.yaml

Le playbook devrait fonctionner avec succès.

Comme vous pouvez le voir, le indice.Jinja2 le modèle a été rendu à l'aide de la langue des modèles Jinja2. Le contenu rendu doit être copié dans le indice.html Fichier des hôtes distants.

Variables d'impression dans le modèle Jinja2

Vous pouvez utiliser des faits, des variables et des variables définies par l'utilisateur dans vos modèles Jinja2.

Sur votre modèle Jinja2, vous pouvez imprimer la valeur d'une variable en utilisant le Nom de variable syntaxe. Si la variable est un objet, vous pouvez imprimer des propriétés d'objet individuelles à l'aide du objectVariable.nom de la propriété syntaxe.

Dans l'exemple qui suit, nous allons imprimer le date propriété du anible_date_time Objet dans notre indice.Jinja2 modèle.

$ anible all -u anible -m configuration | Egrep - Color 'Date | Heure'

Tout d'abord, ouvrez le indice.Jinja2 Fichier de modèle avec l'éditeur de texte Nano, comme suit:

$ Nano Playbooks / modèles / index.Jinja2

Ajouter la ligne suivante au indice.Jinja2 Fichier de modèle:

Page générée sur anible_date_time.date

Le final indice.Jinja2 Le fichier doit ressembler comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez terminé cette étape, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Exécutez le livre de jeu copy_file_template1.yaml comme suit:

$ anible-playbook playbooks / copy_file_template1.yaml

Comme vous pouvez le voir, le indice.Jinja2 le modèle a été traité par le langage de modèles Jinja2 et remplacé le anible_date_time.date variable avec la date dans Yyyy-mm-dd format. La sortie a ensuite été copiée dans le indice.html fichier sur l'hôte distant.

Énoncé de condition conditionnelle dans le modèle Jinja2

Le langage des modèles Jinja2 prend en charge conditionnelle si affirmations. Vous pouvez vérifier certaines variables avant d'imprimer quoi que ce soit en utilisant le si déclaration.

Le jinja2 si La syntaxe est la suivante:

% si condition%
Faites quelque chose si la condition est vraie
% fin si %

Voyons un exemple du Jinja2 si déclaration.

Dans cette section, je vais démontrer le Jinja2 si déclaration en utilisant le ANSIBLE_DINTRIBUTION Variable des faits.

$ anible all -u anible -m configuration | Egrep - Color 'Dist'

Tout d'abord, ouvrez le indice.Jinja2 Modèle Jinja2 avec l'éditeur de texte Nano, comme suit:

$ Nano Playbooks / modèles / index.Jinja2

Ensuite, ajoutez les lignes suivantes dans le indice.Jinja2 Fichier de modèle:

% si anible_distribution == "Debian"%

Vous dirigez Debian Linux


% fin si %

Ici, j'ai vérifié si ANSIBLE_DINTRIBUTION est Debian. Si c'est le cas, alors imprimez la chaîne

Vous dirigez Debian Linux

. Sinon, ne l'imprimez pas.

Finalement, le indice.Jinja2 Le fichier de modèle doit être consulté comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez modifié le fichier, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Maintenant, exécutez le livre de jeu copy_file_template1.yaml comme suit:

$ anible-playbook playbooks / copy_file_template1.yaml

Comme vous pouvez le voir, sur mon hôte distant Debian, le indice.html Le fichier a la ligne

Vous dirigez Debian Linux

. Cependant, sur mon hôte à distance Centos, la ligne n'est pas présente. Alors, le Jinja2 si La condition fonctionne.

Conditionnel: instruction IF-ELSE dans le modèle Jinja2

Le langage des modèles Jinja2 prend en charge conditionnelle sinon affirmations. Vous pouvez imprimer une chose si la condition correspond et imprimer autre chose si elle n'utilise pas sinon déclaration.

Le jinja2 sinon La syntaxe est la suivante:

% si condition%
Faites quelque chose si la condition est vraie
% autre %
Faire quelque chose si la condition est fausse
% fin si %

Voyons un exemple du Jinja2 sinon déclaration.

Tout d'abord, ouvrez le indice.Jinja2 Modèle Jinja2 avec l'éditeur de texte Nano, comme suit:

$ Nano Playbooks / modèles / index.Jinja2

Ensuite, ajoutez les lignes suivantes dans le indice.Jinja2 Fichier de modèle:

% si anible_distribution == "Debian"%

Vous dirigez Debian Linux


% autre %

Vous ne dirigez pas Debian Linux


% fin si %

Ici, j'ai vérifié si ANSIBLE_DINTRIBUTION est Debian. Si c'est le cas, alors imprimez la chaîne

Vous dirigez Debian Linux

. Sinon, imprimer

Vous ne dirigez pas Debian Linux

.

Finalement, le indice.Jinja2 Le fichier de modèle doit être consulté comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez modifié le fichier, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Exécutez le livre de jeu copy_file_template1.yaml comme suit:

$ anible-playbook playbooks / copy_file_template1.yaml

Comme vous pouvez le voir, sur mon hôte distant Debian, le indice.html Le fichier a la ligne

Vous dirigez Debian Linux

. Mais sur mon hôte à distance Centos, le indice.html Le fichier a la ligne

Vous ne dirigez pas Debian Linux

. Alors, le Jinja2 sinon La condition fonctionne.

Conditionnel: instruction if-elif dans le modèle Jinja2

Le langage des modèles Jinja2 prend en charge conditionnelle if-elif affirmations.

Le jinja2 if-elif La syntaxe est la suivante:

% si condition1%
Faire quelque chose si la condition1 est vraie
% elif condition2%
Faire quelque chose si la condition2 est vraie
% ELIF Condition3%
Faire quelque chose si la condition3 est vraie

% elif conditionn%
Faire quelque chose si la condition est vraie
% autre %
Faire quelque chose si aucune des conditions n'est vraie
% fin si %

Ici le % autre % La section est facultative, mais elle est là si vous en avez besoin.

Voyons un exemple du Jinja2 if-elif déclaration.

Tout d'abord, ouvrez le indice.Jinja2 Modèle Jinja2 avec l'éditeur de texte Nano, comme suit:

$ Nano Playbooks / modèles / index.Jinja2

Ensuite, ajoutez les lignes suivantes dans le indice.Jinja2 Fichier de modèle:

% si anible_distribution == "Debian"%

Vous dirigez Debian Linux


% ELIF ANSIBLE_DISTRIBUTION == "CENTOS"%

Vous utilisez Centos Linux


% autre %

Votre système d'exploitation n'est pas pris en charge


% fin si %

Ici, j'ai vérifié si ANSIBLE_DINTRIBUTION est Debian. Si c'est le cas, alors imprimez la chaîne

Vous dirigez Debian Linux

.

J'ai également vérifié si ANSIBLE_DINTRIBUTION est Centos. Si c'est le cas, alors imprimez la chaîne

Vous utilisez Centos Linux

.

Sinon, imprimer

Votre système d'exploitation n'est pas pris en charge

.

Finalement, le indice.Jinja2 Le fichier de modèle doit être consulté comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez modifié le fichier, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Exécutez le livre de jeu copy_file_template1.yaml comme suit:

$ anible-playbook playbooks / copy_file_template1.yaml

Comme vous pouvez le voir, sur mon hôte distant Debian, le indice.html Le fichier a la ligne

Vous dirigez Debian Linux

.

Sur mon hôte à distance Centos, le indice.html Le fichier a la ligne

Vous utilisez Centos Linux

.

Si j'avais un autre hôte distant exécutant un système d'exploitation autre que Debian ou Centos, il aurait la ligne

Votre système d'exploitation n'est pas pris en charge

dans le indice.html déposer.

Alors, le Jinja2 if-elif La condition fonctionne.

Boucle dans le modèle Jinja2

Vous pouvez également imprimer des tableaux et des objets à l'aide de boucles dans Jinja2.
Le jinja2 pour La syntaxe de boucle est la suivante:

% pour variablename dans l'arrayName%
Faire quelque chose avec variablename
% end pour%

Ici, dans chaque itération du tableau nom d'arrache, L'un des éléments du tableau (à partir du début du tableau) est affecté au Nom de variable variable. Vous pouvez faire quelque chose avec cette variable à l'intérieur de la boucle.

Laissez-nous voir comment vous pouvez imprimer des éléments de tableau dans votre modèle Jinja2 dans l'exemple suivant.

Tout d'abord, ouvrez le copy_file_template1.yaml ANSIBLE Playbook avec l'éditeur de texte Nano, comme suit:

$ nano playbooks / copy_file_template1.yaml

Ensuite, ajoutez les lignes suivantes dans le copy_file_template1.yaml Fichier Playbook:

VARS:
Menus:
- Maison
- Des produits
- À propos de nous
- Contactez-nous

Ici, j'ai ajouté un menus tableau dans le copy_file_template1.yaml livre de jeu. Ensuite, je vais imprimer les éléments du tableau à l'aide d'une boucle dans mon indice.Jinja2 Fichier de modèle Jinja2.

Finalement, le copy_file_template1.yaml Le fichier playbook doit ressembler comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez modifié le fichier, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Maintenant, ouvrez le indice.Jinja2 Modèle Jinja2 avec l'éditeur de texte Nano, comme suit:

$ Nano Playbooks / modèles / index.Jinja2

Ajouter les lignes suivantes dans le indice.Jinja2 Fichier de modèle:

Ici, je génère une simple barre de navigation HTML à l'aide d'un Jinja2 pour boucle. La boucle itérère à travers le menus Array (que j'ai défini dans le copy_file_template1.yaml playbook) éléments et génère un menu Article dans chaque itération.

Finalement, le indice.Jinja2 Le fichier de modèle doit être consulté comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez modifié le fichier, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Exécutez le livre de jeu copy_file_template1.yaml comme suit:

$ anible-playbook playbooks / copy_file_template1.yaml

Comme vous pouvez le voir, le Jinja2 pour Loop a généré une barre de navigation HTML (dans le indice.html déposer).

Vous pouvez également accéder à un tableau d'objets dans votre modèle Jinja2.

Voyons un autre exemple.

Tout d'abord, ouvrez le copy_file_template1.yaml ANSIBLE Playbook avec l'éditeur de texte Nano, comme suit:

$ nano playbooks / copy_file_template1.yaml

Ensuite, ajoutez les lignes suivantes dans le copy_file_template1.yaml Fichier Playbook:

VARS:
Menus:
- Nom: Accueil
lien: / home
- Nom: Produits
lien: / produits
- Nom: à propos de nous
lien: / environ-us
- Nom: contactez-nous
lien: / contact-us

Ici, j'ai ajouté un menus tableau d'objets dans le copy_file_template1.yaml livre de jeu. Chacun de ces objets a deux propriétés, un nom propriété et un lien propriété.

Finalement, le copy_file_template1.yaml Le fichier playbook doit ressembler comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez modifié le fichier, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Ouvrir le indice.Jinja2 Modèle Jinja2 avec l'éditeur de texte Nano, comme suit:

$ Nano Playbooks / modèles / index.Jinja2

Ensuite, ajoutez les lignes suivantes dans le indice.Jinja2 Fichier de modèle:

Tout ce que vous voyez ici est le même que dans l'exemple précédent. La seule différence est que j'imprime les propriétés de l'objet nom (en utilisant menu.nom) et lien (en utilisant menu.lien) dans mon indice.Jinja2 Modèle Jinja2.

Finalement, le indice.Jinja2 Le fichier de modèle doit être consulté comme indiqué dans la capture d'écran ci-dessous.

Une fois que vous avez modifié le fichier, enregistrez le fichier en appuyant sur + X, suivie par Y et .

Maintenant, exécutez le livre de jeu copy_file_template1.yaml comme suit:

$ anible-playbook playbooks / copy_file_template1.yaml

Comme vous pouvez le voir, le Jinja2 pour Loop a généré une barre de navigation HTML (dans le indice.html fichier) à partir d'un tableau d'objets.

Et après?

Dans cet article, je vous ai montré comment utiliser l'ANSIBLE modèle module et décrit certaines des bases de la langue des modèles Jinja2. Visitez le site officiel de Jinja2 pour en savoir plus sur la langue des modèles Jinja2.