Skip to content

feat: bundle the CSI external health monitor sidecar in airgapped mode - #40

Merged
sergeyberezansky merged 1 commit into
mainfrom
feat/airgapped-csi-health-monitor
Aug 17, 2026
Merged

feat: bundle the CSI external health monitor sidecar in airgapped mode#40
sergeyberezansky merged 1 commit into
mainfrom
feat/airgapped-csi-health-monitor

Conversation

@sergeyberezansky

@sergeyberezansky sergeyberezansky commented Aug 17, 2026

Copy link
Copy Markdown
Collaborator

What

The CSI plugin chart added an external health monitor sidecar (images.healthmonitorsidecarregistry.k8s.io/sig-storage/csi-external-health-monitor-controller:v0.18.0, confirmed against csi-wekafsplugin 2.9.2). The airgapped bundler didn't know about it, so an air-gapped install would come up without volume health monitoring.

Why it was silent

Download (bundle.go) and chart rewriting on upload (upload.go) each carried their own hardcoded list of sidecar value paths. A sidecar missing from a list is skipped with no output — so the new image was neither pulled into the bundle nor rewritten to the target registry, and the bundle still reported success. Two lists also meant a sidecar could be added to one and not the other, producing an image that ships but never gets its reference rewritten.

Changes

  • constants.go — one csiSidecarImagePaths map (path → description) is now the single source of truth for both paths, with images.healthmonitorsidecar added.
  • bundle.godownloadCSIImages iterates the shared map, so the health monitor image lands in the bundle. Refreshed the stale values.yaml reference comment to the current chart's tags.
  • upload.goupdateCSIChartValues iterates the same map, so charts-updated/ and values-overrides/values-csi.yaml point the sidecar at the target registry.
  • Operator chart — the operator deploys CSI itself via its own csi.*Image keys, so csi.healthMonitorImage was added to both the download and rewrite maps. It resolves empty and is skipped on operator charts that predate the key, so this is safe before feat: deploy CSI external health monitor sidecar, align CSI images with 2.9.2 weka-operator#2750 lands.
  • bundle.go — new warnUnknownCSISidecars: on download, warn for any images.*sidecar key not in the map. This is the reason the gap went unnoticed; the next sidecar the chart adds will now surface at download time instead of being quietly dropped.

Testing

go build ./..., go vet, gofmt, and the full go test ./pkg/... all pass. New csi_sidecars_test.go asserts:

  • the map covers every sidecar in a representative images: block (this test fails if a future sidecar is added to the chart but not the map),
  • the health monitor is rewritten to the target registry in the CSI chart, while sidecars absent from the image mapping stay out of the overrides,
  • the operator chart's csi.healthMonitorImage is rewritten too.

Not exercised against a real registry end to end — the download/upload round trip against a live bundle is untested here.

Related

weka/weka-operator#2750 adds the sidecar to the operator's embedded CSI deployment and the csi.healthMonitorImage value this consumes.

🤖 Generated with Claude Code

The CSI plugin chart added an external health monitor sidecar
(images.healthmonitorsidecar). The airgapped download and upload paths each
carried their own hardcoded list of sidecar value paths, so the new image was
neither pulled into the bundle nor rewritten to the target registry - and
because an unrecognized key is simply skipped, the bundle looked complete
while being unusable air-gapped.

Collapse the two lists into one csiSidecarImagePaths map used by both, and add
the health monitor to it. Same for the operator chart's own CSI image keys,
which gain csi.healthMonitorImage (empty and skipped on charts that predate
it).

Also warn on download for any images.*sidecar key not in the map, so the next
sidecar the chart adds surfaces instead of being silently dropped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

This stack of pull requests is managed by Graphite. Learn more about stacking.

@sergeyberezansky
sergeyberezansky merged commit 08dcb2d into main Aug 17, 2026
14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant