Introduction
Les variables vous permettent de conserver des données en dehors de la logique de vos tâches. Les variables de groupe fournissent des valeurs partagées, les variables d'hôte permettent de surcharger les paramètres pour des hôtes individuels, et les faits (facts) ajoutent des données système découvertes automatiquement.
Dans ce laboratoire, vous allez définir des variables de groupe et d'hôte, collecter des faits RHEL et générer un rapport par alias d'hôte.
Créer un projet de pratique pour les variables
Dans cette étape, vous allez créer un projet avec des alias d'hôtes web et des répertoires de variables.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory/group_vars,inventory/host_vars,playbooks,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[web]
web1 ansible_connection=local
web2 ansible_connection=local
EOF
Les deux hôtes sont des alias locaux, mais Ansible résout toujours les variables séparément pour chaque nom d'inventaire. Cela vous permet de pratiquer les surcharges spécifiques aux hôtes sans avoir besoin de machines virtuelles supplémentaires.
Définir des variables de groupe partagées
Dans cette étape, vous allez définir des valeurs qui s'appliquent à chaque hôte du groupe web.
Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible. Cela garantit la stabilité des commandes, même si LabEx exécute chaque étape séparément.
cd /home/labex/project/rhce-ansible
cat > inventory/group_vars/web.yml <<'EOF'
service_name: demo-web
service_port: 8080
EOF
Ces valeurs s'appliquent à tous les hôtes du groupe web. À ce stade, web1 et web2 utiliseraient tous deux le port 8080.
cat inventory/group_vars/web.yml
Surcharger une variable d'hôte
Dans cette étape, vous allez surcharger service_port uniquement pour web2. Les variables d'hôte sont plus spécifiques que les variables de groupe.
Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
cat > inventory/host_vars/web2.yml <<'EOF'
service_port: 9090
EOF
Ce fichier est plus spécifique que group_vars/web.yml, donc seul web2 devrait utiliser 9090. web1 devrait continuer à utiliser la valeur du groupe.
ansible-inventory --host web2
Inspectez la sortie de l'hôte résolu et recherchez service_port. Cette commande affiche la valeur finale qu'Ansible utilisera avant l'exécution de tout playbook.
Écrire un playbook de rapport utilisant les faits
Dans cette étape, vous allez rédiger un playbook qui combine les variables d'inventaire avec les faits collectés. Le fait ansible_distribution_major_version provient de l'hôte géré.
Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
cat > playbooks/report-vars.yml <<'EOF'
---
- name: Render variable and fact reports
hosts: web
gather_facts: true
tasks:
- name: Write per-host variable report
ansible.builtin.copy:
dest: "/home/labex/project/rhce-ansible/reports/{{ inventory_hostname }}.txt"
content: |
host={{ inventory_hostname }}
service={{ service_name }}
port={{ service_port }}
rhel_major={{ ansible_distribution_major_version }}
mode: '0644'
EOF
Le rapport combine deux sources de données : les variables d'inventaire telles que service_port et les faits collectés tels que ansible_distribution_major_version. Il s'agit d'un modèle courant lorsque la configuration dépend à la fois de l'intention déclarée et des détails découverts sur le système.
ansible-playbook playbooks/report-vars.yml --syntax-check
Exécuter le rapport de variables
Dans cette étape, vous allez exécuter le playbook et comparer les rapports. Les valeurs partagées doivent correspondre, tandis que le port doit différer pour web2.
Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
ansible-playbook playbooks/report-vars.yml | tee reports/report-run.txt
L'exécution doit d'abord collecter les faits, puis rédiger un rapport pour chaque hôte. Un récapitulatif réussi avec failed=0 signifie que les deux alias d'hôtes ont généré leurs rapports.
cat reports/web1.txt reports/web2.txt
Comparez les lignes port= : web1 devrait afficher 8080, tandis que web2 devrait afficher 9090. La valeur partagée service= doit être identique dans les deux rapports.
Résumé
Vous avez défini des variables de groupe, surchargé une valeur avec des variables d'hôte, collecté des faits et généré des rapports prouvant la manière dont Ansible a résolu chaque valeur.


