Funk-lab/admin/ops/ansible.md
Alkatrazz 40fd7f0868 docs: synchroniser la doc avec l'état réel du cluster (revue Ansible + incident Qdrant)
- ops/ansible.md : tableau complet des rôles par playbook (15 storage-01, 6 gpu-01),
  caveat hermes_agent, note lm_studio inutilisé
- ia/hermes-auto-improve.md : NOUVEAU — doc du worker déployé (trigger :9095,
  modes du script, endpoints, PR squash, pièges connus)
- k8s/n8n.md : workflow 3 "Hermes Doc Worker" documenté (22h, /trigger/all,
  boucle de polling), clé API → vault
- incidents.md : Qdrant crash-loop depuis 2026-06-05 (segment funk-docs corrompu,
  invisible dans --state=failed) + procédure de réparation
- ia/rag.md : bandeau RAG HS
- CLAUDE.md : état 2026-06-10, rôle hermes_auto_improve, 3 workflows n8n,
  vault complet (n8n_api_key, Gmail au lieu de Brevo), section auto-improve
- README.md : lien admin/ops/cluster.md corrigé, arborescence complète
  (tools/, admin/, progress/, skills), roadmap à jour
- PROGRESS.md : entrée 2026-05-29 (migration NVMe) qui existait sans être référencée
- ansible : suppression effective des templates daily timer (cleanup b9be63c)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-10 15:11:53 +02:00

150 lines
5.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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) :
### `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` | Stockage objet S3 |
| `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 ×3 : GPU `:1234`, CPU `:1236`/`:1237` |
| `node_exporter` | `node_exporter` | Métriques Prometheus (+ rocm power) |
> ⚠️ Le rôle `lm_studio` existe encore dans `ansible/roles/` mais n'est référencé par **aucun** playbook (remplacé par `llama_server` en 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
```bash
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
```bash
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
```bash
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)
```bash
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
```bash
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)
```bash
cd ansible/
../.venv/bin/ansible-playbook playbooks/storage-01.yml --check --diff
```
### Débugger une variable
```bash
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)
```bash
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
```bash
# 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 |