mirror of
https://github.com/Alkatrazz24/Funk-lab.git
synced 2026-07-08 21:44:42 +02:00
Audit complet des rôles vs état réel du cluster. Chaque rôle a maintenant un README.md : but, variables (défauts + surcharges host_vars/vault), handlers, vérifications, caveats. Gaps découverts et documentés : - minio : rôle VIDE (tasks/main.yml sans aucune tâche), service inactif — placeholder à implémenter ou retirer (ports 9000/9001 ouverts pour rien) - llama_server : ne gère que l'instance GPU :1234 — les services CPU llama-server-system :1236 et llama-server-monitor :1237 sont créés à la main sur gpu-01, non reproductibles par make apply-gpu (+ un llama-server-dev.service non documenté présent sur l'hôte) - hermes_auto_improve : defaults port/repo/branch/log non consommés (valeurs en dur dans les scripts), défaut branch obsolète - lm_studio : README de dépréciation, candidat suppression Tables admin/ops/ansible.md, README.md et CLAUDE.md corrigées en conséquence. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
5.5 KiB
5.5 KiB
Ansible — Commandes d'administration
Toutes les commandes se lancent depuis la racine du repo (Funk-lab/).
Le venv est dans .venv/, le Makefile fournit les raccourcis.
Playbooks et rôles
Deux playbooks, un par machine (le site.yml les enchaîne).
Chaque rôle a un README.md détaillé dans ansible/roles/<nom>/ (variables, caveats, gaps).
playbooks/storage-01.yml — hosts gateway (15 rôles)
| Rôle | Tag | Ce qu'il gère |
|---|---|---|
hermes_user |
hermes_user |
User hermes + clés SSH partagées entre hosts |
common |
common |
Paquets de base, sécurité, NTP |
gateway |
gateway |
nftables + NAT (routeur du LAN cluster) |
dnsmasq |
dnsmasq |
DNS local lab.local + wildcard → Traefik |
nfs_server |
nfs_server |
Exports NFS (modèles LLM, volumes k8s) |
qdrant |
qdrant |
Base vectorielle (RAG) — :6333 |
postgresql |
postgresql |
PG 16 — bases hermes, litellm, n8n, openwebui, grafana |
minio |
minio |
⚠️ Rôle vide (placeholder) — service inactif, à implémenter ou retirer |
litellm |
litellm |
Proxy LLM :4000 + script ask-agent |
hermes_agent |
hermes_agent |
Agent Hermes + skills + souls |
rag |
rag |
Scripts rag-ingest / rag-query + docs RAG |
node_exporter |
node_exporter |
Métriques Prometheus |
alertmanager_webhook |
alertmanager_webhook |
Pont AlertManager → ask-agent :9093 |
postfix_relay |
postfix_relay |
SMTP sortant via Gmail (App Password) |
hermes_auto_improve |
hermes_auto_improve |
Worker analyse doc + trigger server :9095 (schedulé par n8n à 22h) |
playbooks/gpu-01.yml — hosts gpu_hosts (6 rôles)
| Rôle | Tag | Ce qu'il gère |
|---|---|---|
hermes_user |
hermes_user |
User hermes (clé partagée avec storage-01) |
common |
common |
Paquets de base, sécurité, NTP |
rocm |
rocm |
Stack GPU AMD (ROCm 7.x, HSA_OVERRIDE_GFX_VERSION=10.3.0) |
nfs_client |
nfs_client |
Montage /mnt/models depuis storage-01 |
llama_server |
llama_server |
llama-server GPU :1234 uniquement — ⚠️ les instances CPU :1236/:1237 (system/monitor) sont des services créés à la main sur gpu-01, hors IaC |
node_exporter |
node_exporter |
Métriques Prometheus (+ rocm power) |
⚠️ Le rôle
lm_studioexiste encore dansansible/roles/mais n'est référencé par aucun playbook (remplacé parllama_serveren mai 2026). Candidat à la suppression.
Caveat premier déploiement — hermes_agent
Sur un hôte vierge, il faut deux runs consécutifs : le premier installe le binaire (curl | bash), le second applique la config (conditionnelle à l'existence du binaire).
Raccourcis Makefile
make ping # Vérifie que toutes les machines répondent
make check # Dry-run complet (simule sans appliquer)
make apply # Applique tous les playbooks (storage-01 + gpu-01)
make apply-storage # Applique uniquement storage-01
make apply-gpu # Applique uniquement gpu-01
make install # Installe ansible-core + collections Galaxy
make vault-encrypt # Chiffre group_vars/all/vault.yml
make vault-edit # Édite le vault (déchiffre → édite → rechiffre)
make vault-view # Affiche le contenu du vault déchiffré
Commandes Ansible directes
Cibler un rôle spécifique
cd ansible/
# Via tag (si les rôles ont des tags)
../.venv/bin/ansible-playbook playbooks/storage-01.yml --tags dnsmasq
# Via limite d'hôte
../.venv/bin/ansible-playbook playbooks/site.yml -l gpu-01
Exécuter une commande ad-hoc sur une machine
cd ansible/
../.venv/bin/ansible storage-01 -m shell -a "systemctl status dnsmasq"
../.venv/bin/ansible all -m shell -a "uptime"
../.venv/bin/ansible gpu_hosts -m shell -a "free -h"
Collecter les facts d'une machine (variables système détectées)
cd ansible/
../.venv/bin/ansible storage-01 -m setup
../.venv/bin/ansible storage-01 -m setup -a "filter=ansible_interfaces"
../.venv/bin/ansible storage-01 -m setup -a "filter=ansible_default_ipv4"
Vérifier l'inventaire
cd ansible/
../.venv/bin/ansible-inventory --list # JSON complet
../.venv/bin/ansible-inventory --graph # Arbre des groupes/hôtes
Dry-run avec diff (voir exactement ce qui changerait)
cd ansible/
../.venv/bin/ansible-playbook playbooks/storage-01.yml --check --diff
Débugger une variable
cd ansible/
../.venv/bin/ansible storage-01 -m debug -a "var=lan_interface"
../.venv/bin/ansible storage-01 -m debug -a "var=hostvars['storage-01']"
Augmenter la verbosité (debug complet)
cd ansible/
../.venv/bin/ansible-playbook playbooks/storage-01.yml -v # output étendu
../.venv/bin/ansible-playbook playbooks/storage-01.yml -vvv # connexions SSH incluses
Vault Ansible
# Chiffrer un fichier
cd ansible/
../.venv/bin/ansible-vault encrypt group_vars/all/vault.yml
# Chiffrer une valeur à la volée (copier-coller dans vault.yml)
../.venv/bin/ansible-vault encrypt_string 'mon_mot_de_passe' --name 'vault_postgres_password'
# Déchiffrer temporairement pour voir
../.venv/bin/ansible-vault view group_vars/all/vault.yml
# Changer le mot de passe vault
../.venv/bin/ansible-vault rekey group_vars/all/vault.yml
Groupes d'hôtes disponibles
| Groupe | Machines |
|---|---|
all |
storage-01, gpu-01 |
gateway |
storage-01 |
gpu_hosts |
gpu-01 |
almalinux |
storage-01, gpu-01 |