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
Prompt simple avec défaut. default affiché entre crochets si
non vide. Ctrl-D ou EOF → lève Aborted.
Rassemble les credentials déjà en mémoire pour un provider dans une société. Sources inspectées :
- le fichier
.env.yml[<account>][<provider>](passé en arg) - les variables d'environnement du shell courant Factorisé ici pour que tous les flux credentials (OVH, Scaleway, Gandi…) partagent le même mécanisme.
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).
Liste des fournisseurs implémentés dans ce build de beryl.
Utilisé par beryl init et add-provider pour guider le prompt.
Masque un secret pour l'affichage : 4 premiers + *** + 4 derniers
si la valeur est assez longue, *** sinon.
Liste des fournisseurs configurés pour une société (présents
dans .env.yml[account]). Lecture seule, pour l'affichage.
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)
Sépare un argument <société>/<objet> en {account, object}.
Retourne {nil, raw} si aucun / n'est présent.
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).