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

373 lines
8 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.

# 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.
Objectif principal : produire une infrastructure reproductible, lisible, sobre, sécuritaire et administrable sans dépendance inutile au cloud.
Ce dépôt doit permettre de reconstruire progressivement lenvironnement serveur à partir de modèles propres, principalement basés sur Debian 13.
---
## 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 de travail
1. Toujours lire lexistant avant de modifier.
2. Ne jamais présumer de linventaire réel sans le vérifier.
3. Ne jamais introduire de secret en clair.
4. Ne jamais casser lidempotence Ansible.
5. Ne jamais exécuter daction destructive sans confirmation explicite.
6. Préférer la simplicité à lingénierie excessive.
7. Documenter ce qui est utile à lexploitation réelle.
8. Produire des playbooks relisibles par un humain fatigué en situation dincident.
---
## Style Ansible attendu
Les playbooks doivent être :
- idempotents ;
- lisibles ;
- découpés en rôles lorsque pertinent ;
- compatibles avec Debian 13 sauf exception documentée ;
- testables avec `--check` autant que possible ;
- sécuritaires par défaut ;
- sans dépendances SaaS ou cloud inutiles.
Préférer les modules Ansible standards :
- `ansible.builtin.apt`
- `ansible.builtin.template`
- `ansible.builtin.copy`
- `ansible.builtin.service`
- `ansible.builtin.lineinfile`
- `ansible.builtin.file`
- `ansible.builtin.user`
- `ansible.builtin.group`
- `ansible.builtin.systemd`
Éviter les commandes `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`
---
## Structure recommandée
Le dépôt doit tendre progressivement vers cette structure :
```text
Set-OPS/
├── AGENTS.md
├── README.md
├── CHANGELOG.md
├── ansible.cfg
├── inventories/
│ ├── lab/
│ │ ├── hosts.yml
│ │ └── group_vars/
│ └── production/
│ ├── hosts.yml
│ └── group_vars/
├── playbooks/
│ ├── bootstrap.yml
│ ├── baseline.yml
│ ├── hardening.yml
│ ├── updates.yml
│ ├── nginx.yml
│ ├── monitoring.yml
│ └── users.yml
├── roles/
│ ├── common/
│ ├── users/
│ ├── ssh/
│ ├── sudo/
│ ├── qemu_guest_agent/
│ ├── chrony/
│ ├── firewall/
│ ├── unattended_updates/
│ ├── nginx/
│ ├── monitoring_agent/
│ └── vm_template_cleanup/
├── templates/
├── files/
├── scripts/
└── docs/
```
Ne pas créer toute cette structure inutilement dun seul coup. La créer selon les besoins réels.
---
## Conventions de nommage
Utiliser des noms clairs, sobres et prévisibles.
Exemples de playbooks :
```text
baseline.yml
hardening.yml
debian13-template.yml
nginx-static-site.yml
monitoring-agent.yml
```
Exemples de rôles :
```text
roles/common
roles/ssh
roles/sudo
roles/nginx
roles/qemu_guest_agent
```
Exemples de variables :
```yaml
chezlepro_timezone: "America/Toronto"
chezlepro_admin_user: "ansible"
chezlepro_ssh_port: 22
```
---
## Cibles connues
Contexte dexploitation Chezlepro Inc. :
- hyperviseurs Proxmox ;
- stockage TrueNAS iSCSI ;
- VM Debian 13 ;
- administration par Ansible ;
- préférence pour logiciels libres ;
- préférence pour services sobres, locaux, documentés ;
- éviter les dépendances cloud ;
- usage de comptes techniques dédiés ;
- SSH par clé à terme ;
- compte `ansible` avec sudo sans mot de passe lorsque nécessaire.
---
## Modèle Debian 13 de base
Les rôles liés au modèle Debian 13 doivent viser :
- système minimal ;
- pas denvironnement graphique ;
- SSH installé ;
- `qemu-guest-agent` installé et actif ;
- `sudo` installé ;
- utilisateur `ansible` présent ;
- sudo NOPASSWD pour `ansible`, lorsque demandé ;
- timezone correcte ;
- hostname propre ;
- mises à jour appliquées ;
- logs et caches nettoyables avant conversion en template ;
- aucune clé privée ;
- aucun secret ;
- aucune donnée propre à une VM clonée.
---
## Sécurité
Ne jamais commiter :
- mots de passe ;
- clés privées SSH ;
- tokens API ;
- secrets Ansible Vault non chiffrés ;
- fichiers `.env` sensibles ;
- exports de configuration contenant des secrets ;
- certificats privés ;
- backups réels ;
- fichiers de production non anonymisés.
Créer ou maintenir un `.gitignore` adapté.
Toute variable sensible doit être placée dans un mécanisme approprié :
- Ansible Vault ;
- fichier local non versionné ;
- secret injecté hors dépôt ;
- gestionnaire de secrets externe explicitement approuvé.
---
## SSH
État transitoire accepté pendant la construction :
```text
PasswordAuthentication yes
```
État cible recommandé :
```text
PermitRootLogin no
PubkeyAuthentication yes
PasswordAuthentication no
```
Ne jamais désactiver lauthentification par mot de passe avant davoir confirmé que laccès par clé fonctionne.
---
## Sudo
Le compte technique `ansible` peut être configuré ainsi :
```text
ansible ALL=(ALL) NOPASSWD:ALL
```
Cette règle doit être placée dans :
```text
/etc/sudoers.d/90-ansible
```
Toujours valider avec :
```bash
visudo -cf /etc/sudoers.d/90-ansible
```
---
## Playbooks destructifs
Toute action pouvant causer une perte daccès ou de données doit être protégée.
Exemples dactions destructives :
- suppression de paquets critiques ;
- modification SSH bloquante ;
- redémarrage massif ;
- formatage disque ;
- modification de partitions ;
- suppression dutilisateurs ;
- modification firewall ;
- purge de données ;
- changement réseau pouvant couper laccès.
Pour ces actions, exiger une variable explicite :
```yaml
confirm_destructive_action: true
```
Et refuser lexécution autrement.
---
## Documentation
Chaque rôle important doit contenir au minimum :
```text
roles/nom_du_role/README.md
roles/nom_du_role/defaults/main.yml
roles/nom_du_role/tasks/main.yml
```
Le README du rôle doit expliquer :
- ce que le rôle fait ;
- sur quelles distributions il est prévu ;
- les variables principales ;
- les effets de bord ;
- les commandes de test.
---
## Tests minimaux
Avant de proposer un changement comme terminé, vérifier autant que possible :
```bash
ansible-playbook --syntax-check playbooks/nom.yml
ansible-playbook -i inventories/lab/hosts.yml playbooks/nom.yml --check
ansible-lint
```
Si `ansible-lint` nest pas disponible, le mentionner clairement sans inventer un résultat.
---
## CHANGELOG
Chaque modification significative doit être inscrite dans `CHANGELOG.md`.
Format recommandé :
```markdown
## YYYY-MM-DD
### Ajouté
- ...
### Modifié
- ...
### Corrigé
- ...
```
---
## Comportement attendu de Codex
Avant de modifier :
1. Lire `README.md`, `CHANGELOG.md`, `ansible.cfg` et larborescence existante.
2. Identifier la portée exacte de la demande.
3. Proposer le plus petit changement utile.
4. Préserver les conventions existantes.
5. Ne pas réorganiser massivement le dépôt sans demande explicite.
Après modification :
1. Résumer les fichiers modifiés.
2. Indiquer les commandes de validation.
3. Signaler clairement ce qui na pas été testé.
4. Mettre à jour `CHANGELOG.md` si pertinent.
---
## Philosophie Set-OPS
Set-OPS doit rester un outil dexploitation réelle, pas une démonstration technique.
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.