This repository has been archived on 2026-06-26. You can view files and clone it, but cannot push or open issues or pull requests.
Set-OPS/AGENTS.md

422 lines
9.4 KiB
Markdown
Raw Normal View History

2026-06-19 23:31:49 -04:00
# AGENTS.md — Set-OPS
## Rôle du dépôt
Ce dépôt contient les playbooks, rôles, inventaires et templates Ansible servant à construire, configurer, maintenir et documenter les serveurs de Chezlepro Inc.
`Set-OPS` est le dépôt global dexploitation de Chezlepro Inc.
2026-06-19 23:31:49 -04:00
Le template Debian 13 Proxmox est seulement un sous-ensemble du dépôt. Le dépôt ne doit jamais être restructuré autour dun seul besoin ponctuel.
2026-06-19 23:31:49 -04:00
---
## 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.
Tout changement significatif doit être consigné dans `CHANGELOG.md`.
---
## Principes
2026-06-19 23:31:49 -04:00
1. Toujours lire lexistant avant de modifier.
2. Ne jamais introduire de secret en clair.
3. Ne jamais casser lidempotence Ansible.
4. Ne jamais exécuter daction destructive sans confirmation explicite.
5. Préférer la simplicité à lingénierie excessive.
6. Documenter ce qui est utile à lexploitation réelle.
7. Préférer les correctifs ciblés aux régénérations massives.
8. Ne jamais supposer quun rôle est complet sans lavoir inspecté.
9. Ne jamais déclarer un playbook prêt si la validation minimale échoue.
2026-06-19 23:31:49 -04:00
---
## Sécurité
2026-06-19 23:31:49 -04:00
Ne jamais commiter :
2026-06-19 23:31:49 -04:00
- mots de passe ;
- clés privées SSH ;
- tokens API ;
- secrets non chiffrés ;
- fichiers `.env` sensibles ;
- certificats privés ;
- backups réels ;
- exports de production non anonymisés.
2026-06-19 23:31:49 -04:00
Les secrets doivent être gérés hors dépôt ou avec un mécanisme explicitement prévu, par exemple :
2026-06-19 23:31:49 -04:00
- Ansible Vault ;
- fichier local non versionné ;
- secret injecté hors dépôt ;
- gestionnaire de secrets approuvé.
2026-06-19 23:31:49 -04:00
---
2026-06-19 23:31:49 -04:00
## Actions destructives
2026-06-19 23:31:49 -04:00
Toute action destructive doit exiger une variable explicite, par exemple :
```yaml
confirm_destructive_action: true
```
Sont considérées comme destructives ou 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.
2026-06-19 23:31:49 -04:00
---
## Règle de modification du dépôt
2026-06-19 23:31:49 -04:00
Avant toute modification, exécuter ou demander léquivalent de :
2026-06-19 23:31:49 -04:00
```bash
git status --short
find . -maxdepth 3 -type f | sort
2026-06-19 23:31:49 -04:00
```
Ne pas remplacer massivement larborescence sans demande explicite.
Avant de modifier un fichier, lire son contenu actuel.
Après modification, indiquer clairement :
- les fichiers créés ;
- les fichiers modifiés ;
- les commandes de validation exécutées ;
- les tests non exécutés ;
- les limites connues.
2026-06-19 23:31:49 -04:00
---
## Validation Ansible obligatoire
2026-06-19 23:31:49 -04:00
Avant de proposer un changement comme terminé, vérifier au minimum la syntaxe du playbook touché.
2026-06-19 23:31:49 -04:00
Exemple pour le template Debian 13 Proxmox :
2026-06-19 23:31:49 -04:00
```bash
ansible-playbook -i inventories/lab/hosts.yml playbooks/vm_templates/debian13_proxmox_prepare.yml --syntax-check
2026-06-19 23:31:49 -04:00
```
Pour un autre playbook, remplacer le chemin par le playbook concerné.
2026-06-19 23:31:49 -04:00
Ne jamais déclarer un playbook prêt si `--syntax-check` échoue.
2026-06-19 23:31:49 -04:00
Si `ansible-lint` est disponible, lutiliser :
2026-06-19 23:31:49 -04:00
```bash
ansible-lint
2026-06-19 23:31:49 -04:00
```
Si `ansible-lint` nest pas disponible, le signaler clairement. Ne pas inventer un résultat.
2026-06-19 23:31:49 -04:00
---
## Règle pour les handlers Ansible
2026-06-19 23:31:49 -04:00
Chaque rôle qui utilise `notify` doit contenir son handler dans le rôle lui-même.
2026-06-19 23:31:49 -04:00
Exemple :
2026-06-19 23:31:49 -04:00
```text
roles/ssh_baseline/tasks/main.yml
roles/ssh_baseline/handlers/main.yml
```
2026-06-19 23:31:49 -04:00
Ne pas dépendre dun handler défini dans un autre rôle, sauf justification explicite.
Tout `notify` doit pointer vers un handler existant.
Commandes de vérification 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.
2026-06-19 23:31:49 -04:00
---
## Style Ansible attendu
2026-06-19 23:31:49 -04:00
Les playbooks doivent être :
2026-06-19 23:31:49 -04:00
- idempotents ;
- lisibles ;
- sobres ;
- compatibles Debian 13 sauf exception documentée ;
- testables avec `--check` autant que possible ;
- sécuritaires par défaut ;
- sans dépendances SaaS ou cloud inutiles.
2026-06-19 23:31:49 -04:00
Préférer les modules Ansible standards :
2026-06-19 23:31:49 -04:00
- `ansible.builtin.apt`
- `ansible.builtin.template`
- `ansible.builtin.copy`
- `ansible.builtin.service`
- `ansible.builtin.systemd`
- `ansible.builtin.lineinfile`
- `ansible.builtin.file`
- `ansible.builtin.user`
- `ansible.builtin.group`
2026-06-19 23:31:49 -04:00
Éviter `shell` et `command` sauf nécessité réelle.
Lorsquune commande shell est nécessaire, elle doit être encadrée avec les paramètres appropriés selon le cas :
- `changed_when`
- `failed_when`
- `creates`
- `removes`
2026-06-19 23:31:49 -04:00
---
## Structure générale du dépôt
2026-06-19 23:31:49 -04:00
Le dépôt peut contenir progressivement :
2026-06-19 23:31:49 -04:00
```text
inventories/
playbooks/
roles/
templates/
files/
scripts/
docs/
2026-06-19 23:31:49 -04:00
```
Les playbooks peuvent être classés par domaine :
2026-06-19 23:31:49 -04:00
```text
playbooks/
├── baseline/
├── hardening/
├── maintenance/
├── monitoring/
├── networking/
├── proxmox/
├── vm_templates/
├── web/
├── database/
├── identity/
├── backup/
└── applications/
2026-06-19 23:31:49 -04:00
```
Les rôles peuvent être ajoutés progressivement selon les besoins.
Ne pas créer de structure inutile uniquement pour donner une impression de complétude.
2026-06-19 23:31:49 -04:00
---
## Template Debian 13 Proxmox
Le template Debian 13 Proxmox 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 de base ;
- hardening raisonnable ;
- AppArmor ;
- auditd ;
- fail2ban SSH ;
- unattended-upgrades ;
- configuration journald ;
- sysctl de sécurité ;
- nftables installé et préparé, mais pas forcément activé.
Il ne doit pas contenir par défaut :
- NGINX ;
- PostgreSQL ;
- MariaDB ;
- Docker ;
- Podman ;
- Redis ;
- GitLab ;
- Nextcloud ;
- monitoring complet ;
- agents applicatifs spécialisés ;
- données propres à un clone ;
- secrets ;
- clés privées.
Les services spécialisés doivent être installés ensuite par des playbooks dédiés sur les clones.
---
## SSH
2026-06-19 23:31:49 -04:00
Pendant la construction du template, létat transitoire accepté est :
2026-06-19 23:31:49 -04:00
```text
PasswordAuthentication yes
PermitRootLogin no
PubkeyAuthentication yes
2026-06-19 23:31:49 -04:00
```
État cible recommandé après validation des clés SSH :
2026-06-19 23:31:49 -04:00
```text
PasswordAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
2026-06-19 23:31:49 -04:00
```
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 :
2026-06-19 23:31:49 -04:00
```bash
sshd -t
2026-06-19 23:31:49 -04:00
```
---
## Pare-feu
2026-06-19 23:31:49 -04:00
Ne pas activer un pare-feu générique dans un template sans confirmation explicite.
2026-06-19 23:31:49 -04:00
Pour le template Debian 13, `nftables` peut être installé et préparé, mais rester désactivé par défaut.
2026-06-19 23:31:49 -04:00
Lactivation du pare-feu doit être faite sur un clone ou sur un serveur final, avec des règles adaptées à son rôle.
2026-06-19 23:31:49 -04:00
---
2026-06-19 23:31:49 -04:00
## Cloud-init
2026-06-19 23:31:49 -04:00
Cloud-init sert à donner lidentité initiale dun clone :
2026-06-19 23:31:49 -04:00
- hostname ;
- utilisateur initial ;
- clé SSH ;
- adresse IP ;
- passerelle ;
- DNS ;
- agrandissement de la partition racine.
2026-06-19 23:31:49 -04:00
Cloud-init ne doit pas remplacer Ansible pour la configuration applicative.
2026-06-19 23:31:49 -04:00
Séparation attendue :
2026-06-19 23:31:49 -04:00
```text
Proxmox + cloud-init : identité initiale de la VM
Set-OPS + Ansible : configuration réelle du serveur
2026-06-19 23:31:49 -04:00
```
---
## Nettoyage avant template
Le nettoyage final avant conversion en template doit être protégé par une confirmation explicite.
2026-06-19 23:31:49 -04:00
Exemple :
2026-06-19 23:31:49 -04:00
```bash
ansible-playbook -i inventories/lab/hosts.yml playbooks/vm_templates/debian13_proxmox_cleanup.yml -e confirm_template_cleanup=true
2026-06-19 23:31:49 -04:00
```
Le nettoyage peut inclure :
- `cloud-init clean --logs` ;
- nettoyage du cache APT ;
- rotation ou purge contrôlée des journaux ;
- vidage de `/etc/machine-id` ;
- remise en place du lien `/var/lib/dbus/machine-id` ;
- suppression des historiques shell.
Ne jamais lancer ce nettoyage sur un serveur de production sans confirmation explicite.
2026-06-19 23:31:49 -04:00
---
## CHANGELOG
Chaque modification significative doit être inscrite dans `CHANGELOG.md`.
Format recommandé :
```markdown
## YYYY-MM-DD
### Ajouté
- ...
### Modifié
- ...
### Corrigé
- ...
```
Les corrections de rôles, handlers, playbooks et templates doivent être consignées.
2026-06-19 23:31:49 -04:00
---
## Comportement attendu de Codex
Avant de modifier :
1. Lire `AGENTS.md`.
2. Lire `README.md`, `CHANGELOG.md` et `ansible.cfg` sils existent.
3. Vérifier létat Git.
4. Inspecter les fichiers concernés.
5. Identifier la portée exacte de la demande.
6. Proposer le plus petit changement utile.
7. Préserver les conventions existantes.
2026-06-19 23:31:49 -04:00
Après modification :
1. Résumer les fichiers créés ou modifiés.
2. Indiquer les commandes de validation exécutées.
2026-06-19 23:31:49 -04:00
3. Signaler clairement ce qui na pas été testé.
4. Mettre à jour `CHANGELOG.md` si pertinent.
5. Ne pas affirmer que cest prêt si la validation a échoué.
2026-06-19 23:31:49 -04:00
---
## Philosophie
2026-06-19 23:31:49 -04:00
Set-OPS est un outil dexploitation réelle, pas une démonstration technique.
2026-06-19 23:31:49 -04:00
Priorités :
- reproductibilité ;
- sobriété ;
- clarté ;
- sécurité ;
- maintenance ;
- autonomie ;
- résilience.
La complexité doit toujours être justifiée par un bénéfice opérationnel clair.