Introduction
Le contenu Ansible peut provenir de rôles et de collections. Dans les environnements de laboratoire restreints, les archives de contenu locales sont plus sûres que les téléchargements depuis Internet.
Dans ce laboratoire, vous allez empaqueter un rôle local, l'installer via un fichier de dépendances (requirements), inspecter les collections préinstallées et appliquer le rôle installé.
Créer un projet d'installation de contenu
Dans cette étape, vous allez créer un projet incluant la source du contenu local, le rôle installé, le playbook et les répertoires de sortie.
cd /home/labex/project
mkdir -p rhce-ansible/{inventory,roles,vendor_src/local_message/{tasks,meta},playbooks,managed,reports}
cd rhce-ansible
cat > ansible.cfg <<'EOF'
[defaults]
inventory = ./inventory/hosts
roles_path = ./roles
host_key_checking = False
retry_files_enabled = False
EOF
cat > inventory/hosts <<'EOF'
[managed]
host ansible_connection=local
EOF
Ce laboratoire sépare la source du rôle du contenu du rôle installé. vendor_src/local_message représente le contenu que vous avez reçu ou créé, tandis que roles/local_message sera la copie installée que Ansible chargera réellement.
Créer une source de rôle locale
Dans cette étape, vous allez créer une source de rôle simple en dehors du répertoire roles installé. Cela simule la réception d'un contenu de rôle provenant d'une source de confiance.
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 > vendor_src/local_message/tasks/main.yml <<'EOF'
---
- name: Ensure local message directory exists
ansible.builtin.file:
path: /home/labex/project/rhce-ansible/managed/local-message
state: directory
mode: '0755'
- name: Write message from installed role
ansible.builtin.copy:
dest: /home/labex/project/rhce-ansible/managed/local-message/message.txt
content: |
installed_role=local_message
mode: '0644'
EOF
cat > vendor_src/local_message/meta/main.yml <<'EOF'
---
galaxy_info:
author: LabEx
description: Local role for RHCE Ansible prep
license: MIT
min_ansible_version: '2.16'
dependencies: []
EOF
La source du rôle présente la même structure de base qu'un rôle normal : la logique des tâches dans tasks/main.yml et les métadonnées du rôle dans meta/main.yml. La tâche écrit un message visible afin que vous puissiez vérifier que le rôle installé a bien été exécuté.
tar -czf vendor_src/local_message.tar.gz -C vendor_src local_message
L'archive simule un paquet de rôle hors ligne. L'utilisation d'une archive locale permet de garder le laboratoire déterministe tout en apprenant le flux de travail avec requirements.yml.
ls -l vendor_src/local_message.tar.gz
Installer le rôle à partir des dépendances
Dans cette étape, vous allez rédiger un fichier de dépendances de rôle qui pointe vers l'archive locale et l'installer dans roles.
Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
cat > requirements.yml <<'EOF'
---
roles:
- name: local_message
src: file:///home/labex/project/rhce-ansible/vendor_src/local_message.tar.gz
EOF
La source file:// indique à ansible-galaxy de pointer vers l'archive locale. Le principe est identique à l'utilisation d'une source distante, mais sans dépendre d'un accès réseau.
ansible-galaxy role install -r requirements.yml -p roles --force
L'option -r lit les dépendances, -p roles choisit le répertoire d'installation, et --force permet de rendre la commande répétable si vous relancez le laboratoire.
find roles/local_message -maxdepth 2 -type f -print
Vous devriez voir les fichiers tasks/main.yml et meta/main.yml du rôle installé. Le playbook utilisera le chemin du rôle installé, et non le répertoire vendor_src d'origine.
Inspecter le contenu d'une collection installée
Dans cette étape, vous allez inspecter une collection installée. L'image RHEL10 inclut déjà des collections courantes, ce qui permet à ce laboratoire d'éviter un téléchargement depuis Internet tout en démontrant la découverte des collections. Avant d'exécuter les commandes de cette étape, retournez dans le répertoire du projet Ansible.
cd /home/labex/project/rhce-ansible
ansible-galaxy collection list ansible.posix | tee reports/collection-list.txt
ansible-doc ansible.posix.acl | sed -n "1,20p"
Les collections regroupent des modules sous un espace de nommage. Ici, ansible.posix.acl désigne le module acl de la collection ansible.posix, et ansible-doc prouve qu'Ansible peut trouver sa documentation localement.
Appliquer le rôle installé
Dans cette étape, vous allez appliquer le rôle installé à partir du fichier de dépendances. Cela prouve qu'Ansible peut trouver et exécuter le contenu du rôle installé. 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/use-installed-role.yml <<'EOF'
---
- name: Use a locally installed role
hosts: managed
gather_facts: false
roles:
- role: local_message
EOF
Le playbook fait uniquement référence à local_message car roles_path pointe vers le répertoire d'installation. Cela rend le playbook indépendant de l'emplacement de l'archive.
ansible-playbook playbooks/use-installed-role.yml | tee reports/installed-role-run.txt
L'exécution doit se terminer avec failed=0 et créer le fichier de message à partir de la tâche du rôle installé.
cat managed/local-message/message.txt
Résumé
Vous avez empaqueté et installé un rôle local via requirements.yml, inspecté le contenu d'une collection installée et appliqué le rôle installé à partir d'un playbook.


