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.yamlEnsuite, tapez les lignes suivantes dans le copy_file_template1.yaml livre de jeu.
- hôtes: toutCe 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:
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.yamlLe 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.yamlComme 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
Ici, j'ai vérifié si ANSIBLE_DINTRIBUTION est Debian. Si c'est le cas, alors imprimez la chaîne Vous dirigez 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 .
Maintenant, exécutez le livre de jeu copy_file_template1.yaml comme suit:
$ anible-playbook playbooks / copy_file_template1.yamlComme vous pouvez le voir, sur mon hôte distant Debian, le indice.html Le fichier a la ligne Vous dirigez Debian Linux
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%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
Vous ne dirigez pas Debian Linux
Ici, j'ai vérifié si ANSIBLE_DINTRIBUTION est Debian. Si c'est le cas, alors imprimez la chaîne Vous dirigez Debian Linux 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.yamlComme vous pouvez le voir, sur mon hôte distant Debian, le indice.html Le fichier a la ligne Vous dirigez Debian Linux Vous ne dirigez pas Debian Linux
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%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
Vous utilisez Centos Linux
Votre système d'exploitation n'est pas pris en charge
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.yamlComme 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
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.yamlEnsuite, ajoutez les lignes suivantes dans le copy_file_template1.yaml Fichier Playbook:
VARS: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.yamlComme 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.yamlEnsuite, ajoutez les lignes suivantes dans le copy_file_template1.yaml Fichier Playbook:
VARS: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.Jinja2Ensuite, 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.yamlComme 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.