Aller au contenu

Lab 06 : Utilisation des variables et Gestion des Erreurs

Dans cet atelier, vous allez apprendre à :

  • Définir et utiliser des variables dans les playbooks Ansible.
  • Utiliser des variables d’Ansible pour contrôler le flux d’exécution des tâches.
  • Implémenter des conditions simples et complexes pour ajuster les actions exécutées dans vos playbooks.
  • Déboger vos playbooks
  • Installer et Utiliser ansible-lint
  • Définir et utiliser des variables dans les playbooks Ansible.
  • Utiliser des variables d’Ansible pour contrôler le flux d’exécution des tâches.
  • Implémenter des conditions simples et complexes pour ajuster les actions exécutées dans vos playbooks.
  • Utiliser changed_when pour définir quand une tâche est considérée comme ayant effectué un changement.
  • Utiliser failed_when pour définir quand une tâche est considérée comme ayant échoué.
  • Utiliser le module debug
  • Installer et utiliser ansible-lint pour vérifier la conformité et la qualité de vos playbooks.

Définir et Utiliser des Variables dans un Playbook

Section intitulée « Définir et Utiliser des Variables dans un Playbook »

Les variables vous permettent de stocker et de réutiliser des valeurs dans vos playbooks. Vous pouvez définir des variables au niveau du playbook, du groupe d’hôtes, ou d’un hôte spécifique.

  1. Créez un fichier nommé vars.yaml dans votre répertoire de projet et ajoutez-y les variables suivantes :
vars.yaml
webserver_package: nginx
service_name: nginx
document_root: /var/www/html
  1. Ensuite, créez un fichier playbook nommé install_webservers.yaml :
---
- name: Installer et configurer un serveur web
hosts: webservers
vars_files:
- vars.yaml
tasks:
- name: Vérifier l’espace disque disponible
ansible.builtin.command: df -h /
register: disk_space
failed_when: "'15G' in disk_space.stdout" # Si l’espace disque est inférieur à 15G, échouer.
- name: Installer le paquet {{ webserver_package }}
become: true
ansible.builtin.apt:
name: "{{ webserver_package }}"
state: present
- name: Démarrer le service {{ service_name }}
become: true
ansible.builtin.service:
name: "{{ service_name }}"
state: started
- name: Créer un fichier d’index HTML
become: true
ansible.builtin.copy:
dest: "{{ document_root }}/index.html"
content: "<h1>Bienvenue sur {{ inventory_hostname }}</h1>"
  1. Exécutez le playbook :
Terminal window
ansible-playbook install_webservers.yaml

Ansible propose des variables prédéfinies que vous pouvez utiliser dans vos playbooks, telles que inventory_hostname (nom de l’hôte actuel) ou ansible_os_family (famille de système d’exploitation).

  1. Dans le playbook précédent, remplacez machine par la concaténation des variables ansible_os_family et inventory_hostname.

Les conditions vous permettent d’exécuter des tâches spécifiques uniquement si certaines conditions sont remplies.

  1. Modifiez le fichier install_webservers.yaml pour inclure une condition qui vérifie si le système est basé sur RedHat :
---
- name: Installer et configurer un serveur web
hosts: webservers
vars_files:
- vars.yaml
tasks:
- name: Installer le paquet {{ webserver_package }}
become: true
ansible.builtin.apt:
name: "{{ webserver_package }}"
state: present
when: ansible_os_family == "RedHat"
- name: Démarrer le service {{ service_name }}
become: true
ansible.builtin.service:
name: "{{ service_name }}"
state: started
- name: Créer un fichier d’index HTML
become: true
ansible.builtin.copy:
dest: "{{ document_root }}/index.html"
content: "<h1>Bienvenue sur {{ inventory_hostname }}</h1>"
  1. Exécutez le playbook et observez que la tâche d’installation ne s’exécute que sur les systèmes basés sur RedHat :
Terminal window
ansible-playbook install_webservers.yaml
  1. Modifiez le fichier install_webservers.yaml pour ajouter une condition plus complexe :
---
- name: Installer et configurer un serveur web
hosts: webservers
vars_files:
- vars.yaml
tasks:
- name: Installer le paquet {{ webserver_package }} sur RedHat avec 2 Go de RAM minimum
become: true
ansible.builtin.apt:
name: "{{ webserver_package }}"
state: present
when: ansible_os_family == "RedHat" and ansible_memtotal_mb >= 2048
- name: Démarrer le service {{ service_name }}
become: true
ansible.builtin.service:
name: "{{ service_name }}"
state: started
- name: Créer un fichier d’index HTML
become: true
ansible.builtin.copy:
dest: "{{ document_root }}/index.html"
content: "<h1>Bienvenue sur {{ inventory_hostname }}</h1>"
  1. Exécutez à nouveau le playbook et observez le résultat.

La directive changed_when vous permet de spécifier manuellement si une tâche doit être considérée comme ayant effectué un changement.

  1. Ajoutez une tâche pour vérifier l’état d’un fichier de configuration, mais marquez-la comme non changeante, sauf si un texte spécifique est ajouté au fichier :
---
- name: Installer et configurer un serveur web
hosts: webservers
vars_files:
- vars.yaml
tasks:
- name: Installer le paquet {{ webserver_package }} sur Redhat
become: true
ansible.builtin.apt:
name: "{{ webserver_package }}"
state: present
when: ansible_os_family == "RedHat"
- name: Démarrer le service {{ service_name }}
become: true
ansible.builtin.service:
name: "{{ service_name }}"
state: started
- name: Vérifier la configuration du service
ansible.builtin.command: cat /etc/nginx/nginx.conf
register: nginx_config
changed_when: "'# Custom Config' in nginx_config.stdout"
- name: Ajouter une configuration personnalisée
become: true
ansible.builtin.lineinfile:
path: /etc/nginx/nginx.conf
line: "# Custom Config"
insertafter: "http {"
- name: Créer un fichier d’index HTML
become: true
ansible.builtin.copy:
dest: "{{ document_root }}/index.html"
content: "<h1>Bienvenue sur {{ inventory_hostname }}</h1>"
- name: Restart service nginx
become: true
ansible.builtin.service:
name: nginx
state: restarted
  1. Exécutez le playbook et observez que la tâche d’installation ne s’exécute que sur les systèmes basés sur Ubuntu :
Terminal window
ansible-playbook install_webservers.yaml

La directive failed_when vous permet de spécifier manuellement si une tâche doit être considérée comme ayant échoué, en fonction de conditions personnalisées.

  1. Ajoutez une tâche pour vérifier l’espace disque disponible et marquer la tâche comme échouée si l’espace libre est insuffisant :
---
- name: Installer et configurer un serveur web
hosts: webservers
vars_files:
- vars.yaml
tasks:
- name: Vérifier l’espace disque disponible
ansible.builtin.command: df -h /
register: disk_space
failed_when: "'200G' in disk_space.stdout" # Si l’espace disque est inférieur à 200G, échouer.
- name: Installer le paquet {{ webserver_package }} sur RedHat
become: true
ansible.builtin.apt:
name: "{{ webserver_package }}"
state: present
when: ansible_os_family == "RedHat"
- name: Démarrer le service {{ service_name }}
become: true
ansible.builtin.service:
name: "{{ service_name }}"
state: started
- name: Créer un fichier d’index HTML
become: true
ansible.builtin.copy:
dest: "{{ document_root }}/index.html"
content: "<h1>Bienvenue sur {{ inventory_hostname }}</h1>"
  1. Exécutez le playbook et observez que la tâche d’installation ne s’exécute que sur les systèmes basés sur Ubuntu :
Terminal window
ansible-playbook install_webservers.yaml

ansible-lint est un outil qui analyse vos playbooks Ansible pour vérifier leur conformité avec les bonnes pratiques et les conventions de style. Il aide à identifier les erreurs potentielles avant l’exécution.

  1. Installez ansible-lint à l’aide de pip :
Terminal window
pip install ansible-lint --user
  1. Vérifiez que l’installation a réussi en exécutant :
Terminal window
ansible-lint --version
  1. Pour analyser votre playbook avec ansible-lint, exécutez la commande suivante :
Terminal window
ansible-lint install_webservers.yaml
  1. ansible-lint analysera votre playbook et renverra une liste de recommandations ou d’erreurs à corriger.

Pour valider ce TP, assurez-vous que les tâches se sont correctement exécutées en fonction des conditions que vous avez définies. Vous pouvez vérifier les journaux de services et le contenu du répertoire document_root.

Corriger les erreurs retournées par ansible-lint