paint-brush
Ansible 101 : Travailler avec des faits et des modèlespar@cloudkungfu
903 lectures
903 lectures

Ansible 101 : Travailler avec des faits et des modèles

par cloud-kung-fu4m2024/01/30
Read on Terminal Reader

Trop long; Pour lire

Ansible utilise des variables, des faits et des modèles pour créer des flux de travail d'automatisation adaptables. Les variables permettent une gestion dynamique de la configuration, les faits fournissent des informations spécifiques au système et les modèles génèrent des fichiers de configuration personnalisables. Cette approche garantit que les playbooks sont réutilisables et flexibles dans différents environnements.
featured image - Ansible 101 : Travailler avec des faits et des modèles
cloud-kung-fu HackerNoon profile picture
0-item

Dans Ansible, les variables et les faits, ainsi que les modèles, sont des outils fondamentaux pour créer des flux de travail d'automatisation flexibles. Les variables vous permettent de gérer et de modifier vos configurations de manière dynamique. Les faits sont un sous-ensemble spécial de variables qu'Ansible collecte à partir des systèmes distants, fournissant des informations spécifiques au contexte.


Les modèles permettent la génération de fichiers de configuration pilotés par des variables, rendant vos playbooks adaptables à des environnements et des scénarios variés.


Ces outils rendent les playbooks réutilisables et adaptables, vous permettant d'éviter le codage en dur des valeurs et permettant la personnalisation pour différents environnements.

Variables et faits

Les variables permettent de modifier les paramètres sans altérer la logique de base du playbook.

Comment les faits, les variables et les modèles fonctionnent ensemble

  • Types de variables :
    • Booléen : valeurs vraies ou fausses.

    • Liste : une collection ordonnée d’éléments.

    • Dictionnaire : paires clé-valeur pour les structures de données complexes.

    • Variables enregistrées : capture le résultat des tâches à utiliser plus tard dans votre playbook.

    • Faits : variables collectées automatiquement qui fournissent des détails sur les systèmes distants que vous gérez.


NB : évitez les conflits dans les noms de variables en utilisant la notation entre crochets.


 - name: Print the distribution of the target hosts: all vars: curr_time: "{{ now() }}" tasks: - name: Distro Check ansible.builtin.debug: msg: "The target system is {{ ansible_facts['distribution'] }}. Timestamp: {{ curr_time }}"

Modèles et fichiers

Les modèles dans Ansible utilisent le langage de modèles Jinja2 pour créer dynamiquement des fichiers à l'aide d'interpolations variables, de boucles et de conditions.


 - name: Write distro name hosts: all tasks: - name: Write distro name ansible.builtin.template: src: distro.j2 dest: /root/distro.txt mode: '644' # src: location of jinja2 template file # dest: location it will be copied to # permissions that will be granted to the file

Pratique

Nous allons utiliser la famille de systèmes d'exploitation pour déterminer s'il convient d'installer NGINX de Lighttpd, puis nous déploierons une page d'accueil personnalisée sur l'hôte distant contenant NGINX, le tout sans noms d'hôte codés en dur.


  1. Clonez le dépôt.
 git clone https://github.com/perplexedyawdie/ansible-learn.git


2. Changez le répertoire en faits et modèles

 cd ansible-learn/facts-and-templates


3. Faites tourner l'environnement à l'aide de docker-compose

 docker compose up -d --build


4. SSH sur le serveur Ansible

 ssh -o StrictHostKeyChecking=no -o NoHostAuthenticationForLocalhost=yes root@localhost -p 2200 # password: test123

Variables et faits

5. Créez un playbook appelé server_setup.yaml . Ici, nous allons configurer NGINX et Lighttpd, puis afficher le nom de la distribution pour chaque hôte distant.


 - name: Install NGINX on Debian & Lighttpd on RedHat hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Install NGINX for Debian-based systems ansible.builtin.apt: name: nginx state: present when: ansible_facts['os_family'] == dev1 - name: Install Lighttpd for RedHat-based systems ansible.builtin.yum: name: lighttpd state: present when: ansible_facts['os_family'] == dev2 - name: Display the distribution ansible.builtin.debug: msg: "The server is running {{ ansible_facts['distribution'] }}"


6. Exécutez ansible-lint.

 ansible-lint server_setup.yaml


7. Exécutez le playbook.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml server_setup.yaml


8. Confirmez que la configuration a réussi.

 ssh -i /root/.ssh/id_rsa_ansible root@server3 nginx -V ssh -i /root/.ssh/id_rsa_ansible root@server2 lighttpd -v ssh -i /root/.ssh/id_rsa_ansible root@server1 lighttpd -v

Modèles et fichiers

9. Créez un fichier modèle Jinja2 appelé index.html.j2


Il sera automatiquement renseigné avec la famille et la distribution du système d'exploitation.


 <html> <head> <title>Welcome to {{ ansible_facts['os_family'] }}</title> </head> <body> <h1>Server running on {{ ansible_facts['distribution'] }}</h1> </body> </html>


10. Créez un playbook appelé custom_homepage.yaml.


Nous déployons la page d'accueil personnalisée créée ci-dessus sur NGINX, puis redémarrons le serveur.


 - name: Deploy Custom Homepage and restart hosts: all vars: dev1: "Debian" dev2: "RedHat" tasks: - name: Create Homepage with Jinja2 Template for NGINX ansible.builtin.template: src: index.html.j2 dest: /var/www/html/index.html mode: '644' when: ansible_facts['os_family'] == dev1 notify: restart nginx handlers: - name: Restart NGINX listen: "restart nginx" ansible.builtin.service: name: nginx state: restarted when: ansible_facts['os_family'] == dev1


11. Exécutez le linter.

 ansible-lint custom_homepage.yaml


12. Exécutez le playbook.

 ansible-playbook --key-file /root/.ssh/id_rsa_ansible -u root -i inventory.yaml custom_homepage.yaml


13. Confirmez le déploiement en visitant http://localhost:2203 dans votre navigateur.

résumer

Superbe effort ! 🙌 Nous avons appris à utiliser des variables et des faits dans un playbook ainsi qu'à créer des fichiers dynamiques à l'aide de modèles. Ensuite, nous examinerons la modularisation et la gestion des erreurs. En attendant, prenez soin de vous !