Ansible

Comment utiliser le module de modèle Ansible

Comment utiliser le module de modèle Ansible
L'Ansible modèle module est principalement utilisé pour copier des fichiers du client Ansible (où Ansible est installé) vers les hôtes Ansible (gérés par Ansible). L'avantage d'utiliser le modèle module, plutôt que le copie module, est-ce que l'Ansible modèle le module peut utiliser le langage de modélisation Jinja2. Jinja2 est un puissant langage de modélisation Python grâce auquel vous pouvez générer des fichiers de configuration, des pages Web, etc. Vous pouvez également utiliser des variables de faits, des boucles et des conditions Ansible dans vos modèles Jinja2.

Cet article va vous montrer comment utiliser l'Ansible modèle module et quelques bases du langage de modélisation Jinja2. Alors, commençons!

Conditions préalables


Si vous souhaitez essayer les exemples de cet article :

1) Vous devez avoir Ansible installé sur votre ordinateur.

2) Vous devez avoir au moins un hôte Ubuntu/Debian ou un hôte CentOS/RHEL 8 configuré pour l'automatisation Ansible.

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

Configurer un répertoire de projets Ansible

Avant d'aller plus loin, 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-démo/ et tous les sous-répertoires requis (dans votre répertoire de travail actuel), exécutez la commande suivante :

$ mkdir -pv template-demo/playbooks/templates

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

$ cd modèle-démo/

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

$ nano hôtes

Ensuite, ajoutez votre IP d'hôte ou votre nom DNS (vm1.nœudkite.com et vm2.nœudkite.com) dans le fichier d'inventaire.

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

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

$ nano ansible.cfg

Ensuite, tapez les lignes suivantes dans le ansible.cfg déposer.

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

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

$ arbre

Comme vous pouvez le voir, les hébergeurs Ansible sont accessibles, ainsi. Nous pouvons donc passer à la section suivante de cet article.

$ ansible all -u ansible -m ping

Bases du module de modèle Ansible

le modèle module d'Ansible accepte les mêmes options que le copie module d'Ansible.

Ansible commun modèle choix des modules :

src - Le chemin du fichier modèle Jinja2 sur votre ordinateur, qui sera analysé par le langage de modèle Jinja2 et copié sur les hôtes distants.
dest - Le chemin de destination sur les hôtes distants vers lesquels le fichier sera copié.
propriétaire - Le propriétaire du fichier sur les hôtes distants.
grouper - Le groupe du fichier sur les hôtes distants.
mode - Le mode d'autorisation de fichier sur les hôtes distants.

Regardons un exemple.

Tout d'abord, créez un nouveau playbook Ansible copy_file_template1.yaml dans le cahiers/ 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 : tous
utilisateur : ansible
Tâches:
- nom : Copier l'index.fichier html vers le serveur
modèle:
src : index.jinja2
destination : /home/ansible/index.html
propriétaire : ansible
groupe : ansible
mode : 0644

Ce playbook copiera le indice.jinja2 fichier de la playbooks/modèles/ répertoire (relatif à 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 Oui et .

Créer le indice.jinja2 fichier modèle dans le cahiers/modèles répertoire, comme suit :

$ nano playbooks/modèles/index.jinja2

Tapez les lignes suivantes dans le indice.jinja2 fichier modèle :




Démo du modèle Jinja2


Bienvenue sur Linuxhint!



Ceci est juste un fichier HTML simple. Je n'ai pas utilisé de syntaxe Jinja2 sophistiquée ici.

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

Exécuter le playbook copy_file_template1.yaml comme suit:

$ ansible-playbook playbooks/copy_file_template1.yaml

Le playbook devrait s'exécuter avec succès.

Comme vous pouvez le voir, le indice.jinja2 le modèle a été rendu en utilisant le langage de modèle Jinja2. Le contenu rendu doit être copié dans le indice.html fichier des hôtes distants.

Impression de variables dans le modèle Jinja2

Vous pouvez utiliser des faits, des variables et des variables définies par l'utilisateur Ansible 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 les propriétés de l'objet individuel à l'aide de la objetVariable.nom de la propriété syntaxe.

Dans l'exemple qui suit, nous imprimerons le Date propriété de la ansible_date_heure objet dans notre indice.jinja2 modèle.

$ ansible all -u ansible -m configuration | egrep --color 'date|heure'

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

$ nano playbooks/modèles/index.jinja2

Ajoutez la ligne suivante au indice.jinja2 fichier modèle :

Page générée le ansible_date_time.Date

Le final indice.jinja2 le fichier devrait ressembler à celui 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 Oui et .

Exécuter le playbook copy_file_template1.yaml comme suit:

$ ansible-playbook playbooks/copy_file_template1.yaml

Comme vous pouvez le voir, le indice.jinja2 template a été traité par le langage de template Jinja2 et a remplacé le ansible_date_time.Date variable avec la date dans AAAA-MM-JJ format. La sortie a ensuite été copiée dans le indice.html fichier sur l'hôte distant.

Déclaration conditionnelle if dans le modèle Jinja2

Le langage de modélisation Jinja2 prend en charge le conditionnel si déclarations. 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 %
Faire 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_distribution variable de faits.

$ ansible all -u ansible -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 modèle :

% si ansible_distribution == "Debian" %

Vous utilisez Debian Linux


% fin si %

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

Vous utilisez Debian Linux

. Sinon, ne l'imprimez pas.

Finalement, le indice.jinja2 le fichier modèle doit ressembler à celui illustré dans la capture d'écran ci-dessous.

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

Maintenant, lancez le playbook copy_file_template1.yaml comme suit:

$ ansible-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 utilisez Debian Linux

. Cependant, sur mon hôte distant CentOS, la ligne n'est pas présente. Ainsi, le Jinja2 si l'état fonctionne.

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

Le langage de modélisation Jinja2 prend en charge le conditionnel sinon déclarations. Vous pouvez imprimer une chose si la condition correspond et imprimer autre chose si elle n'utilise pas le sinon déclaration.

Le Jinja2 sinon la syntaxe est la suivante :

% si condition %
Faire quelque chose si la condition est vraie
% autre %
Faites 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 modèle :

% si ansible_distribution == "Debian" %

Vous utilisez Debian Linux


% autre %

Vous n'utilisez pas Debian Linux


% fin si %

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

Vous utilisez Debian Linux

. Sinon, imprimez

Vous n'utilisez pas Debian Linux

.

Finalement, le indice.jinja2 le fichier modèle doit ressembler à celui illustré dans la capture d'écran ci-dessous.

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

Exécuter le playbook copy_file_template1.yaml comme suit:

$ ansible-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 utilisez Debian Linux

. Mais sur mon hôte distant CentOS, le indice.html le fichier a la ligne

Vous n'utilisez pas Debian Linux

. Ainsi, le Jinja2 sinon l'état fonctionne.

Conditionnel : déclaration if-elif dans le modèle Jinja2

Le langage de modélisation Jinja2 prend en charge le conditionnel si-elif déclarations.

Le Jinja2 si-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 conditionN est vraie
% autre %
Faites 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 si-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 modèle :

% si ansible_distribution == "Debian" %

Vous utilisez 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_distribution est Debian. Si c'est le cas, imprimez la chaîne

Vous utilisez Debian Linux

.

j'ai aussi vérifié si ansible_distribution est CentOS. Si c'est le cas, imprimez la chaîne

Vous utilisez CentOS Linux

.

Sinon, imprimez

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

.

Finalement, le indice.jinja2 le fichier modèle doit ressembler à celui illustré dans la capture d'écran ci-dessous.

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

Exécuter le playbook copy_file_template1.yaml comme suit:

$ ansible-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 utilisez Debian Linux

.

Sur mon hôte distant 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.

Ainsi, le Jinja2 si-elif l'état fonctionne.

Boucles 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 la boucle est la suivante :

% pour variableName dans arrayName %
Faire quelque chose avec variableName
% fin pour %

Ici, à chaque itération du tableau nom_tableau, l'un des éléments du tableau (en commençant par le 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.

Voyons 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 Playbook Ansible 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 :

variables :
menus :
- Domicile
- Des produits
- À propos de nous
- Nous contacter

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 en utilisant une boucle dans mon indice.jinja2 Fichier modèle Jinja2.

Finalement, le copy_file_template1.yaml le fichier playbook devrait ressembler à celui illustré dans la capture d'écran ci-dessous.

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

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

$ nano playbooks/modèles/index.jinja2

Ajoutez les lignes suivantes dans le indice.jinja2 fichier modèle :

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

Finalement, le indice.jinja2 le fichier modèle doit ressembler à celui illustré dans la capture d'écran ci-dessous.

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

Exécuter le playbook copy_file_template1.yaml comme suit:

$ ansible-playbook playbooks/copy_file_template1.yaml

Comme vous pouvez le voir, le Jinja2 pour boucle a généré une barre de navigation HTML (dans la 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 Playbook Ansible 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 :

variables :
menus :
- nom: Maison
lien : /accueil
- nom: Produits
lien : /produits
- nom: À propos de nous
lien : /à propos de nous
- nom: Contactez-nous
lien : /contactez-nous

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, une Nom propriété et un relier propriété.

Finalement, le copy_file_template1.yaml le fichier playbook devrait ressembler à celui illustré dans la capture d'écran ci-dessous.

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

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 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 (utilisant menu.Nom) et relier (utilisant menu.relier) dans mon indice.jinja2 modèle Jinja2.

Finalement, le indice.jinja2 le fichier modèle doit ressembler à celui illustré dans la capture d'écran ci-dessous.

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

Maintenant, lancez le playbook copy_file_template1.yaml comme suit:

$ ansible-playbook playbooks/copy_file_template1.yaml

Comme vous pouvez le voir, le Jinja2 pour boucle a généré une barre de navigation HTML (dans la 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 du langage de modélisation Jinja2. Visitez le site officiel de Jinja2 pour en savoir plus sur le langage de modélisation Jinja2.

Tutoriel Shadow of the Tomb Raider pour Linux
Shadow of the Tomb Raider est le douzième ajout à la série Tomb Raider - une franchise de jeux d'action-aventure créée par Eidos Montréal. Le jeu a ét...
Comment booster les FPS sous Linux?
FPS signifie Images par seconde. La tâche du FPS est de mesurer la fréquence d'images dans les lectures vidéo ou les performances de jeu. En termes si...
Meilleurs jeux de laboratoire d'applications Oculus
Si vous êtes propriétaire d'un casque Oculus, vous devez être au courant du chargement latéral. Le chargement latéral est le processus d'installation ...