Beryl::Config::Merger
Fusionne la chaîne d'héritage d'un host pour produire sa config effective.
Ordre d'application (du plus général au plus spécifique) :
_default.yml(socle technique commun)<domaine>.yml(identité du domaine, users, clé domaine)<groupe>.yml(optionnel, packages/sudoers métier)<host>.yml(spécificités host)
Règles de merge :
- Scalaires (hostname, raid, timezone…) : override strict.
- Hashes imbriqués : merge récursif.
freebsd.packages/freebsd.sudoers: append + dédup.freebsd.users: merge parname. Pour un user présent dans plusieurs niveaux, les scalaires (shell, primary_group…) sont overridés, etssh_keysest remplacé par la liste la plus spécifique (pas append).freebsd.disks: override strict.freebsd.users[].ssh_keys: chaque user reçoit EN PLUS la ou les clés SSH du domaine (champ racinessh_keys:du fichier<domaine>.yml) injectées en tête. La clé domaine est obligatoire, non supprimable par un niveau inférieur.
Class methods
Chemins dont les arrays s'appendent au lieu de se remplacer. Liste volontairement courte et explicite — pas de règle globale « toutes les arrays s'appendent » pour éviter les surprises (disks, ssh_keys qui doivent rester override).
Merge récursif avec règles spécifiques pour les chemins connus.
path suit la position dans l'arbre (ex: "freebsd.packages").
Injecte la ou les clés SSH du domaine en tête de ssh_keys de
chaque user. Les clés que chaque user déclare sont aussi
résolues (nom de fichier → contenu), puis filtrées pour éviter
les doublons avec la clé domaine. La clé domaine ne peut pas
être supprimée par un niveau inférieur : elle est toujours
présente en tête.
Produit le Hash YAML effectif d'un host, en partant de defaults
et en appliquant les niveaux un à un. La clé domaine est
injectée dans chaque user après le merge, et toutes les clés
SSH (domaine + user) sont résolues via Config.resolve_ssh_key
(nom de fichier dans ssh_dir → contenu, ou inline si la chaîne
commence par ssh-).
Merge de deux listes de users par leur champ name. Pour un
user présent des deux côtés, on applique un deep_merge (scalaires
overridés). ssh_keys est remplacé par la version du niveau
supérieur (pas append, cohérent avec la sémantique déclarative
voulue pour beryl apply).