module

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) :

  1. _default.yml — socle commun à tous les domaines
  2. <société>/<domaine>.yml — identité du domaine
  3. <société>/<domaine>/<groupe>.yml — spécialisation d'usage (optionnel)
  4. <société>/<domaine>/<host>.yml OU <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

DEFAULT_SSH_DIR = File.expand_path("~/.ssh", home: true)

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 ? ».

Class methods

resolve_ssh_key(value : String, ssh_dir : String = DEFAULT_SSH_DIR) : String

Résout une entrée ssh_keys: vers le contenu effectif à poser dans authorized_keys côté serveur.

Deux formes reconnues automatiquement :

  1. Clé inline (commence par ssh-) :

    • ssh-ed25519 AAAAC3... philippe@aloli.fr Utilisée telle quelle, après .strip.
  2. Nom de fichier (tout le reste, typiquement nom.pub) :

    • philippe.aloli.fr.pub Cherché dans ssh_dir (défaut ~/.ssh/). On lit la première ligne non vide et non commentée du fichier.

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.

Source
resolve_ssh_keys(values : Array(String), ssh_dir : String = DEFAULT_SSH_DIR) : Array(String)

Résout une liste d'entrées ssh_keys: en liste de clés effectives. Helper pratique, signalement au premier échec.

Source

Nested types