Funk-lab/admin/ops/ansible.md
ALI YESILKAYA 470c69881c
chore(gpu-01): retire les serveurs llama CPU system/monitor/dev (inutilisés) (#31)
Trois instances llama-server CPU manuelles (hors Ansible) tournaient sur gpu-01
sans servir : déjà orphelines de LiteLLM (alias absents de config.yaml, d'où le
bruit "Invalid model name"). Suppression complète :

gpu-01 (opérationnel, déjà fait) :
- systemctl disable --now + rm des units llama-server-{system,monitor,dev}
- ports firewall 1235/1236/1237 fermés

Repo :
- monitoring : scrape jobs (values.yaml) + alertes LlamaServer{System,Monitor}Down
  (alerts-ai.yaml) retirés → plus de "target down"/alertes fantômes ; panneaux de
  statut dashboard-infrastructure recyclés (system→llama-embed, monitor supprimé).
- docs admin/ + hermes-skills (souls funk-ai/brain, SKILL agent-delegation) mises à
  jour : inventaire modèles, profils Hermès system/monitor sans backend (à repointer
  sur qwen3-8b), litellm, ops, monitoring.

Les profils Hermès system/monitor existent toujours mais sans backend dédié.
Dashboards Grafana dashboard-ai (panneaux graphiques CPU) laissés tels quels
(cosmétique, séries vides, aucune alerte).

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-20 13:25:50 +02:00

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 + embed CPU :1238 (nomic). Les ex-instances CPU :1235/:1236/:1237 (dev/system/monitor) ont été supprimées le 2026-06-20
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

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