Compare commits
32
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c8b915d8f2 | ||
|
|
6cd3bd29a9 | ||
|
|
2040d35222 | ||
|
|
47fc27ff08 | ||
|
|
5e8b080298 | ||
|
|
24a0e1e4c5 | ||
|
|
306f6f4fb0 | ||
|
|
ae772e050d | ||
|
|
517dfc9030 | ||
|
|
16de787557 | ||
|
|
b7cb70955c | ||
|
|
9bcea04b1b | ||
|
|
5b484f6b78 | ||
|
|
640edb758d | ||
|
|
e6cd064f5c | ||
|
|
dd9d8da86a | ||
|
|
c3ce4db767 | ||
|
|
38076f1cff | ||
|
|
552330398b | ||
|
|
e49aebc803 | ||
|
|
9c0292001e | ||
|
|
db9416d3b5 | ||
|
|
cb4a1bf2de | ||
|
|
028f5229f0 | ||
|
|
44e2cd3c64 | ||
|
|
b30b7e6f67 | ||
|
|
5a3a5f8df2 | ||
|
|
f698bc82a0 | ||
|
|
6bc10fb60d | ||
|
|
d8c330fb8c | ||
|
|
a1d89f4a5f | ||
|
|
19097e4d4f |
No files matched your search
@@ -78,7 +78,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: jackett
|
- name: jackett
|
||||||
image: lscr.io/linuxserver/jackett:v0.24.2865-ls7
|
image: lscr.io/linuxserver/jackett:v0.24.3025-ls29
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 9117
|
- containerPort: 9117
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: pihole
|
- name: pihole
|
||||||
image: pihole/pihole:2026.10.0
|
image: pihole/pihole:2026.10.1
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: plex
|
- name: plex
|
||||||
image: plexinc/pms-docker:1.43.4.10903-e5521bd8c
|
image: plexinc/pms-docker:1.43.6.11085-d1e52e169
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 32400
|
- containerPort: 32400
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: semaphore
|
- name: semaphore
|
||||||
image: semaphoreui/semaphore:v2.19.10
|
image: semaphoreui/semaphore:v2.19.17
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 3000
|
- containerPort: 3000
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ spec:
|
|||||||
spec:
|
spec:
|
||||||
containers:
|
containers:
|
||||||
- name: sonarr
|
- name: sonarr
|
||||||
image: lscr.io/linuxserver/sonarr:4.0.15
|
image: lscr.io/linuxserver/sonarr:4.0.20
|
||||||
ports:
|
ports:
|
||||||
- containerPort: 8989
|
- containerPort: 8989
|
||||||
env:
|
env:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@
|
|||||||
name: jackett
|
name: jackett
|
||||||
kind: container
|
kind: container
|
||||||
source:
|
source:
|
||||||
image: lscr.io/linuxserver/jackett:v0.24.2865-ls7
|
image: lscr.io/linuxserver/jackett:v0.24.3025-ls29
|
||||||
exposure: internal # LAN-only web UI at jackett.${BASE_DOMAIN} (docs/13 row 4; R-DNS/R-NET)
|
exposure: internal # LAN-only web UI at jackett.${BASE_DOMAIN} (docs/13 row 4; R-DNS/R-NET)
|
||||||
egress: vpn # indexer scraping via node PIA tunnel + kill-switch (docs/03; ADR-0015; R-NET-05/06)
|
egress: vpn # indexer scraping via node PIA tunnel + kill-switch (docs/03; ADR-0015; R-NET-05/06)
|
||||||
storage:
|
storage:
|
||||||
|
|||||||
+1
-1
@@ -5,7 +5,7 @@
|
|||||||
name: pihole
|
name: pihole
|
||||||
kind: container
|
kind: container
|
||||||
source:
|
source:
|
||||||
image: pihole/pihole:2026.10.0
|
image: pihole/pihole:2026.10.1
|
||||||
exposure: internal # LAN-only admin UI (docs/13 row 6; R-DNS/R-NET)
|
exposure: internal # LAN-only admin UI (docs/13 row 6; R-DNS/R-NET)
|
||||||
egress: internet # normal WAN egress (docs/03; R-NET-05)
|
egress: internet # normal WAN egress (docs/03; R-NET-05)
|
||||||
storage:
|
storage:
|
||||||
|
|||||||
+1
-1
@@ -12,7 +12,7 @@
|
|||||||
name: plex
|
name: plex
|
||||||
kind: container
|
kind: container
|
||||||
source:
|
source:
|
||||||
image: plexinc/pms-docker:1.43.4.10903-e5521bd8c
|
image: plexinc/pms-docker:1.43.6.11085-d1e52e169
|
||||||
# plexinc/pms-docker env. Rendered VERBATIM onto the app container by render.py (schema env list).
|
# plexinc/pms-docker env. Rendered VERBATIM onto the app container by render.py (schema env list).
|
||||||
env:
|
env:
|
||||||
# PLEX_UID/PLEX_GID: the image boots as root (s6 PID1), chowns /config to this uid/gid, then drops
|
# PLEX_UID/PLEX_GID: the image boots as root (s6 PID1), chowns /config to this uid/gid, then drops
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
name: semaphore
|
name: semaphore
|
||||||
kind: container
|
kind: container
|
||||||
source:
|
source:
|
||||||
image: semaphoreui/semaphore:v2.19.10 # pinned recent stable tag (R-UPD-01); update.range governs advancement
|
image: semaphoreui/semaphore:v2.19.17 # pinned recent stable tag (R-UPD-01); update.range governs advancement
|
||||||
env:
|
env:
|
||||||
# --- PostgreSQL connection (the CNPG-DB pattern). DIALECT/HOST/PORT/DB/USER are literals; PASS is
|
# --- PostgreSQL connection (the CNPG-DB pattern). DIALECT/HOST/PORT/DB/USER are literals; PASS is
|
||||||
# sourced from the in-namespace SOPS secret (the CNPG -app secret lives in ns semaphore-db,
|
# sourced from the in-namespace SOPS secret (the CNPG -app secret lives in ns semaphore-db,
|
||||||
|
|||||||
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
name: sonarr
|
name: sonarr
|
||||||
kind: container
|
kind: container
|
||||||
source:
|
source:
|
||||||
image: lscr.io/linuxserver/sonarr:4.0.15 # pinned stable v4 tag (R-UPD-01); update.range governs advancement
|
image: lscr.io/linuxserver/sonarr:4.0.20 # pinned stable v4 tag (R-UPD-01); update.range governs advancement
|
||||||
# LinuxServer images run their service as the user `abc`, whose uid/gid these two set. They are
|
# LinuxServer images run their service as the user `abc`, whose uid/gid these two set. They are
|
||||||
# LOAD-BEARING for the bulk mount, not cosmetic: see the storage note below. The default is 911,
|
# LOAD-BEARING for the bulk mount, not cosmetic: see the storage note below. The default is 911,
|
||||||
# which cannot write a 1000:3000-owned 0755 tree.
|
# which cannot write a 1000:3000-owned 0755 tree.
|
||||||
|
|||||||
@@ -0,0 +1,41 @@
|
|||||||
|
---
|
||||||
|
date: 2026-10-31
|
||||||
|
branch: chore/pm-agent-digest-99
|
||||||
|
title: Pin pm-agent dispatcher and worker to the agent-runner digest built from PR #99's merge
|
||||||
|
---
|
||||||
|
|
||||||
|
## What changed
|
||||||
|
|
||||||
|
- `platform/pm-agent/deployment.yaml`: the dispatcher `image:` moves from
|
||||||
|
`agent-runner@sha256:df36d9b7…` (images run 383) to
|
||||||
|
`agent-runner@sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2`.
|
||||||
|
`config-generation` goes from "4" to "5" so the pod rolls.
|
||||||
|
- `platform/pm-agent/configmap.yaml`: `PM_WORKER_IMAGE` gets the same digest. A comment line
|
||||||
|
records where it came from. The `# renovate-digest:` marker still sits directly above both
|
||||||
|
values.
|
||||||
|
- No other values changed. `PM_DRY_RUN` stays "false". `PM_DECISION_MAX_TURNS` is not set, so
|
||||||
|
it keeps its in-code default of 1. No `*.sops.yaml` was touched.
|
||||||
|
|
||||||
|
## What I verified
|
||||||
|
|
||||||
|
- PR #99's merge commit is `466f63ec3c3df968a1dab25a8811dcd41961efde` (origin/main HEAD at
|
||||||
|
branch time).
|
||||||
|
- The Gitea Actions tasks API shows the `images` workflow (images.yaml) on that commit as
|
||||||
|
**run 394** (task 643), with event `push` and status `success`.
|
||||||
|
- I resolved the digest read-only from the registry by HEADing the manifests with OCI and
|
||||||
|
Docker Accept headers. Both `agent-runner:sha-466f63ec3c3d` and `agent-runner:main` returned
|
||||||
|
`200`, an `application/vnd.oci.image.manifest.v1+json` content type, and
|
||||||
|
`docker-content-digest: sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2`.
|
||||||
|
The two are identical.
|
||||||
|
- Toolbox gate: the rc and skipped stages are in the PR description.
|
||||||
|
|
||||||
|
## What I did NOT verify
|
||||||
|
|
||||||
|
- That the dispatcher actually rolls to the new digest after merge, and that Flux applies it.
|
||||||
|
Flux's `lastAppliedRevision` and the pod's image were not checked. That is post-merge work.
|
||||||
|
- That the new image surfaces the triage failure's real cause. It will show only on the next
|
||||||
|
failing triage, in the dispatcher log.
|
||||||
|
- That admission (rule 7, `imagePullSecrets`) admits worker Jobs from this digest. The
|
||||||
|
template comes from `infra/agent/` at PR #99's merge, which still carries the
|
||||||
|
`imagePullSecrets` entry, but no Job was created to prove it.
|
||||||
|
- I did not run the image's own selftest against this digest.
|
||||||
@@ -60,7 +60,7 @@ spec:
|
|||||||
# Pinned by digest (the multi-arch index). The kubernetes manager in renovate.json5
|
# Pinned by digest (the multi-arch index). The kubernetes manager in renovate.json5
|
||||||
# tracks platform/**, so Renovate proposes bumps; the CI client (buildx, pinned in
|
# tracks platform/**, so Renovate proposes bumps; the CI client (buildx, pinned in
|
||||||
# versions.env) talks to any recent daemon.
|
# versions.env) talks to any recent daemon.
|
||||||
image: docker.io/moby/buildkit:v0.34.1-rootless@sha256:f68752a5a94acfcdad2d07867b7075601a421638e17fc5f28efc1c814d0c4f89
|
image: docker.io/moby/buildkit:v0.34.2-rootless@sha256:c8252268760e1baba80780d63d738ef9f260fb7c7c0973c78494cb9ddd99eda1
|
||||||
args:
|
args:
|
||||||
- --addr
|
- --addr
|
||||||
- unix:///run/user/1000/buildkit/buildkitd.sock # local only: the probes below
|
- unix:///run/user/1000/buildkit/buildkitd.sock # local only: the probes below
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ spec:
|
|||||||
chart: cilium
|
chart: cilium
|
||||||
# [parity] Pinned to the exact version the Ansible bootstrap installs
|
# [parity] Pinned to the exact version the Ansible bootstrap installs
|
||||||
# (cilium_version in roles/cilium/defaults/main.yml). Renovate bumps both together.
|
# (cilium_version in roles/cilium/defaults/main.yml). Renovate bumps both together.
|
||||||
version: "1.20.1"
|
version: "1.20.4"
|
||||||
sourceRef:
|
sourceRef:
|
||||||
kind: HelmRepository
|
kind: HelmRepository
|
||||||
name: cilium
|
name: cilium
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ spec:
|
|||||||
type: RuntimeDefault
|
type: RuntimeDefault
|
||||||
containers:
|
containers:
|
||||||
- name: cloudflare-ddns
|
- name: cloudflare-ddns
|
||||||
image: favonia/cloudflare-ddns:1.17.1
|
image: favonia/cloudflare-ddns:1.18.0
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
env:
|
env:
|
||||||
- name: CLOUDFLARE_API_TOKEN
|
- name: CLOUDFLARE_API_TOKEN
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ spec:
|
|||||||
containers:
|
containers:
|
||||||
- name: homepage
|
- name: homepage
|
||||||
# Renovate maintains this pin (ghcr.io/gethomepage/homepage). Config lives in /app/config.
|
# Renovate maintains this pin (ghcr.io/gethomepage/homepage). Config lives in /app/config.
|
||||||
image: ghcr.io/gethomepage/homepage:v2.1.2
|
image: ghcr.io/gethomepage/homepage:v2.7.0
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: http
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ spec:
|
|||||||
valueFrom:
|
valueFrom:
|
||||||
fieldRef:
|
fieldRef:
|
||||||
fieldPath: status.hostIP
|
fieldPath: status.hostIP
|
||||||
image: intel/intel-gpu-plugin:0.37.0
|
image: intel/intel-gpu-plugin:0.37.1
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
name: intel-gpu-plugin
|
name: intel-gpu-plugin
|
||||||
resources:
|
resources:
|
||||||
|
|||||||
@@ -96,4 +96,4 @@ images:
|
|||||||
- name: intel/intel-gpu-plugin
|
- name: intel/intel-gpu-plugin
|
||||||
newName: docker.io/intel/intel-gpu-plugin
|
newName: docker.io/intel/intel-gpu-plugin
|
||||||
# renovate: datasource=github-releases depName=intel/intel-device-plugins-for-kubernetes
|
# renovate: datasource=github-releases depName=intel/intel-device-plugins-for-kubernetes
|
||||||
newTag: "0.37.0"
|
newTag: "0.37.1"
|
||||||
@@ -33,6 +33,6 @@ apiVersion: kustomize.config.k8s.io/v1beta1
|
|||||||
kind: Kustomization
|
kind: Kustomization
|
||||||
resources:
|
resources:
|
||||||
# renovate: datasource=github-releases depName=kubevirt/kubevirt
|
# renovate: datasource=github-releases depName=kubevirt/kubevirt
|
||||||
- https://github.com/kubevirt/kubevirt/releases/download/v1.9.0/kubevirt-operator.yaml
|
- https://github.com/kubevirt/kubevirt/releases/download/v1.9.1/kubevirt-operator.yaml
|
||||||
# renovate: datasource=github-releases depName=kubevirt/containerized-data-importer
|
# renovate: datasource=github-releases depName=kubevirt/containerized-data-importer
|
||||||
- https://github.com/kubevirt/containerized-data-importer/releases/download/v1.66.0/cdi-operator.yaml
|
- https://github.com/kubevirt/containerized-data-importer/releases/download/v1.66.1/cdi-operator.yaml
|
||||||
@@ -95,7 +95,7 @@ spec:
|
|||||||
# OIDC bootstrap hooks. (ci: flux-postbuild-substitution enforces it.)
|
# OIDC bootstrap hooks. (ci: flux-postbuild-substitution enforces it.)
|
||||||
extraInitContainers:
|
extraInitContainers:
|
||||||
- name: wait-for-idp
|
- name: wait-for-idp
|
||||||
image: docker.io/library/alpine:3.22
|
image: docker.io/library/alpine:3.24
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command: ["/bin/sh", "-c"]
|
command: ["/bin/sh", "-c"]
|
||||||
args:
|
args:
|
||||||
|
|||||||
@@ -63,8 +63,11 @@ data:
|
|||||||
# agent-runner:sha-ddd04d460ef6, pinned in PR #96) bakes a template that carries
|
# agent-runner:sha-ddd04d460ef6, pinned in PR #96) bakes a template that carries
|
||||||
# `imagePullSecrets: pm-agent-registry`, which is what made turning PM_DRY_RUN off possible
|
# `imagePullSecrets: pm-agent-registry`, which is what made turning PM_DRY_RUN off possible
|
||||||
# (decisions/2026-10-31-pm-agent-runner-digest.md). A digest older than that would be DENIED.
|
# (decisions/2026-10-31-pm-agent-runner-digest.md). A digest older than that would be DENIED.
|
||||||
|
# The digest below (14a42ba, images run 394, agent-runner:sha-466f63ec3c3d = PR #99's merge)
|
||||||
|
# adds the CLI failure envelope to triage errors and the PM_DECISION_MAX_TURNS knob
|
||||||
|
# (decisions/2026-10-31-pm-agent-digest-99.md).
|
||||||
# renovate-digest: image=gitea.home.keithjackson.dev/home-network/agent-runner tag=main
|
# renovate-digest: image=gitea.home.keithjackson.dev/home-network/agent-runner tag=main
|
||||||
PM_WORKER_IMAGE: "gitea.home.keithjackson.dev/home-network/agent-runner@sha256:df36d9b7fef56d141220a387f64fb864cede8e5af30513ebfeb3ab566d3f771d"
|
PM_WORKER_IMAGE: "gitea.home.keithjackson.dev/home-network/agent-runner@sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2"
|
||||||
|
|
||||||
# --- the model -------------------------------------------------------------
|
# --- the model -------------------------------------------------------------
|
||||||
# The PM only reads a thread and answers with one JSON object, so it holds no tools and
|
# The PM only reads a thread and answers with one JSON object, so it holds no tools and
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ spec:
|
|||||||
# It is a hand-maintained marker rather than a computed hash because Flux's
|
# It is a hand-maintained marker rather than a computed hash because Flux's
|
||||||
# Kustomization here does not run a configmap generator; bump it in the same commit
|
# Kustomization here does not run a configmap generator; bump it in the same commit
|
||||||
# as a change to configmap.yaml.
|
# as a change to configmap.yaml.
|
||||||
pm-agent.homelab.keithjackson.dev/config-generation: "4"
|
pm-agent.homelab.keithjackson.dev/config-generation: "5"
|
||||||
spec:
|
spec:
|
||||||
serviceAccountName: pm-agent
|
serviceAccountName: pm-agent
|
||||||
# The kubelet's credential for pulling this image. Not the agent's Gitea credential —
|
# The kubelet's credential for pulling this image. Not the agent's Gitea credential —
|
||||||
@@ -78,7 +78,7 @@ spec:
|
|||||||
# the registry's manifest endpoint on 2026-10-30 and pinned by hand once so the
|
# the registry's manifest endpoint on 2026-10-30 and pinned by hand once so the
|
||||||
# dispatcher does not wait on Renovate's first run; every later bump is Renovate's.
|
# dispatcher does not wait on Renovate's first run; every later bump is Renovate's.
|
||||||
# renovate-digest: image=gitea.home.keithjackson.dev/home-network/agent-runner tag=main
|
# renovate-digest: image=gitea.home.keithjackson.dev/home-network/agent-runner tag=main
|
||||||
image: gitea.home.keithjackson.dev/home-network/agent-runner@sha256:df36d9b7fef56d141220a387f64fb864cede8e5af30513ebfeb3ab566d3f771d
|
image: gitea.home.keithjackson.dev/home-network/agent-runner@sha256:14a42ba8281ecd98005f5d99ecda4fb729104c783b01584097c32e104ced1bb2
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
command:
|
command:
|
||||||
- /usr/local/bin/pm-dispatch
|
- /usr/local/bin/pm-dispatch
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ spec:
|
|||||||
# rather than becoming a fifth per-environment knob. ---
|
# rather than becoming a fifth per-environment knob. ---
|
||||||
initContainers:
|
initContainers:
|
||||||
- name: velero-plugin-for-aws
|
- name: velero-plugin-for-aws
|
||||||
image: velero/velero-plugin-for-aws:v1.14.3-rc.2
|
image: velero/velero-plugin-for-aws:v1.14.4
|
||||||
imagePullPolicy: IfNotPresent
|
imagePullPolicy: IfNotPresent
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- mountPath: /target
|
- mountPath: /target
|
||||||
|
|||||||
Reference in new issue
Block a user