stack-orchestrator/stack_orchestrator/deploy
Prathamesh Musale a6d54c7bf8 feat(k8s): manage Caddy ingress image lifecycle via spec (so-p3p)
The Caddy ingress image was hardcoded in the component manifest and
had no update path shy of cluster recreate or manual kubectl patch.
That forced woodburn to run an out-of-band ansible playbook to bump
Caddy, and broke the "spec.yml is source of truth" model.

Changes:

- spec.yml: new `caddy-ingress-image` key (default
  `ghcr.io/laconicnetwork/caddy-ingress:latest`).
- Deployment manifest: `strategy: Recreate` on the Caddy Deployment
  — required because the pod binds hostPort 80/443, which prevents
  any rolling update from completing (new pod hangs Pending forever
  waiting for old pod to release the ports).
- install_ingress_for_kind: accepts caddy_image and templates the
  manifest before applying, same pattern as the existing acme-email
  templating.
- update_caddy_ingress_image: patches the running Caddy Deployment
  when the spec image differs from the live image. No-op if they
  match. Returns True if a patch was applied so the caller can wait
  for the rollout.
- deploy_k8s._setup_cluster: on cluster reuse (ingress already up),
  reconcile the running image against the spec. Installs path
  unchanged; only the "already running, maybe needs update" branch
  is new.

Cluster-scoped caveat: caddy-system is shared by every deployment on
the cluster, so the spec value in any one deployment rolls Caddy for
all of them — last `deployment start` wins. Documented in
deployment_patterns.md alongside the other cluster-scoped concerns
(kind-mount-root, namespace ownership).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 06:51:53 +00:00
..
compose so-l2l: in-place stop/restart via label-scoped cleanup (#743) 2026-04-16 12:10:04 +05:30
k8s feat(k8s): manage Caddy ingress image lifecycle via spec (so-p3p) 2026-04-21 06:51:53 +00:00
webapp Merge wd-a7b: cluster-id/namespace naming, jobs, multi-cert, secrets 2026-04-01 18:22:07 +00:00
__init__.py Rename app -> stack_orchestrator (#625) 2023-11-07 00:06:55 -07:00
deploy.py so-l2l: in-place stop/restart via label-scoped cleanup (#743) 2026-04-16 12:10:04 +05:30
deploy_types.py Add Job and secrets support for k8s-kind deployments (#995) 2026-03-11 03:56:21 +00:00
deploy_util.py Fix pyright type errors across codebase 2026-01-22 01:10:36 -05:00
deployer.py so-l2l: in-place stop/restart via label-scoped cleanup (#743) 2026-04-16 12:10:04 +05:30
deployer_factory.py Add Job and secrets support for k8s-kind deployments (#995) 2026-03-11 03:56:21 +00:00
deployment.py so-l2l: in-place stop/restart via label-scoped cleanup (#743) 2026-04-16 12:10:04 +05:30
deployment_context.py k8s: shared-cluster safety checks and deployment-id decoupling (#748) 2026-04-21 12:17:28 +05:30
deployment_create.py k8s: shared-cluster safety checks and deployment-id decoupling (#748) 2026-04-21 12:17:28 +05:30
dns_probe.py feat(deploy): add deployment restart command 2026-02-03 17:15:19 -05:00
images.py Apply pre-commit linting fixes 2026-01-21 20:58:31 -05:00
spec.py feat(k8s): manage Caddy ingress image lifecycle via spec (so-p3p) 2026-04-21 06:51:53 +00:00
stack.py Apply pre-commit linting fixes 2026-01-21 20:58:31 -05:00
stack_state.py Rename app -> stack_orchestrator (#625) 2023-11-07 00:06:55 -07:00