infra/scripts/workstation
Viktor Barzin 2c1865eabb
All checks were successful
ci/woodpecker/push/default Pipeline was successful
ci/woodpecker/push/build-cli Pipeline was successful
workstation: roster-driven provisioner (SSoT reconcile, additive-only)
t3-provision-users.sh now consumes roster_engine.py: derives accounts + per-tier groups + sticky ports + /etc/ttyd-user-map + dispatch.json from roster.yaml and applies them. ADDITIVE-ONLY for existing users (never strips a group, replaces a home, or re-locks an account) so the hourly timer is always safe. Best-effort tier validation vs live k8s_users: warns on a net-new absent user (emo), aborts only on a real tier conflict, skips when root has no Vault token. DRY_RUN mode for safe testing. Verified on the live host: reproduces dispatch.json content exactly, emo/anca groups + all t3-serve instances unchanged, idempotent, shellcheck-clean; deployed to /usr/local/bin (hourly timer target).

Engine: validate_tiers now returns ValidationIssue(severity) — error=conflict (abort) vs warn=absent (grant pending) — + has_blocking_errors(); 28 pytest cases. setup-devvm.sh redeploys the provisioner for reproducibility.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-08 14:18:12 +00:00
..
skel workstation: machine-wide config inheritance (managed claudeMd + setup-devvm.sh + skel) 2026-06-08 14:07:04 +00:00
.gitignore workstation: machine-wide config inheritance (managed claudeMd + setup-devvm.sh + skel) 2026-06-08 14:07:04 +00:00
managed-settings.json workstation: machine-wide config inheritance (managed claudeMd + setup-devvm.sh + skel) 2026-06-08 14:07:04 +00:00
packages.txt workstation: roster source-of-truth + host package manifest [ci skip] 2026-06-08 13:38:20 +00:00
roster.yaml workstation: roster source-of-truth + host package manifest [ci skip] 2026-06-08 13:38:20 +00:00
roster_engine.py workstation: roster-driven provisioner (SSoT reconcile, additive-only) 2026-06-08 14:18:12 +00:00
setup-devvm.sh workstation: roster-driven provisioner (SSoT reconcile, additive-only) 2026-06-08 14:18:12 +00:00
test_roster_engine.py workstation: roster-driven provisioner (SSoT reconcile, additive-only) 2026-06-08 14:18:12 +00:00