Syncthing service on Milner #113
No reviewers
Labels
No labels
blocked
bug
duplicate
effort
high
effort
low
effort
medium
effort
minimal
enhancement
help wanted
invalid
pr
feedback
pr
reviewing
question
status
backlog
status
document
status
done
status
implement
status
pending
status
planning
status
reviewing
waiting
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
tepichord/milner!113
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/21-syncthing-service-milner"
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?
Closes #21
The agent's
~/.pibecomes one folder in three places:dima,fedora, andan always-on pod. The pod is Flux-owned and holds one credential — its own
device identity, which comes from Vault like every other in-cluster credential
(AGENTS.md, Vault-first).
What is in the change
node-role: worker), the seed init container that copies the identity and the ignore policy out of read-only mountsgitops/clusters/milner/apps/annia/syncthing.yamlpi-data— 10Gi,persistent, ReadWriteOnce (also milner#25's claim: its pod mounts it at/root/.pi)syncthing-pvc.yamlsvc:syncthing, 22000)syncthing-services.yamlstignoreVaultStaticSecret syncthing-config→Secret annia/syncthing-config,rolloutRestartTargetsso a rotation is a rollout (Syncthing reads its config once)secrets/annia-secrets.yamlvault kv putof the three files, plus the printed root-onlyannia-readhalfapps/annia/set-syncthing-credential.shsvc:approval in docs/tailscale.mdUSER_STORIES.md,docs/syncthing.md,OPERATIONS.md,docs/tailscale.mdThe fix commit in this PR —
9315a23--no-consoleis gone. It does not exist in the pinned 2.1.5 (syncthing: error: unknown flag --no-console, measured on the image), andserverefusesan unknown flag by exiting — so it was a CrashLoopBackOff on the pod the whole
appslayer waits on (wait: true), not a warning.re.S→re.DOTALLin the two new regexes (ruff FURB167), which is whatpipeline 143's
teststep failed on.instead of a
startswith, which passed for the unrewritten one.State
the suite and L3 preview.
secret/syncthing/configholdsconfig.xml,cert.pem,key.pem(written before the merge on purpose —
apps.yamliswait: true, so a podwhose Secret does not exist yet reddens the layer).
annia-readpolicyneeds the exact path
secret/data/syncthing/config—set-syncthing-credential.shprints the block. Measured from a pod using theSA the role is bound to: login succeeds and
secret/data/annia/rabbitmqreads200, while
secret/data/syncthing/configreads 403, so this is the onestep between the merge and a synced Secret.
After the merge (docs/syncthing.md §19d): PVC Bound → pod Ready → approve
svc:syncthingin the Tailscale console (once) → addtcp://syncthing.faun-snapper.ts.net:22000to the pod's device entry ondimaand
fedoraand approve the pod's device once →set-syncthing-credential.sh verify.A bare `val="$(vault_field …)"` under `set -e` exits the script the moment Vault has no such field — the FAIL branch for "has no <field>" was unreachable, the cluster checks never ran, and the run died with exit 2 ("unusable environment") after printing one ok line. `|| true` keeps the verdict with the summary, the way set-credential.sh chains the same read into an `if` condition. Refs: #21