class

Beryl::Config::EnvFile

Inherits Reference < Object

Parse de ~/.config/beryl/.env.yml. Format à trois niveaux : société → fournisseur → variables.

aloli: ovh: OVH_APPLICATION_KEY: xxx OVH_APPLICATION_SECRET: yyy OVH_CONSUMER_KEY: zzz scaleway: SCW_SECRET_KEY: abc

quimeo: ovh: OVH_APPLICATION_KEY: aaa ...

Justification (ADR-014) : une société a généralement plusieurs domaines payés chez le même compte fournisseur. Indexer par domaine forçait la duplication des credentials. Indexer par société + fournisseur élimine cette duplication : aloli.net et aloli.fr partagent .env.yml[aloli][ovh].

Chaque commande qui cible un host charge uniquement la section [account][provider] concernée dans ENV, le temps de l'exécution. Pas de contamination entre sociétés.

Constants

VAULT_FILENAME = ".env.toml.age"

Constructors

load(path : String | Nil = nil) : EnvFile

Charge le fichier. Retourne une instance vide si le fichier n'existe pas (certains flux — ex: beryl init — le créent à la volée).

Source
new(path : String, data : Data)
Source

Class methods

default_path

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

Source
load_vault(vault_path : String) : Hash(String, Hash(String, String))

Charge un coffre chiffré et retourne un hash provider → var → value. Lève si le coffre est absent, illisible, ou si le master key n'est pas accessible (le module Secrets::MasterKey lève NotInitializedError).

Source
load_vault_if_present(vault_path : String) : Hash(String, Hash(String, String))

Variante qui retourne un hash vide si le coffre n'existe pas (utile au loader : tous les comptes n'ont pas forcément migré). Lève toujours si déchiffrement / parsing échoue.

Source
parse_vault_toml(plaintext : String) : Hash(String, Hash(String, String))

Parse le plaintext TOML d'un coffre société. Public pour les tests (qui peuvent injecter du plaintext sans chiffrement).

Source
serialize_account_to_toml(providers : Hash(String, Hash(String, String))) : String

Sérialise une section société (providers → vars) en TOML ASCII, prêt à être chiffré et écrit dans .env.toml.age. Trié par provider puis par variable pour rester déterministe.

Source
write_vault(vault_path : String, providers : Hash(String, Hash(String, String))) : Nil

Écrit un coffre chiffré à vault_path. Le contenu est sérialisé en TOML puis chiffré au roster Secrets::Recipients. Crée le dossier parent au besoin, chmod 0600.

Source

Instance methods

accounts

Liste des sociétés connues du fichier.

Source
apply_all_to_env(account : String, overwrite : Bool = false) : Int32

Injecte TOUTES les variables d'une société (tous fournisseurs confondus) dans ENV. Utile en début de CLI quand on ne sait pas encore précisément quel(s) provider(s) seront appelés. Retourne le nombre de variables posées.

Source
apply_to_env(account : String, provider : String, overwrite : Bool = false) : Int32

Injecte les variables d'un (société, fournisseur) dans ENV. Par défaut, n'écrase pas les variables déjà définies dans le shell (convention LoadEnv : ce que l'utilisateur a explicitement exporté l'emporte). Retourne le nombre de variables réellement posées.

Source
clear_account(account : String) : Nil

Vide une section société (utilisé par beryl env migrate après avoir transféré les credentials d'une société vers son coffre chiffré).

Source
data
Source
for_account(account : String) : Hash(String, Hash(String, String))

Toutes les variables d'une société, à plat (tous fournisseurs confondus). Utile pour diagnostics.

Source
for_account_provider(account : String, provider : String) : Hash(String, String)

Variables pour un couple (société, fournisseur). Hash vide si pas de credentials posées.

Source
path
Source
providers_for(account : String) : Array(String)

Liste des fournisseurs configurés pour une société (hash vide si la société est inconnue).

Source
save

Sauvegarde sur disque au format YAML, chmod 0600 (fichier secret). Crée le dossier parent au besoin.

Source
set_account(account : String, providers : Hash(String, Hash(String, String))) : Nil

Remplace toute la section société (tous fournisseurs) par providers. Utilisé par le loader après avoir lu le coffre chiffré d'une société : le coffre fait autorité, écrase l'éventuelle section homonyme du .env.yml racine.

Source
set_account_provider(account : String, provider : String, vars : Hash(String, String)) : Nil

Remplace (ou crée) les credentials d'un couple (société, fournisseur). Ne touche pas aux autres sections du fichier.

Source

Nested types