module

Beryl::CLI::AccountUtils

Helpers partagés entre beryl init, beryl add-provider, beryl add-domain pour (a) résoudre la société courante depuis un argument CLI (forme path-like société/objet ou flag --account) et (b) choisir la société par défaut quand il n'y en a qu'une.

Class methods

ask(prompt : String, default : String = "") : String

Prompt simple avec défaut. default affiché entre crochets si non vide. Ctrl-D ou EOF → lève Aborted.

Source
ask_yes_no(prompt : String, default_yes : Bool = true) : Bool
Source
collect_pre_existing(provider : Beryl::Provider, current_file : Hash(String, String)) : Hash(String, String)

Rassemble les credentials déjà en mémoire pour un provider dans une société. Sources inspectées :

  1. le fichier .env.yml[<account>][<provider>] (passé en arg)
  2. les variables d'environnement du shell courant Factorisé ici pour que tous les flux credentials (OVH, Scaleway, Gandi…) partagent le même mécanisme.
Source
ensure_credentials(provider : Beryl::Provider, account : String, env_file : Beryl::Config::EnvFile, env_path : String, non_interactive : Bool, regen_credentials : Bool) : Bool

Flux générique de récupération des credentials d'un provider pour une société. Utilisé par beryl add-provider et indirectement par beryl init (qui enchaîne add-provider). Applicable à n'importe quel provider : la sémantique vient de provider.credentials_env_vars + du hook provider.bootstrap_credentials_if_needed.

Étapes : 0. Détecter les credentials déjà en mémoire (fichier + shell). Si présents et interactif, demander à l'utilisateur s'il veut les réutiliser ou en générer/saisir de nouveaux. 1-4. Récupération classique (fichier → shell → défaut → prompt). 5. Hook bootstrap_credentials_if_needed (OVH : génère la CK). 6. Vérif des vars requises. 7. Persist .env.yml + apply to ENV.

Retourne true si tout s'est bien passé, false sinon (avec message d'erreur déjà émis sur STDERR).

Source
implemented_providers

Liste des fournisseurs implémentés dans ce build de beryl. Utilisé par beryl init et add-provider pour guider le prompt.

Source
mask_secret(value : String) : String

Masque un secret pour l'affichage : 4 premiers + *** + 4 derniers si la valeur est assez longue, *** sinon.

Source
providers_of(config_root : String, account : String) : Array(String)

Liste des fournisseurs configurés pour une société (présents dans .env.yml[account]). Lecture seule, pour l'affichage.

Source
resolve_account(config_root : String, path_account : String | Nil, account_flag : String | Nil) : String | Nil

Résolution de la société à utiliser pour une commande :

  • priorité 1 : path-like (si l'argument contient un /)
  • priorité 2 : flag explicite --account=
  • priorité 3 : auto-détection si une seule société existe
  • sinon : nil (erreur côté appelant)
Source
split_account_path(raw : String) : NamedTuple(account: String | Nil, object: String)

Sépare un argument <société>/<objet> en {account, object}. Retourne {nil, raw} si aucun / n'est présent.

Source
split_host_path(raw : String) : NamedTuple(account: String | Nil, domain: String | Nil, host: String)

Sépare un argument de host (formes path-like) en {account, domain, host}. Trois formes acceptées :

"loulou" → {nil, nil, "loulou"} "loulou.aloli.net" → {nil, nil, "loulou.aloli.net"} "aloli/loulou" → {"aloli", nil, "loulou"} "aloli/loulou.aloli.net" → {"aloli", nil, "loulou.aloli.net"} "aloli/aloli.net/loulou" → {"aloli", "aloli.net", "loulou"} "aloli/aloli.net/ns3156789.ip-..." → {"aloli", "aloli.net", "ns3156789.ip-..."}

Règle : 0 slash → {nil, nil, raw} (comportement actuel). 1 slash → {account, nil, rest} (suffix-match dans l'account). 2 slashes → {account, domain, host} (exact). ≥ 3 slashes → erreur (ambiguïté de parsing).

Source

Nested types