class

Beryl::Config::Root

Inherits Reference < Object

Point d'entrée de la configuration beryl (ADR-014).

Regroupe :

  • le socle _default.yml (Hash brut, commun à toutes sociétés)
  • les sociétés chargées (accounts : Hash<String, Account>), chacune contenant ses domaines
  • .env.yml pour les credentials indexés [account][provider]

Les opérations habituelles (résolution d'un host, obtention de la config mergée) passent par des méthodes de cette classe.

Constructors

load(path : String | Nil = nil, ssh_dir : String = DEFAULT_SSH_DIR) : Root

Charge une arborescence complète depuis le disque. ssh_dir est le dossier où chercher les clés SSH référencées par nom (ex. philippe.aloli.fr.pub<ssh_dir>/philippe.aloli.fr.pub). Paramétrable pour les tests qui utilisent des fixtures.

Source
new(path : String, defaults : Hash(YAML::Any, YAML::Any), accounts : Hash(String, Beryl::Config::Account), env_file : Beryl::Config::EnvFile, ssh_dir : String = DEFAULT_SSH_DIR)
Source

Class methods

default_path

Racine de config par défaut (dynamique : honore $XDG_CONFIG_HOME si défini au runtime, sinon ~/.config/beryl/). Voir Beryl::Xdg.config_dir.

Source

Instance methods

account?(name : String) : Account | Nil

Retourne une société ou nil.

Source
account_names

Liste des noms de sociétés configurées (triée).

Source
accounts
Source
accounts_with_domain(domain_name : String) : Array(Account)

Toutes les sociétés qui ont un domaine de ce nom. Rare qu'il y en ait plusieurs, mais possible (ex: une société ALOLI et une société cliente ACME possèdent toutes deux example.com).

Source
all_hosts_by_fqdn

Tous les hosts de toutes les sociétés, par FQDN. Pratique pour beryl list-hosts et pour les recherches globales.

Source
defaults
Source
env_file
Source
path
Source
resolve(name : String, account_hint : String | Nil = nil, domain_hint : String | Nil = nil) : ResolvedHost

Résout un nom CLI vers un host effectif mergé.

Règles (premier match gagne) :

  1. --account=A + --domain=D : cherche dans A/D directement (host du fichier si présent, sinon virtuel).
  2. --domain=D seul : cherche D dans toutes les sociétés. Lève AmbiguousHost si plusieurs sociétés ont le domaine et que le host n'est pas unique parmi elles.
  3. Suffix match : rails01.aloli.net — cherche un domaine aloli.net dans toutes les sociétés. Si plusieurs sociétés l'ont ET que le host existe dans une seule → utilisé.
  4. Recherche nom court + provider-name dans tous les hosts de toutes les sociétés. Unique → utilisé ; multi → ambigu.
  5. Sinon → HostNotFound.

Résultat : un ResolvedHost (host effectif + société + domaine + groupe).

Source
ssh_dir
Source

Nested types