fix(vault): just vault unseal — exec без -i, иначе уходила только первая доля #7

Merged
grachevko merged 1 commits from fix/vault-unseal-stdin into main 2026-09-17 17:46:14 +00:00
Collaborator

Фикс к уже влитому vault/mod.just: PR #6 влит до этого коммита, поэтому в main осталась версия с багом.

Симптом: just vault unseal всегда отправляет первый ключ и после одной доли пишет «всё ещё запечатан».

Причина: kubectl exec -i подключает stdin контейнера к stdin вызывающего процесса, а в рецепте stdin — это файл ключей (while IFS= read -r key …; done < "$keys_file"). Первый же вызов вытягивает остаток файла, цикл получает EOF и делает ровно одну итерацию.

Фикс: все вызовы kubectl exec в рецептах — без -i и с < /dev/null (доли передаются аргументом, stdin не нужен). Плюс комментарий в модуле, чтобы не вернули обратно.

Как проверено: локально на фейковом kubectl, который теперь, как настоящий, съедает stdin при -i (раньше не съедал — поэтому прошлые прогоны были зелёными и баг не поймали). На старом коде баг воспроизводится (одна доля доля-один-1111, exit 1), на новом — три разные доли, остановка на пороге, exit 0; повторный запуск — «уже распечатан»; just vault status работает отдельно; отсутствие файла/пода — внятные ошибки с exit 1.

Фикс к уже влитому `vault/mod.just`: PR #6 влит до этого коммита, поэтому в `main` осталась версия с багом. **Симптом:** `just vault unseal` всегда отправляет первый ключ и после одной доли пишет «всё ещё запечатан». **Причина:** `kubectl exec -i` подключает stdin контейнера к stdin вызывающего процесса, а в рецепте stdin — это файл ключей (`while IFS= read -r key …; done < "$keys_file"`). Первый же вызов вытягивает остаток файла, цикл получает EOF и делает ровно одну итерацию. **Фикс:** все вызовы `kubectl exec` в рецептах — без `-i` и с `< /dev/null` (доли передаются аргументом, stdin не нужен). Плюс комментарий в модуле, чтобы не вернули обратно. **Как проверено:** локально на фейковом `kubectl`, который теперь, как настоящий, съедает stdin при `-i` (раньше не съедал — поэтому прошлые прогоны были зелёными и баг не поймали). На старом коде баг воспроизводится (одна доля `доля-один-1111`, exit 1), на новом — три разные доли, остановка на пороге, exit 0; повторный запуск — «уже распечатан»; `just vault status` работает отдельно; отсутствие файла/пода — внятные ошибки с exit 1.
hermes added 1 commit 2026-09-17 17:45:34 +00:00
fix(vault): kubectl без -i и с < /dev/null — exec съедал stdin цикла
Flate / Flate (pull_request) Blocked by required conditions
Flate / Flate - Success (pull_request) Blocked by required conditions
Flate / Flate - Filter (pull_request) Successful in 5s
05d44d2e51
grachevko merged commit 05d44d2e51 into main 2026-09-17 17:46:14 +00:00
grachevko deleted branch fix/vault-unseal-stdin 2026-09-17 17:46:14 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: grachevko/home-ops#7