I homelabbet flyttas tjänsternas secrets och config från Docker secrets till Infisical (self-hostat). Värdena blir vanliga env vars i Swarm-tjänsternas spec och fylls i av deploy.sh vid deploy. Plan och beslut: docs/infisical-plan.md i homelab-repot.
Fas 1 (manuellt: ändra i Infisical → deploy.sh <stack>) görs i homelab-repot. Den här issuen är fas 2: när ett värde ändras i Infisical ska tjänsten startas om med det nya värdet automatiskt, utan att någon kör något.
Påbörjas först när fas 1 fungerat på några tjänster.
Design
Agenten på Swarm-managern (den med swarm_manager: true) gör allt själv. Mastern är inte inblandad, så värdena passerar aldrig mastern, WebSocket-anslutningen eller update_jobs-tabellen.
Var 30:e sekund listar agenten Swarm-tjänster som har labeln infisical.path=/<stack>/<service>. Tjänster utan label rörs aldrig (db-stacken och authentik får ingen label).
För varje sådan tjänst hämtas värdena i mappen från Infisical (Universal Auth, läsrätt) och en hash räknas ut över dem.
Hashen jämförs med labeln infisical.hash på det körande specet (ServiceInspect), inte mot något agenten själv sparat. Agenten kan alltså startas om när som helst och räknar bara ut samma sak igen.
Vid skillnad: vänta tills hashen varit stabil i ~60 s, så att flera ändringar i rad ger en enda omstart.
Uppdatera specet med ServiceUpdate: sätt/ändra env vars från mappen och sätt infisical.hash=<ny>. Rör bara env och den labeln, aldrig imagen. Swarm gör en rolling restart.
Skicka en ntfy-notis vid varje omstart och varje misslyckande (tjänstnamn och vilka nycklar som ändrats — aldrig värdena).
Krav
Värden får aldrig loggas, sparas på disk eller skickas till mastern. Bara nycklar och hashar får förekomma i loggar och notiser.
Hämta med motsvarigheten till --expand=false: $ i ett värde ska inte tolkas som en variabelreferens.
Nycklar som tagits bort i Infisical: bestäm om de ska tas bort ur specet (--env-rm) eller lämnas. Förslag: ta bort bara nycklar som agenten själv satt tidigare, t.ex. genom att spara listan över nycklar i en label (infisical.keys), så env vars som kommer från stack-filen inte rensas.
Tekniska noteringar
Swarm-uppdateringar görs idag i internal/agent/updater/swarm.go (SwarmExecutor.Execute → cli.ServiceUpdate(ctx, svc.ID, svc.Version, spec, opts)). Den nya uppdateringen bör följa samma mönster: inspektera, ändra bara det som behövs i specet, skicka med svc.Version.
Serialisering: config-uppdateringar ska köras genom samma Runner (internal/agent/updater/runner.go, en FIFO-worker) som image-jobben. Då kan en image-uppdatering och en config-uppdatering av samma tjänst inte köra samtidigt och få versionskonflikt på svc.Version. Masterns unika index update_jobs_one_active skyddar inte här, eftersom config-uppdateringarna inte går via mastern.
Image-jobben läser redan det live specet innan de ändrar imagen, så env som config-synken satt bevaras. Verifiera med ett test.
Pollningsloopen kan ligga bredvid watchLoop i cmd/agent/main.go.
Config sker bara via env vars (internal/agent/config/config.go). Nya: INFISICAL_URL, INFISICAL_CLIENT_ID, INFISICAL_CLIENT_SECRET, INFISICAL_PROJECT_ID, INFISICAL_ENV, NTFY_URL, NTFY_TOPIC, NTFY_TOKEN. Funktionen ska vara avstängd om INFISICAL_URL saknas, så att agenterna på .33/.31 inte påverkas.
ntfy: det finns ingen notifikationskod idag, och docs säger att notiser är utanför scope. Den här issuen lägger till en minimal ntfy-klient (HTTP POST med bearer-token), som bara används av config-synken. Uppdatera docs.
Swarms automatiska rollback (update_config.failure_action: rollback) sätts i stack-filerna i homelab. Den hjälper bara om appen kraschar eller har en healthcheck, inte om den hänger.
Scope
Ingår:
Pollning av Infisical, jämförelse av hash och env-uppdatering i agenten på managern
Väntetid så att flera ändringar ger en omstart
ntfy-notis vid omstart och fel
Tester för: oförändrad hash ger ingen uppdatering, tjänst utan label rörs inte, värden förekommer inte i loggar
Ingår inte:
Webhooks från Infisical (pollning räcker, kan läggas till senare)
Visning i masterns dashboard
Compose-tjänster (bara Swarm)
Notiser för image-uppdateringar
## Beskrivning
I homelabbet flyttas tjänsternas secrets och config från Docker secrets till Infisical (self-hostat). Värdena blir vanliga env vars i Swarm-tjänsternas spec och fylls i av `deploy.sh` vid deploy. Plan och beslut: `docs/infisical-plan.md` i homelab-repot.
Fas 1 (manuellt: ändra i Infisical → `deploy.sh <stack>`) görs i homelab-repot. **Den här issuen är fas 2:** när ett värde ändras i Infisical ska tjänsten startas om med det nya värdet automatiskt, utan att någon kör något.
**Påbörjas först när fas 1 fungerat på några tjänster.**
## Design
Agenten på Swarm-managern (den med `swarm_manager: true`) gör allt själv. Mastern är inte inblandad, så värdena passerar aldrig mastern, WebSocket-anslutningen eller `update_jobs`-tabellen.
1. Var 30:e sekund listar agenten Swarm-tjänster som har labeln `infisical.path=/<stack>/<service>`. Tjänster utan label rörs aldrig (`db`-stacken och authentik får ingen label).
2. För varje sådan tjänst hämtas värdena i mappen från Infisical (Universal Auth, läsrätt) och en hash räknas ut över dem.
3. Hashen jämförs med labeln `infisical.hash` på det **körande** specet (`ServiceInspect`), inte mot något agenten själv sparat. Agenten kan alltså startas om när som helst och räknar bara ut samma sak igen.
4. Vid skillnad: vänta tills hashen varit stabil i ~60 s, så att flera ändringar i rad ger en enda omstart.
5. Uppdatera specet med `ServiceUpdate`: sätt/ändra env vars från mappen och sätt `infisical.hash=<ny>`. **Rör bara env och den labeln, aldrig imagen.** Swarm gör en rolling restart.
6. Skicka en ntfy-notis vid varje omstart och varje misslyckande (tjänstnamn och vilka **nycklar** som ändrats — aldrig värdena).
### Krav
- Värden får aldrig loggas, sparas på disk eller skickas till mastern. Bara nycklar och hashar får förekomma i loggar och notiser.
- Hämta med motsvarigheten till `--expand=false`: `$` i ett värde ska inte tolkas som en variabelreferens.
- Nycklar som tagits bort i Infisical: bestäm om de ska tas bort ur specet (`--env-rm`) eller lämnas. Förslag: ta bort bara nycklar som agenten själv satt tidigare, t.ex. genom att spara listan över nycklar i en label (`infisical.keys`), så env vars som kommer från stack-filen inte rensas.
## Tekniska noteringar
- Swarm-uppdateringar görs idag i `internal/agent/updater/swarm.go` (`SwarmExecutor.Execute` → `cli.ServiceUpdate(ctx, svc.ID, svc.Version, spec, opts)`). Den nya uppdateringen bör följa samma mönster: inspektera, ändra bara det som behövs i specet, skicka med `svc.Version`.
- **Serialisering:** config-uppdateringar ska köras genom samma `Runner` (`internal/agent/updater/runner.go`, en FIFO-worker) som image-jobben. Då kan en image-uppdatering och en config-uppdatering av samma tjänst inte köra samtidigt och få versionskonflikt på `svc.Version`. Masterns unika index `update_jobs_one_active` skyddar inte här, eftersom config-uppdateringarna inte går via mastern.
- Image-jobben läser redan det live specet innan de ändrar imagen, så env som config-synken satt bevaras. Verifiera med ett test.
- Pollningsloopen kan ligga bredvid `watchLoop` i `cmd/agent/main.go`.
- Config sker bara via env vars (`internal/agent/config/config.go`). Nya: `INFISICAL_URL`, `INFISICAL_CLIENT_ID`, `INFISICAL_CLIENT_SECRET`, `INFISICAL_PROJECT_ID`, `INFISICAL_ENV`, `NTFY_URL`, `NTFY_TOPIC`, `NTFY_TOKEN`. Funktionen ska vara avstängd om `INFISICAL_URL` saknas, så att agenterna på `.33`/`.31` inte påverkas.
- **ntfy:** det finns ingen notifikationskod idag, och docs säger att notiser är utanför scope. Den här issuen lägger till en minimal ntfy-klient (HTTP POST med bearer-token), som bara används av config-synken. Uppdatera docs.
- Swarms automatiska rollback (`update_config.failure_action: rollback`) sätts i stack-filerna i homelab. Den hjälper bara om appen kraschar eller har en healthcheck, inte om den hänger.
## Scope
**Ingår:**
- Pollning av Infisical, jämförelse av hash och env-uppdatering i agenten på managern
- Väntetid så att flera ändringar ger en omstart
- ntfy-notis vid omstart och fel
- Tester för: oförändrad hash ger ingen uppdatering, tjänst utan label rörs inte, värden förekommer inte i loggar
**Ingår inte:**
- Webhooks från Infisical (pollning räcker, kan läggas till senare)
- Visning i masterns dashboard
- Compose-tjänster (bara Swarm)
- Notiser för image-uppdateringar
shcizo
added the later label 2026-10-16 11:46:35 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Beskrivning
I homelabbet flyttas tjänsternas secrets och config från Docker secrets till Infisical (self-hostat). Värdena blir vanliga env vars i Swarm-tjänsternas spec och fylls i av
deploy.shvid deploy. Plan och beslut:docs/infisical-plan.mdi homelab-repot.Fas 1 (manuellt: ändra i Infisical →
deploy.sh <stack>) görs i homelab-repot. Den här issuen är fas 2: när ett värde ändras i Infisical ska tjänsten startas om med det nya värdet automatiskt, utan att någon kör något.Påbörjas först när fas 1 fungerat på några tjänster.
Design
Agenten på Swarm-managern (den med
swarm_manager: true) gör allt själv. Mastern är inte inblandad, så värdena passerar aldrig mastern, WebSocket-anslutningen ellerupdate_jobs-tabellen.infisical.path=/<stack>/<service>. Tjänster utan label rörs aldrig (db-stacken och authentik får ingen label).infisical.hashpå det körande specet (ServiceInspect), inte mot något agenten själv sparat. Agenten kan alltså startas om när som helst och räknar bara ut samma sak igen.ServiceUpdate: sätt/ändra env vars från mappen och sättinfisical.hash=<ny>. Rör bara env och den labeln, aldrig imagen. Swarm gör en rolling restart.Krav
--expand=false:$i ett värde ska inte tolkas som en variabelreferens.--env-rm) eller lämnas. Förslag: ta bort bara nycklar som agenten själv satt tidigare, t.ex. genom att spara listan över nycklar i en label (infisical.keys), så env vars som kommer från stack-filen inte rensas.Tekniska noteringar
internal/agent/updater/swarm.go(SwarmExecutor.Execute→cli.ServiceUpdate(ctx, svc.ID, svc.Version, spec, opts)). Den nya uppdateringen bör följa samma mönster: inspektera, ändra bara det som behövs i specet, skicka medsvc.Version.Runner(internal/agent/updater/runner.go, en FIFO-worker) som image-jobben. Då kan en image-uppdatering och en config-uppdatering av samma tjänst inte köra samtidigt och få versionskonflikt påsvc.Version. Masterns unika indexupdate_jobs_one_activeskyddar inte här, eftersom config-uppdateringarna inte går via mastern.watchLoopicmd/agent/main.go.internal/agent/config/config.go). Nya:INFISICAL_URL,INFISICAL_CLIENT_ID,INFISICAL_CLIENT_SECRET,INFISICAL_PROJECT_ID,INFISICAL_ENV,NTFY_URL,NTFY_TOPIC,NTFY_TOKEN. Funktionen ska vara avstängd omINFISICAL_URLsaknas, så att agenterna på.33/.31inte påverkas.update_config.failure_action: rollback) sätts i stack-filerna i homelab. Den hjälper bara om appen kraschar eller har en healthcheck, inte om den hänger.Scope
Ingår:
Ingår inte: