Lab 06 : Utilisation des variables et Gestion des Erreurs
Objectifs
Section intitulée « Objectifs »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
Architecture du TP
Section intitulée « Architecture du TP »- 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.
Définition des Variables
Section intitulée « Définition des Variables »- Créez un fichier nommé
vars.yamldans votre répertoire de projet et ajoutez-y les variables suivantes :
webserver_package: nginxservice_name: nginxdocument_root: /var/www/html- 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>"- Exécutez le playbook :
ansible-playbook install_webservers.yamlUtilisation des Variables d’Ansible
Section intitulée « Utilisation des Variables d’Ansible »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).
- Dans le playbook précédent, remplacez
machinepar la concaténation des variablesansible_os_familyetinventory_hostname.
Utilisation des Conditions dans un Playbook
Section intitulée « Utilisation des Conditions dans un Playbook »Les conditions vous permettent d’exécuter des tâches spécifiques uniquement si certaines conditions sont remplies.
Conditions Simples
Section intitulée « Conditions Simples »- Modifiez le fichier
install_webservers.yamlpour 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>"- 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 :
ansible-playbook install_webservers.yamlConditions Complexes
Section intitulée « Conditions Complexes »- Modifiez le fichier
install_webservers.yamlpour 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>"- Exécutez à nouveau le playbook et observez le résultat.
Utilisation de changed_when et failed_when
Section intitulée « Utilisation de changed_when et failed_when »Utilisation de changed_when
Section intitulée « Utilisation de changed_when »La directive changed_when vous permet de spécifier manuellement si une tâche
doit être considérée comme ayant effectué un changement.
- 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- 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 :
ansible-playbook install_webservers.yamlUtilisation de failed_when
Section intitulée « Utilisation de failed_when »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.
- 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>"- 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 :
ansible-playbook install_webservers.yamlInstallation et Utilisation de ansible-lint
Section intitulée « Installation et Utilisation de ansible-lint »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.
Installation de ansible-lint
Section intitulée « Installation de ansible-lint »- Installez ansible-lint à l’aide de pip :
pip install ansible-lint --user- Vérifiez que l’installation a réussi en exécutant :
ansible-lint --versionUtilisation de ansible-lint
Section intitulée « Utilisation de ansible-lint »- Pour analyser votre playbook avec
ansible-lint, exécutez la commande suivante :
ansible-lint install_webservers.yaml- ansible-lint analysera votre playbook et renverra une liste de recommandations ou d’erreurs à corriger.
Validation du TP
Section intitulée « Validation du TP »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.
Challenge
Section intitulée « Challenge »Corriger les erreurs retournées par ansible-lint