[nomad-step-2] S2.5 — bin/disinto init --import-env / --import-sops / --age-key wire-up #883
Labels
No labels
action
backlog
blocked
bug-report
cannot-reproduce
in-progress
in-triage
needs-triage
prediction/actioned
prediction/dismissed
prediction/unreviewed
priority
rejected
reproduced
tech-debt
underspecified
vision
No milestone
No project
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: disinto-admin/disinto#883
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Part of the Nomad+Vault migration. Step 2 — Vault policies + workload identity + secrets import.
Blocked by: #880 (S2.2), #881 (S2.3).Dependencies closed; unblocked.Goal
Wire the Step-2 building blocks (import, auth, policies) into
bin/disinto init --backend=nomadso a single command on a fresh LXC provisions cluster + policies + auth + imports secrets + deploys services.Scope
Add flags to
disinto init --backend=nomad:--import-env PATH— points at an existing.env(from old stack).--import-sops PATH— points at the sops-encrypted.env.vault.enc.--age-key PATH— points at the sops age keyfile (required if--import-sopsis set).Flow when any of
--import-*is set:cluster-up.sh(Step 0, unchanged).tools/vault-apply-policies.sh(S2.1, idempotent).lib/init/nomad/vault-nomad-auth.sh(S2.3, idempotent).tools/vault-import.sh --env PATH --sops PATH --age-key PATH(S2.2).--with <service>was also passed,lib/init/nomad/deploy.sh <service>(Step 1, unchanged).Flow when no import flags are set:
[import] no --import-env/--import-sops — skipping; set them or seed kv/disinto/* manually before deploying secret-dependent services.Flag validation:
--import-sopswithout--age-key→ error.--age-keywithout--import-sops→ error.--import-envalone (no sops) → OK.--backend=docker+ any--import-*→ error.Affected files
bin/disinto— add--import-env,--import-sops,--age-keyflags toinit --backend=nomaddocs/nomad-migration.md(new) — cutover-day invocation shapelib/init/nomad/vault-nomad-auth.sh(S2.3) — called as step 3tools/vault-import.sh(S2.2) — called as step 4tools/vault-apply-policies.sh(S2.1) — called as step 2Acceptance criteria
disinto init --backend=nomad --import-env /tmp/.env --import-sops /tmp/.enc --age-key /tmp/keys.txt --with forgejocompletes: cluster up, policies applied, JWT auth configured, KV populated, Forgejo deployed reading Vault secrets--import-sopswithout--age-keyexits with a clear error--backend=dockerwith--import-envexits with a clear error--dry-runprints the full plan, touches nothingshellcheckcleanPrior art round 2 — abandoned PR #902 (closed, branch
fix/issue-883kept ata8d18aa3)dev-qwen2 took this after the round-1 unblock. Fixed tests 18 + 22 but regressed test 23. 24/25 passing.
Remaining failing test (from pipeline #1072):
Test 23 expects the dry-run output to contain the literal string
env file: /tmp/.envwhen both --import-env and --import-sops are passed. The dry-run print needs to echo each import input's path, not just one. Likely the current code has an if/elif that only prints one branch.Two consecutive llama attempts (dev-qwen, then dev-qwen2) each hit CI exhaustion on text-matching tests. Subtle string-output matching seems to be a weak spot for the llama agent on this codebase — likely because partial credit (some tests pass, one doesn't) doesn't provide a clear signal in the retry loop. A Claude-backed dev-bot would likely fix all three tests (18, 22, 23) in a single pass — they're the same class of bug.
Minimal fix: in
_disinto_init_nomad's dry-run branch, print one line per import flag independently when its value is set, not in if/elif. Something like:Two llama rounds have burned the same class of bug. If a third claim happens via llama, expect to unblock again — consider manually closing any fresh llama PR on this issue and waiting for dev-bot to pick it up.
Blocked — issue #883
ci_exhausted_poll (3 attempts, PR #899)2026-04-16T17:51:07ZBlocked — issue #883
ci_exhausted2026-04-16T18:11:14ZBlocked — issue #883
ci_exhausted2026-04-16T18:26:46Z