Documente la reprise Codex Claude pour Set-OPS

This commit is contained in:
Daniel Allaire 2026-06-20 15:26:46 -04:00
parent e8299dfc62
commit 8fac83bcdb
3 changed files with 484 additions and 12 deletions

View file

@ -9,3 +9,53 @@
- Rôles de hardening template-safe.
- Playbook de vérification.
- Playbook de nettoyage final avant conversion en template.
# CHANGELOG — Set-OPS
## 2026-06-20
### Contexte
- Clarification : `Set-OPS` est le dépôt global dexploitation Ansible de Chezlepro Inc.
- Clarification : le template Debian 13 Proxmox est un sous-ensemble du dépôt, pas sa finalité unique.
- Clarification : les services applicatifs spécialisés doivent être installés sur les clones par des playbooks dédiés, pas directement dans le template.
### Ajouté
- Ajout des directives renforcées dans `AGENTS.md` :
- validation Ansible obligatoire ;
- vérification des handlers Ansible ;
- interdiction de déclarer un playbook prêt si `--syntax-check` échoue ;
- préférence pour les correctifs ciblés au lieu des régénérations massives ;
- rappel que `Set-OPS` ne doit pas être restructuré autour dun seul besoin ponctuel.
- Ajout dune logique de template Debian 13 Proxmox :
- `playbooks/vm_templates/debian13_proxmox_prepare.yml` ;
- `playbooks/vm_templates/debian13_proxmox_verify.yml` ;
- `playbooks/vm_templates/debian13_proxmox_cleanup.yml`.
- Ajout dune couche de hardening template-safe :
- AppArmor ;
- auditd ;
- fail2ban SSH ;
- unattended-upgrades ;
- journald ;
- sysctl de sécurité ;
- nftables installé et préparé, mais désactivé par défaut dans le template.
### Modifié
- Renforcement attendu de `CLAUDE.md` pour rappeler que `AGENTS.md` est la source dautorité principale.
- Clarification du comportement attendu de Claude Code :
- lire lexistant avant modification ;
- vérifier `git status --short` ;
- ne pas faire de régénération massive sans demande explicite ;
- valider les playbooks touchés ;
- signaler les tests non exécutés ;
- mettre à jour `CHANGELOG.md` si pertinent.
### Corrigé à appliquer
- Vérifier tous les rôles contenant `notify`.
- Ajouter les handlers manquants dans les rôles concernés, notamment :
- `roles/ssh_baseline/handlers/main.yml` ;
- `roles/ssh_hardening/handlers/main.yml`.
### À valider
- Vérifier que chaque `notify` pointe vers un handler existant.
- Relancer le playbook de préparation du template.
- Lancer le playbook de vérification.
- Ne pas lancer le nettoyage final avant validation complète de la VM.

249
CLAUDE.md
View file

@ -1,19 +1,244 @@
# CLAUDE.md — Set-OPS
Claude Code doit lire et respecter `AGENTS.md`.
## Instruction principale
`AGENTS.md` est la source d'autorité principale.
Claude Code doit lire et respecter `AGENTS.md` avant toute modification.
Avant modification :
`AGENTS.md` est la source dautorité principale du dépôt.
1. Lire `AGENTS.md`.
2. Lire `README.md`, `CHANGELOG.md` et `ansible.cfg`.
3. Vérifier `git status --short`.
4. Proposer le plus petit changement utile.
En cas de contradiction entre `CLAUDE.md` et `AGENTS.md`, suivre `AGENTS.md`.
Après modification :
---
1. Résumer les fichiers modifiés.
2. Indiquer les commandes de validation.
3. Signaler ce qui n'a pas été testé.
4. Mettre à jour `CHANGELOG.md` si pertinent.
## Rôle du dépôt
`Set-OPS` est le dépôt Ansible global dexploitation de Chezlepro Inc.
Le template Debian 13 Proxmox est seulement un sous-ensemble du dépôt. Ne pas restructurer tout le dépôt autour de ce seul chantier.
---
## Règle dor IA
Un seul agent IA travaille dans ce dépôt à la fois.
- Soit Codex.
- Soit Claude Code.
- Jamais les deux simultanément.
---
## Avant toute modification
Exécuter ou demander léquivalent de :
```bash
git status --short
find . -maxdepth 3 -type f | sort
```
Lire au minimum :
```text
AGENTS.md
README.md
CHANGELOG.md
ansible.cfg
```
Lire aussi les fichiers directement concernés avant de les modifier.
Ne pas remplacer massivement larborescence sans demande explicite.
Préférer un correctif minimal ciblé.
---
## Validation Ansible obligatoire
Avant de dire quun changement est prêt, exécuter au minimum le `--syntax-check` du playbook touché.
Pour le template Debian 13 Proxmox :
```bash
ansible-playbook -i inventories/lab/hosts.yml playbooks/vm_templates/debian13_proxmox_prepare.yml --syntax-check
```
Si `ansible-lint` est disponible :
```bash
ansible-lint
```
Si `ansible-lint` nest pas disponible, le signaler clairement.
Ne jamais déclarer un playbook prêt si la validation échoue.
---
## Handlers Ansible
Chaque rôle qui utilise `notify` doit contenir son handler dans le rôle lui-même.
Exemple :
```text
roles/ssh_baseline/tasks/main.yml
roles/ssh_baseline/handlers/main.yml
```
Commandes utiles :
```bash
find roles -path '*/tasks/*.yml' -exec grep -H "notify:" {} \;
find roles -path '*/handlers/main.yml' -print
```
Avant de livrer un rôle, vérifier que chaque handler référencé existe réellement.
---
## Actions destructives
Toute action destructrice ou risquée doit exiger une confirmation explicite.
Exemple :
```yaml
confirm_destructive_action: true
```
Sont considérées risquées :
- modification bloquante de SSH ;
- activation ou modification dun pare-feu ;
- suppression dutilisateurs ;
- suppression de paquets critiques ;
- formatage disque ;
- modification de partitions ;
- redémarrage massif ;
- purge de données ;
- changement réseau pouvant couper laccès ;
- modification dun hyperviseur Proxmox ;
- opération sur stockage, iSCSI, ZFS, Ceph ou TrueNAS.
Sans confirmation explicite, refuser lexécution.
---
## Template Debian 13 Proxmox
Le template doit rester un socle commun.
Il peut contenir :
- Debian minimal ;
- SSH ;
- sudo ;
- compte technique `ansible` ;
- sudo NOPASSWD pour `ansible` lorsque requis ;
- `qemu-guest-agent` ;
- `cloud-init` ;
- `cloud-guest-utils` ;
- chrony ;
- outils de diagnostic ;
- hardening raisonnable ;
- AppArmor ;
- auditd ;
- fail2ban SSH ;
- unattended-upgrades ;
- journald ;
- sysctl de sécurité ;
- nftables installé et préparé, mais non activé par défaut.
Il ne doit pas contenir par défaut :
- NGINX ;
- PostgreSQL ;
- MariaDB ;
- Docker ;
- Podman ;
- Redis ;
- GitLab ;
- Nextcloud ;
- monitoring complet ;
- données propres à un clone ;
- secrets ;
- clés privées.
---
## SSH
Pendant la construction du template :
```text
PasswordAuthentication yes
PermitRootLogin no
PubkeyAuthentication yes
```
État cible après validation des clés SSH :
```text
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
```
Ne jamais désactiver lauthentification par mot de passe avant davoir confirmé que laccès par clé fonctionne.
Toute modification SSH doit valider la configuration avant rechargement :
```bash
sshd -t
```
---
## Pare-feu
Ne pas activer un pare-feu générique dans le template sans confirmation explicite.
`nftables` peut être installé et préparé, mais rester désactivé dans le template.
Lactivation doit être faite sur un clone ou un serveur final, avec des règles adaptées au rôle du serveur.
---
## Cloud-init
Cloud-init donne lidentité initiale dun clone :
- hostname ;
- utilisateur initial ;
- clé SSH ;
- IP ;
- passerelle ;
- DNS ;
- agrandissement de la partition racine.
Cloud-init ne remplace pas Ansible.
Séparation attendue :
```text
Proxmox + cloud-init : identité initiale de la VM
Set-OPS + Ansible : configuration réelle du serveur
```
---
## Après modification
Répondre avec :
1. fichiers créés ;
2. fichiers modifiés ;
3. commandes de validation exécutées ;
4. résultat des validations ;
5. tests non exécutés ;
6. limites connues ;
7. entrée `CHANGELOG.md` ajoutée ou raison de labsence dentrée.
Ne pas dire que cest prêt si ce nest pas validé.

View file

@ -0,0 +1,197 @@
# Mise à jour pour Codex et Claude Code — Set-OPS
## État du dépôt
`Set-OPS` est le dépôt Ansible global dexploitation de Chezlepro Inc.
Il ne sert pas seulement à créer un template Proxmox. Il doit contenir progressivement les playbooks, rôles, inventaires et templates nécessaires à tous les systèmes de Chezlepro Inc.
Le chantier en cours est le template Debian 13 Proxmox.
---
## Fichiers de gouvernance
Les fichiers suivants doivent être lus avant toute modification :
```text
AGENTS.md
CLAUDE.md
README.md
CHANGELOG.md
ansible.cfg
```
`AGENTS.md` est la source dautorité principale.
---
## État fonctionnel visé pour le template Debian 13
Le template Debian 13 Proxmox doit contenir :
- Debian minimal ;
- SSH ;
- sudo ;
- compte `ansible` ;
- sudo NOPASSWD pour `ansible` ;
- `qemu-guest-agent` ;
- `cloud-init` ;
- `cloud-guest-utils` ;
- chrony ;
- outils de diagnostic ;
- AppArmor ;
- auditd ;
- fail2ban SSH ;
- unattended-upgrades ;
- journald ;
- sysctl de sécurité ;
- nftables installé et préparé, mais désactivé par défaut.
Il ne doit pas contenir :
- NGINX ;
- PostgreSQL ;
- MariaDB ;
- Docker ;
- Podman ;
- Redis ;
- GitLab ;
- Nextcloud ;
- monitoring complet ;
- secrets ;
- clés privées ;
- données propres à un clone.
---
## Incident récent à corriger
Le playbook :
```text
playbooks/vm_templates/debian13_proxmox_prepare.yml
```
a échoué sur un handler manquant :
```text
ERROR! The requested handler 'Validate and reload ssh' was not found
```
Le problème est relié à des rôles contenant :
```yaml
notify: Validate and reload ssh
```
sans handler local correspondant.
Rôles à vérifier en priorité :
```text
roles/ssh_baseline/
roles/ssh_hardening/
```
Chaque rôle utilisant `notify` doit avoir son propre fichier :
```text
roles/<role>/handlers/main.yml
```
---
## Correctif minimal attendu
Ne pas régénérer tout le dépôt.
Créer ou corriger :
```text
roles/ssh_baseline/handlers/main.yml
roles/ssh_hardening/handlers/main.yml
```
Contenu attendu :
```yaml
---
- name: Validate and reload ssh
block:
- name: Valider la configuration SSH
ansible.builtin.command: sshd -t
changed_when: false
- name: Recharger SSH
ansible.builtin.systemd:
name: ssh
state: reloaded
```
Puis vérifier tous les `notify` :
```bash
find roles -path '*/tasks/*.yml' -exec grep -H "notify:" {} \;
find roles -path '*/handlers/main.yml' -print
```
---
## Validation obligatoire
Après correction :
```bash
ansible-playbook -i inventories/lab/hosts.yml playbooks/vm_templates/debian13_proxmox_prepare.yml --syntax-check
```
Puis relancer :
```bash
ansible-playbook -i inventories/lab/hosts.yml playbooks/vm_templates/debian13_proxmox_prepare.yml
```
Puis vérifier :
```bash
ansible-playbook -i inventories/lab/hosts.yml playbooks/vm_templates/debian13_proxmox_verify.yml
```
---
## Nettoyage final
Ne lancer le nettoyage final que lorsque la VM est validée :
```bash
ansible-playbook -i inventories/lab/hosts.yml playbooks/vm_templates/debian13_proxmox_cleanup.yml -e confirm_template_cleanup=true
```
Ensuite seulement :
```bash
sudo shutdown -h now
```
Puis côté Proxmox :
```bash
qm template VMID
```
---
## Règle de conduite
Ne pas faire de régénération massive.
Lire lexistant.
Corriger petit.
Valider.
Mettre à jour `CHANGELOG.md`.
Résumer clairement ce qui a été fait et ce qui na pas été testé.