instancier : déchiffrer la voûte pour ansible-inventory (exit 4)
Une voûte chiffrée group_vars/all/vault.yml fait échouer ansible-inventory --list (comparaison du plan) sans mot de passe → « Appliquer le plan » cassé dès qu'une voûte existe. instancier utilise maintenant ~/.config/setops-vault-pass si ANSIBLE_VAULT_PASSWORD_FILE n'est pas déjà fourni. Validé : plus d'exit 4. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
27b8f51f15
commit
937ac700b9
2 changed files with 15 additions and 2 deletions
|
|
@ -15,6 +15,12 @@
|
||||||
- **Compteur « vivantes »** dans l'en-tête (depuis la sonde), à côté de actifs/planifiés.
|
- **Compteur « vivantes »** dans l'en-tête (depuis la sonde), à côté de actifs/planifiés.
|
||||||
|
|
||||||
### Corrigé
|
### Corrigé
|
||||||
|
- **Une voûte chiffrée cassait `instancier` / « Appliquer le plan ».** `ansible-inventory
|
||||||
|
--list` (utilisé pour la comparaison sémantique du plan) tente de déchiffrer
|
||||||
|
`group_vars/all/vault.yml` et échoue sans mot de passe (`exit 4`) — alors que
|
||||||
|
l'opération est structurelle, sans secret. `instancier` utilise désormais
|
||||||
|
automatiquement le fichier conventionnel `~/.config/setops-vault-pass` (si
|
||||||
|
`ANSIBLE_VAULT_PASSWORD_FILE` n'est pas déjà défini).
|
||||||
- **Secrets des rôles non câblés à la voûte (échafaudage manquant).** Les rôles à
|
- **Secrets des rôles non câblés à la voûte (échafaudage manquant).** Les rôles à
|
||||||
secrets déclaraient `serveur_X_password: ""` avec, en commentaire seulement, la
|
secrets déclaraient `serveur_X_password: ""` avec, en commentaire seulement, la
|
||||||
variable de voûte attendue (`{{ vault_X }}`) — sans mapping réel. Résultat : remplir
|
variable de voûte attendue (`{{ vault_X }}`) — sans mapping réel. Résultat : remplir
|
||||||
|
|
|
||||||
|
|
@ -114,8 +114,15 @@ def ecrire(path: Path = GENERE) -> None:
|
||||||
|
|
||||||
|
|
||||||
def _resolu(fichier: Path) -> tuple[dict, dict]:
|
def _resolu(fichier: Path) -> tuple[dict, dict]:
|
||||||
sortie = subprocess.run(["ansible-inventory", "-i", str(fichier), "--list"],
|
cmd = ["ansible-inventory", "-i", str(fichier), "--list"]
|
||||||
capture_output=True, text=True, check=True).stdout
|
# Une voute chiffree (group_vars/all/vault.yml) fait echouer ansible-inventory sans
|
||||||
|
# mot de passe (exit 4). Si ANSIBLE_VAULT_PASSWORD_FILE n'est pas deja fourni, on
|
||||||
|
# tente le fichier conventionnel Set-OPS ~/.config/setops-vault-pass.
|
||||||
|
if not os.environ.get("ANSIBLE_VAULT_PASSWORD_FILE"):
|
||||||
|
conv = Path.home() / ".config" / "setops-vault-pass"
|
||||||
|
if conv.is_file():
|
||||||
|
cmd += ["--vault-password-file", str(conv)]
|
||||||
|
sortie = subprocess.run(cmd, capture_output=True, text=True, check=True).stdout
|
||||||
data = json.loads(sortie)
|
data = json.loads(sortie)
|
||||||
hostvars = data.get("_meta", {}).get("hostvars", {})
|
hostvars = data.get("_meta", {}).get("hostvars", {})
|
||||||
groupes: dict = {}
|
groupes: dict = {}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue