Beryl::Config
Namespace de la configuration beryl dans ~/.config/beryl/ (ADR-014).
Arborescence :
~/.config/beryl/ _default.yml # socle technique commun à toutes sociétés .env.yml # credentials : société → fournisseur → vars <société>/ _account.yml # optionnel : métadonnées société <domaine>.yml # identité du domaine <domaine>/ # hosts directs + groupes <host>.yml <groupe>.yml # propriétés du groupe <groupe>/ <host>.yml
Un fichier host dans un groupe garde le même FQDN <host>.<domaine>
que s'il était à la racine du domaine : le groupe n'apparaît PAS
dans le FQDN. Le groupe ne sert qu'à factoriser les propriétés
métier (packages, sudoers…).
Hiérarchie d'héritage (du plus général au plus spécifique) :
_default.yml— socle commun à tous les domaines<société>/<domaine>.yml— identité du domaine<société>/<domaine>/<groupe>.yml— spécialisation d'usage (optionnel)<société>/<domaine>/<host>.ymlOU<société>/<domaine>/<groupe>/<host>.yml
Règles de merge (voir Beryl::Config::Merger) :
- scalaires : override
- freebsd.packages / sudoers : append + dédup
- freebsd.users : merge par
name - freebsd.users[].ssh_keys : remplacement (liste exacte au niveau le plus spécifique) + injection de la clé domaine obligatoire
- freebsd.disks : override
Constants
Dossier par défaut où vivent les clés publiques SSH côté opérateur. Toutes les clés SSH référencées par nom dans les YAML sont cherchées ici. Philippe, 22 avril 2026 : « Toutes les clés sont systématiquement dans ~/.ssh pourquoi coder un chemin ? ».
Lit l'arborescence ~/.config/beryl/ et construit un Root exploitable.
Arborescence (ADR-014) : le type d'un fichier est dans son nom
(*.host.yml), celui d'un dossier dans sa PLACE — un dossier sous une
société est un domaine (nom à point), un dossier sous un domaine est un
GROUPE (nom sans point). Chaque niveau a ses réglages communs dans son
_defaults.yml.
~/.config/beryl/ ├── _default.yml ├── .env.yml ├── <société>/ │ ├── _account.yml # optionnel : métadonnées société │ ├── .env.toml.age # optionnel : coffre credentials chiffré │ ├── <domaine>.domain.yml │ ├── <domaine>/ # hosts directs + groupes │ │ ├── <host>.host.yml │ │ └── <groupe>/ # GROUPE (nom sans point) │ │ ├── _defaults.yml # optionnel : réglages communs du groupe │ │ ├── <host>.host.yml │ │ └── ... │ ├── <sous.domaine>/ # un sous-domaine est À CÔTÉ, jamais dedans │ └── ... └── <autre société>/
Règle de typage :
*.domain.yml→ domaine ;*.host.yml→ host (direct, ou membre d'un groupe) ;<groupe>/→ groupe (dossier sans point sous un domaine) ;*.recipe.yml→ recette (lue parberyl sync, ignorée ici).
Tolère les fichiers/dossiers absents : une société peut avoir un
seul domaine sans sous-dossier d'hosts, un _default.yml peut
manquer, etc. Seul ~/.config/beryl/ lui-même peut être absent (on
retourne un Root vide).
Suffixes typés (un seul endroit où ils sont déclarés).
Ancienne déclaration de groupe, REFUSÉE (remplacée par <groupe>/_defaults.yml).
Class methods
Noms de clés à DÉPLOYER, à partir des entrées brutes ssh_keys:.
Chaque entrée est soit :
- une clé (string) → la clé.
- une PAIRE
[active, suivante]→ la PREMIÈRE (l'active). La paire signale une rotation en cours :beryl syncne pose que l'active ;beryl rotate-keypromeut la suivante. Les entrées non exploitables sont ignorées.
Résout une entrée ssh_keys: vers le contenu effectif à poser
dans authorized_keys côté serveur.
Deux formes reconnues automatiquement :
-
Clé inline (commence par
ssh-) :- ssh-ed25519 AAAAC3... philippe@example.com
Utilisée telle quelle, après
.strip.
- ssh-ed25519 AAAAC3... philippe@example.com
Utilisée telle quelle, après
-
Nom de fichier (tout le reste, typiquement
nom.pub) :- philippe.example.com.pub
Cherché dans
ssh_dir(défaut~/.ssh/). On lit la première ligne non vide et non commentée du fichier.
- philippe.example.com.pub
Cherché dans
Permet à l'opérateur d'éviter la duplication (une clé vit à un
seul endroit : ~/.ssh/nom.pub) et facilite la rotation : on
ajoute une 2ème entrée ssh_keys: temporairement pour déployer
la nouvelle clé, puis on retire l'ancienne ligne.
Nested types
- Beryl::Config::Account
- Beryl::Config::BootPoolEncryptionUnsupported
- Beryl::Config::Domain
- Beryl::Config::EncryptionConfig
- Beryl::Config::EnvFile
- Beryl::Config::Group
- Beryl::Config::HostNode
- Beryl::Config::InvalidEncryptionConfig
- Beryl::Config::InvalidServiceAction
- Beryl::Config::Loader
- Beryl::Config::Merger
- Beryl::Config::Pool
- Beryl::Config::ResolvedHost
- Beryl::Config::Root
- Beryl::Config::ServiceAction
- Beryl::Config::SshKeyEmpty
- Beryl::Config::SshKeyNotFound
- Beryl::Config::SystemDataset
- Beryl::Config::Users
- Beryl::Config::Zpool