Comment créer des modèles dans ANSIBLE de créer des configurations sur les nœuds gérés - partie 7

Comment créer des modèles dans ANSIBLE de créer des configurations sur les nœuds gérés - partie 7

Dans ce Partie 7 de la série ANSIBLE, vous apprendrez à créer et à utiliser des modèles dans ANSIBLE pour créer des configurations personnalisées sur les nœuds gérés. Les modèles dans ANSIBLE sont un moyen facile et convivial de pousser les configurations personnalisées aux nœuds gérés exécutant différents systèmes avec un montage minimal des fichiers Playbook.

Qu'est-ce que les modèles dans ANSIBLE?

Pour mieux comprendre ce qu'est un modèle, considérons un gestionnaire informatique rédigeant un e-mail pour inviter son service à un cocktail. L'e-mail est envoyé à chacun des membres et les invite également à étiqueter avec leurs conjoints.

L'e-mail a été personnalisé de telle sorte que le corps de l'e-mail reste le même, mais les adresses et les noms de leurs conjoints respectifs varient. L'e-mail devient le modèle, tandis que les destinataires et les conjoints respectifs sont variables.

C'était un exemple générique. Utilisations anibles Jinja2 qui est un moteur de modèles moderne pour les frameworks Python utilisés pour générer du contenu ou des expressions dynamiques. Les modèles sont extrêmement utiles lors de la création de fichiers de configuration personnalisés pour plusieurs serveurs mais unique pour chacun d'eux.

Jinja2 utilise les accolades à double boucle pour enfermer une variable qui a été définie. Pour commentaires, utilisez # # et pour les déclarations conditionnelles %…%.

Supposons que vous avez un modèle de données de Vlans dans votre réseau avec des systèmes hôtes que vous souhaitez pousser à leur Vlans comme montré.

VLANS: - ID: 10 Nom: LB - ID: 20 Nom: WB_01 - ID: 30 Nom: WB_02 - ID: 40 Nom: DB 

Pour rendre cette configuration, le correspondant Jinja2 modèle appelé vlans.j2 apparaîtrait comme indiqué. Comme vous pouvez le voir, les variables vlan.identifiant et vlan.nom ont été enfermés en accolades bouclées.

vlan Vlan.id nom Vlan.nom  

Le tout ensemble dans un livre de jeu qui place différentes machines hôtes, cela apparaîtrait comme indiqué:

 - Hôtes Tâches: - Nom: Rendu Modèle de configuration VLAN: SRC: VLANS.J2 dest: "vlan_configs / inventory_hostname.conf 

Exemple 1: Configuration des serveurs Web dans différentes distributions

Dans cet exemple, nous créerons indice.html des fichiers qui affichent des informations sur le nom d'hôte et le système d'exploitation de 2 serveurs Web en cours d'exécution Centos et Ubuntu.

Installation

Ubuntu 18 - Adresse IP: 173.82.202.239 Centos 7 - Adresse IP: 173.82.115.165 

Apache Webserver a déjà été installé sur les deux serveurs.

Pour les centos 7

Page Web Apache sur Centos 7

Pour Ubuntu 18.04

Page Web Apache sur Ubuntu 18.04

Alors créons un livre de jeu test_server.YML comme montré:

--- - Hôtes: Tous deviennent: Oui Tâches: - Nom: Installer Index.Modèle HTML: SRC: Index.html.J2 dest: / var / www / html / index.Mode HTML: 0777 

Notre Jinja Le modèle de fichier est indice.html.j2 qui sera poussé au indice.html fichier sur chaque serveur Web. N'oubliez pas de mettre l'extension .j2 à la fin pour signifier qu'il s'agit d'un fichier Jinja2.

Créons maintenant le fichier de modèle indice.html.j2.

  

Le nom d'hôte de ce serveur Web est anible_hostname

Il fonctionne sur ANSIBLE_OS_FAMILY Système

Ce modèle est un fichier HTML de base où le ANSIBLE_HOSTNAME et anible_os_family sont des variables intégrées qui seront remplacées par les noms d'hôtes et les systèmes d'exploitation respectifs des serveurs individuels sur le navigateur.

Maintenant, exécutons le livre de jeu.

# anible-playbook test_server.YML 
Créer un fichier de modèle ANSIBLE

Maintenant, rechargeons les pages Web pour les deux Centos 7 et Ubuntu serveurs Web.

Pour les centos 7

Vérifiez la page Web Apache sur Centos 7

Pour Ubuntu 18.04

Vérifiez la page Web Apache sur Ubuntu 18.04

Comme vous pouvez le voir, différentes informations sur le nom d'hôte et la famille du système d'exploitation ont été affichées sur chaque serveur. Et c'est comme ça cool Jinja2 Les modèles sont!

Filtres:

Parfois, vous pouvez décider de remplacer la valeur d'une variable avec une chaîne qui apparaît d'une certaine manière.

Exemple 1: Faites apparaître les chaînes en majuscules / minuscules

Par exemple, dans l'exemple précédent, nous pouvons décider de faire apparaître les variables anibles en majuscules. Pour ce faire, ajoutez la valeur supérieure à la variable. De cette façon, la valeur de la variable est convertie au format majuscule.

anible_hostname | Upper => Centos 7 ANSIBLE_OS_FAMILY | supérieur => redhat 
Faire de la chaîne en majuscule

De même, vous pouvez convertir la sortie de la chaîne en minuscules en ajoutant l'argument inférieur.

anible_hostname | inférieur => centos 7 anible_os_family | inférieur => redhat 
Faire des cordes en minuscules

Exemple 2: remplacez une chaîne par une autre

De plus, vous pouvez remplacer une chaîne par un autre.

Par exemple:

Le titre du film est film_name => Le titre du film est Anneau.

Pour remplacer la sortie par une autre chaîne, utilisez l'argument de remplacement comme indiqué:

Le titre du film est film_name | remplacer («ring», «cambriolage») => Le titre du film est Cambriolage.

Exemple 3: répertorie et définit les filtres

Pour récupérer la plus petite valeur dans un tableau, utilisez le min filtre.

[2, 3, 4, 5, 6, 7] | min => 2 

De même, pour récupérer le plus grand nombre, utilisez le max filtre.

[2, 3, 4, 5, 6, 7] | max => 7 

Pour afficher des valeurs uniques, utilisez le unique filtre.

[2, 3, 3, 2, 6, 7] | unique => 2, 3 

Utilisez le aléatoire filtre pour obtenir un nombre aléatoire entre 0 et la valeur.

50 | aléatoire => un nombre aléatoire 

BOUCLES:

Tout comme dans les langages de programmation, nous avons boucles dans la Jinja2.

Par exemple, pour générer un fichier contenant une liste de nombres, utilisez le pour boucle Comme indiqué dans l'exemple ci-dessous:

Exemple 1:

% pour le nombre dans [0, 1, 2, 3, 4, 5, 6, 7]% nombre % fin pour% 

Vous pouvez également combiner la boucle pour sinon déclarations pour filtrer et obtenir certaines valeurs.

Exemple 2:

% pour le nombre dans [0, 1, 2, 3, 4, 5, 6, 7]% % if Number == 5% nombre % endif% % end pour% 

Et c'est tout pour cette conférence. Rejoignez-nous dans le sujet suivant où nous nous avendrons pour travailler avec des variables et des faits anibles.