7.2 KiB
Résumé : Filtrage des Playbooks par Host/Group
✅ Implémentation Complétée
Le système de filtrage des playbooks basé sur le champ hosts a été entièrement implémenté et testé.
🎯 Objectif
Assurer que seuls les playbooks compatibles avec un hôte ou groupe spécifique peuvent être exécutés, en se basant sur le champ hosts défini dans chaque playbook Ansible.
📋 Exemple Concret
Playbook backup-proxmox-config.yml
---
- name: Backup Serveurs Proxmox Configuration files
hosts: role_proxmox # ← Restriction au groupe role_proxmox
become: true
# ...
Résultat :
-
✅ Peut être exécuté sur :
- Groupe
role_proxmox - Hôtes membres :
ali2v.xeon.home,hp.nas.home,hp2.i7.home, etc.
- Groupe
-
❌ Ne peut PAS être exécuté sur :
- Hôte
raspi.4gb.home(membre derole_sbc, pas derole_proxmox) - Groupe
env_homelab(contient des hôtes hors derole_proxmox)
- Hôte
🔧 Modifications Apportées
1. Extraction du Champ hosts
Fichier : app/app_optimized.py
La méthode AnsibleService.get_playbooks() extrait maintenant le champ hosts de chaque playbook :
playbook_info = {
"name": pb.stem,
"filename": pb.name,
"hosts": "all", # Valeur par défaut
"category": "general",
"subcategory": "other",
# ...
}
# Lecture du champ 'hosts' depuis le YAML
if 'hosts' in play:
playbook_info['hosts'] = play['hosts']
2. Fonction de Compatibilité
Nouvelle méthode : is_target_compatible_with_playbook(target, playbook_hosts)
Vérifie la compatibilité selon les règles :
hosts: all→ compatible avec touthosts: role_proxmox→ compatible avec le groupe et ses hôteshosts: server.home→ compatible uniquement avec cet hôte
3. Filtrage des Playbooks
Nouvelle méthode : get_compatible_playbooks(target)
Retourne uniquement les playbooks compatibles avec une cible donnée.
4. Endpoint de Listing Amélioré
Endpoint : GET /api/ansible/playbooks?target={host_ou_groupe}
# Sans filtre - tous les playbooks
curl http://localhost:8000/api/ansible/playbooks
# Avec filtre - seulement les playbooks compatibles avec role_proxmox
curl http://localhost:8000/api/ansible/playbooks?target=role_proxmox
5. Validation à l'Exécution
Endpoint : POST /api/ansible/execute
Validation automatique avant l'exécution :
{
"playbook": "backup-proxmox-config.yml",
"target": "raspi.4gb.home" // ❌ Erreur 400 - incompatible
}
Message d'erreur :
Le playbook 'backup-proxmox-config.yml' (hosts: role_proxmox)
n'est pas compatible avec la cible 'raspi.4gb.home'.
Ce playbook ne peut être exécuté que sur: role_proxmox
6. Validation des Schedules
Endpoint : POST /api/schedules
Même validation lors de la création de tâches planifiées.
🧪 Tests
Script de test : test_playbook_filtering.py
python test_playbook_filtering.py
Résultats :
✓ PASS | Playbook Proxmox sur groupe role_proxmox
✓ PASS | Playbook Proxmox sur hôte du groupe role_proxmox
✓ PASS | Playbook Proxmox sur hôte hors groupe role_proxmox
✓ PASS | Playbook Proxmox sur groupe env_homelab
✓ PASS | Playbook 'all' sur groupe all
✓ PASS | Playbook 'all' sur n'importe quel groupe
✓ PASS | Playbook 'all' sur n'importe quel hôte
✓ PASS | Playbook 'all' sur hôte quelconque
Tests terminés! (8/8 réussis)
📊 Inventaire Actuel
Groupes et Hôtes
Groupe role_proxmox :
ali2v.xeon.homehp.nas.homehp2.i7.homehp3.i5.homemimi.pc.home
Groupe role_sbc :
orangepi.pc.homeraspi.4gb.homeraspi.8gb.home
Playbooks
| Playbook | Champ hosts |
Description |
|---|---|---|
backup-proxmox-config.yml |
role_proxmox |
Backup configuration Proxmox |
bootstrap-host.yml |
all |
Bootstrap initial d'un hôte |
health-check.yml |
all |
Vérification de santé |
vm-upgrade.yml |
all |
Mise à jour des packages |
vm-reboot.yml |
all |
Redémarrage |
🎨 Utilisation dans l'Interface
Scénario 1 : Sélection d'un Hôte Proxmox
- Utilisateur sélectionne
ali2v.xeon.home - Interface appelle :
GET /api/ansible/playbooks?target=ali2v.xeon.home - Playbooks affichés :
- ✅
backup-proxmox-config.yml(compatible via role_proxmox) - ✅
health-check.yml(compatible via all) - ✅
vm-upgrade.yml(compatible via all) - etc.
- ✅
Scénario 2 : Sélection d'un Hôte SBC
- Utilisateur sélectionne
raspi.4gb.home - Interface appelle :
GET /api/ansible/playbooks?target=raspi.4gb.home - Playbooks affichés :
- ❌
backup-proxmox-config.yml(NON affiché - incompatible) - ✅
health-check.yml(compatible via all) - ✅
vm-upgrade.yml(compatible via all) - etc.
- ❌
Scénario 3 : Tentative d'Exécution Incompatible
- Utilisateur essaie d'exécuter
backup-proxmox-config.ymlsurraspi.4gb.home - API retourne erreur 400 avec message explicatif
- Interface affiche le message d'erreur à l'utilisateur
📝 Bonnes Pratiques
Pour les Nouveaux Playbooks
Toujours définir explicitement le champ hosts :
---
- name: Mon nouveau playbook
hosts: role_proxmox # ← Spécifier le groupe cible
become: true
vars:
category: maintenance
subcategory: system
tasks:
# ...
Pour les Playbooks Universels
Utiliser hosts: all pour les playbooks qui peuvent s'exécuter partout :
---
- name: Health check
hosts: all # ← Compatible avec tous les hôtes
become: false
# ...
🔍 Dépannage
Problème : Playbook non visible pour un hôte
Vérifier :
- Le champ
hostsdans le playbook - L'appartenance de l'hôte aux groupes dans
ansible/inventory/hosts.yml
Exemple :
# Voir les playbooks compatibles avec un hôte
curl http://localhost:8000/api/ansible/playbooks?target=ali2v.xeon.home
Problème : Erreur lors de l'exécution
Message : "Le playbook X n'est pas compatible avec la cible Y"
Solution :
- Utiliser le filtrage pour voir les playbooks compatibles
- Choisir un playbook compatible ou changer la cible
📚 Documentation
- Documentation complète :
PLAYBOOK_FILTERING.md - Script de test :
test_playbook_filtering.py - Code source :
app/app_optimized.py(classeAnsibleService)
✨ Résumé des Bénéfices
- ✅ Sécurité : Empêche l'exécution de playbooks sur des hôtes incompatibles
- ✅ Clarté : Messages d'erreur explicites en cas d'incompatibilité
- ✅ Filtrage : Interface peut afficher uniquement les playbooks pertinents
- ✅ Validation : Contrôles à tous les niveaux (listing, exécution, schedules)
- ✅ Flexibilité : Support de
all, groupes, hôtes, et sous-groupes
🚀 Prochaines Étapes
L'implémentation est complète et testée. L'interface peut maintenant :
- Appeler
/api/ansible/playbooks?target=Xpour filtrer les playbooks - Afficher uniquement les playbooks compatibles dans les listes déroulantes
- Gérer les erreurs de compatibilité avec des messages clairs
- Créer des schedules avec validation automatique
Date : 5 décembre 2024
Statut : ✅ Implémentation complétée et testée
Tests : 8/8 réussis