Skip to content

Use published SecureBuild images across latest add-ons - #6204

Open
mikhailswift wants to merge 13 commits into
mainfrom
mikhail/securebuild-latest-addon-images
Open

mikhailswift wants to merge 13 commits into
mainfrom
mikhail/securebuild-latest-addon-images

Conversation

@mikhailswift

@mikhailswift mikhailswift commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

What this PR does / why we need it:

Switch the latest add-on versions to the SecureBuild images now published publicly to kurlsh. Keep the runtime manifests, dynamically selected images, offline image bundles, and generation templates aligned in one PR.

Add-on Version Images switched
Prometheus 0.94.1-91.8.0 Prometheus, Grafana, kiwigrid sidecar, Alertmanager, node-exporter, operator, config-reloader, kube-state-metrics, adapter
Rook 1.19.7 Rook operator, Ceph 19.2.4, CephCSI, CSI operator, registrar, resizer, provisioner, snapshotter, attacher, CSI addons sidecar
Cert Manager 1.21.2 Controller, cainjector, webhook, ACME solver
Contour 1.33.7 Contour and Envoy 1.38.4
Metrics Server 0.9.0 Metrics Server
Sonobuoy 0.57.5 Aggregator/worker and systemd-logs plugin
EKCO 0.28.17 HAProxy 3.4.6
Containerd 2.3.6 pause 3.10
Kubernetes 1.36.5 and 1.37.1 pause 3.10.2

This integrates 31 published tags across 30 image repositories. Application versions remain the same; image tags drop upstream packaging suffixes where the SecureBuild tags use the plain application version.

Which issue(s) this PR fixes:

None.

Special notes for your reviewer:

  • The listed add-on versions are the starting points for SecureBuild generation. Older versions retain upstream repositories; these versions and newer releases use kurlsh while preserving each generated component tag. Packaging suffixes such as -distroless and HAProxy’s Alpine suffix are removed to match SecureBuild tag naming. All eight generators verify every selected docker.io/kurlsh tag with docker manifest inspect before rewriting files; unavailable tags or registry lookup failures stop generation. Future version updates must publish the matching SecureBuild tags before generation. The rewrite rules live directly in each generator; there are no separate .sed files.
  • Contour retains explicit docker.io/ prefixes from 1.33.7 onward and normalizes fully qualified and bare upstream references. Older versions retain the historical Docker EE prefix handling.
  • Cert Manager's runtime-spawned ACME solver is now included in its air-gap Manifest.
  • Rook's CSI image settings and toolbox use the packaged images. Its FlexVolume migration helper also resolves the operator image from the Manifest.
  • The installed Sonobuoy CLI supplies the packaged aggregator/worker and systemd-logs image defaults for run and gen; explicit CLI image options can override those defaults. Historical releases keep their original CLI installation and defaults. Generation validates both image entries and fails explicitly on missing, malformed, duplicate, or unexpected references. Conformance images remain unchanged.
  • EKCO's primary replicated/ekco:v0.28.17 image already uses SecureBuild and stays in place. HAProxy retains the existing configuration mount path. Its SecureBuild image now starts with -W -db, matching the upstream container's foreground behavior even when EKCO's generated config contains daemon. The corrected multi-architecture image was republished at docker.io/kurlsh/haproxy:3.4.6 (index digest sha256:31236dc94c90a52b0ce99d122e8ad338d706abc4f6ae9beb8e1588fa87cf8e40).
  • The Kubernetes pause image uses kurlsh starting at 1.36.5 and retains the pause version returned by kubeadm for future releases. Generation verifies the published pause tag with docker manifest inspect and fails before rewriting the Manifest if it cannot be verified; it does not silently fall back to an upstream image. Containerd already reads the Kubernetes package Manifest when selecting its sandbox image. Existing per-version control-plane image overrides are unchanged.
  • This is an image migration, not a claim that every image is free of vulnerabilities. Existing older add-on versions remain unchanged.

Steps to reproduce

Local validation completed:

  • Anonymous pulls of all 31 public tags, including amd64 and arm64 manifests and blobs, with SHA256 verification.
  • Existing Rook shell tests: 3 passed.
  • Existing Kubernetes SecureBuild generation tests: 2 passed, including after rebasing onto main and retaining its CoreDNS 1.14.7 update.
  • Existing Containerd add-on tests: 7 passed; Containerd configure/upgrade regression suite passed.
  • Rook operator and cluster Kustomize rendering passed.
  • YAML and image-bundle closure checks cover the changed runtime manifests and verify that every newly selected image belongs to the published set.
  • Boundary checks confirm that all eight generators retain upstream refs below their starting versions and use matching SecureBuild refs at and above those versions, including future component tags and upstream digest removal. Future Kubernetes pause tags are also checked. All eight generator image-rewrite steps are idempotent. Changed shell scripts pass syntax checks, git diff --check passes, and scripts/Manifest matches its test fixture.
  • Sonobuoy CLI generation smoke check selects the new aggregator, worker, and systemd-logs images. Its published image was rebuilt with the /sonobuoy compatibility symlink required by its generated pods; anonymous amd64/arm64 pulls verify that path.

Build and shell CI passed on cfb56dceb. Full Testgrid install/upgrade verification remains incomplete: the earlier EKCO matrix has cancelled cases and runtime/runner failures, and the other matrices were skipped. The rebuilt HAProxy default startup and port 6444 listener passed on both amd64 and arm64; SecureBuild reports no vulnerabilities for either architecture. This PR groups the migration for integration testing; no new test cases or coverage expansion are added.

Does this PR introduce a user-facing change?

The latest Prometheus, Rook, Cert Manager, Contour, Metrics Server, Sonobuoy, EKCO HAProxy, and Containerd pause images now use SecureBuild images published to kurlsh. Kubernetes 1.36.5 and 1.37.1 also use the SecureBuild pause image.

Does this PR require documentation?

NONE

@mikhailswift
mikhailswift requested a review from a team as a code owner October 14, 2026 19:19
@doomer-ai

doomer-ai Bot commented Oct 14, 2026 •

Copy link
Copy Markdown

Doomer review
Review incomplete. Open the review for the cause and next steps.

Doomer review failed (review incomplete): View on doomer.ai for the cause and next steps

Automatic approval: Enabled

Last completed review

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

Comment thread addons/containerd/2.3.6/Manifest
Comment thread addons/rook/1.19.7/Manifest
Comment thread addons/sonobuoy/0.57.5/install.sh Outdated
@github-actions

Copy link
Copy Markdown
Contributor

Comment thread addons/contour/template/script.sh
Comment thread packages/kubernetes/template/script.sh Outdated
Comment thread addons/rook/1.19.7/install.sh
Comment thread addons/contour/template/script.sh
Comment thread addons/containerd/template/script.sh
Comment thread addons/contour/template/script.sh
Comment thread addons/sonobuoy/template/generate.sh Outdated
@doomer-ai

doomer-ai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Doomer isn't automatically approving this pull request.

Why: The Doomer review did not complete successfully. Reviewer failure details: - <code>registry.doomer.ai/library/review/engineering@​sha256:2a50f498bff3fc16561ed0bec4fc7233633acd11900e80cf990a3207f0f41b9d [batch-001]</code>: <code>ModelReviewError: model_request_recovery_exhausted: Model request recovery exhausted after 3 attempt(s) (attempt_limit).</code>; Partial review: 1 review jobs failed; unsupported candidates, if any, were withheld. Completed reviewers' findings are retained. No clean-review opinion. Findings from completed reviewers do not establish that the whole review passed.

Comment /doomer run on this pull request to try again. Automatic approval requires a completed review that passes the configured checks.

Alternatively, a reviewer can review and approve this pull request on GitHub.

@mikhailswift
mikhailswift force-pushed the mikhail/securebuild-latest-addon-images branch from b0a2bf7 to c418917 Compare October 14, 2026 20:29
Comment thread addons/sonobuoy/0.57.5/install.sh
Comment thread bin/verify-securebuild-images.sh
Comment thread bin/verify-securebuild-images.sh
Comment thread addons/sonobuoy/0.57.5/install.sh Outdated
@doomer-ai

doomer-ai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Doomer isn't automatically approving this pull request.

Why: The Doomer review did not complete successfully. Reviewer failure details: - <code>registry.doomer.ai/library/review/code@​sha256:910c1934ccd3e519656119b30b4eaa9cabbf1815020ec6f9bb55b4860eb069a7 [full-change]</code>: <code>host execution failed (child exit -1): context deadline exceeded</code>; Partial review: 1 review jobs failed; unsupported candidates, if any, were withheld. Completed reviewers' findings are retained. No clean-review opinion. Findings from completed reviewers do not establish that the whole review passed.

Comment /doomer run on this pull request to try again. Automatic approval requires a completed review that passes the configured checks.

Alternatively, a reviewer can review and approve this pull request on GitHub.

@xavpaice

Copy link
Copy Markdown
Member

/doomer run

@doomer-ai

doomer-ai Bot commented Oct 14, 2026

Copy link
Copy Markdown

Doomer recognized /doomer run and queued a new hosted review. The Doomer check will update as the worker processes it.

Comment thread addons/containerd/template/script.sh
@doomer-ai

doomer-ai Bot commented Oct 15, 2026

Copy link
Copy Markdown

Doomer isn't automatically approving this pull request.

Why: The Doomer review did not complete successfully. Reviewer failure details: - <code>registry.doomer.ai/library/review/code@​sha256:910c1934ccd3e519656119b30b4eaa9cabbf1815020ec6f9bb55b4860eb069a7 [full-change]</code>: <code>ModelReviewError: model_request_recovery_exhausted: Model request recovery exhausted after 1 attempt(s) (deadline).</code>; Partial review: 1 review jobs failed; unsupported candidates, if any, were withheld. Completed reviewers' findings are retained. No clean-review opinion. Findings from completed reviewers do not establish that the whole review passed.

Comment /doomer run on this pull request to try again. Automatic approval requires a completed review that passes the configured checks.

Alternatively, a reviewer can review and approve this pull request on GitHub.

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

Comment thread addons/cert-manager/template/generate.sh
- Move old-k8s legs from 1.21.x to 1.25.x: contour CRDs use
  x-kubernetes-validations (CEL), which requires Kubernetes >= 1.25.
- Use 'latest' kubernetes for the current-version legs and float the
  upgrade baseline on kurl.sh/latest.
- Exclude old-kernel OSes (amzn-20, centos-79, ol-79, ol-8x,
  ubuntu-1804) from the 'k8s latest' leg; containerd 2.3.6 bundles
  runc 1.5.1 which cannot create containers on their kernels.
@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

done

while IFS= read -r image; do
if ! docker manifest inspect "$image" >/dev/null; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should fix before merging

Any docker manifest inspect failure gets reported as "publish this tag", so registry/transport errors get dressed up as a missing publish. Capture the exit status and stderr and categorize the failure instead.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should fix before merging

SecureBuild verification categorizes every docker manifest lookup failure as an unpublished tag.

while IFS= read -r -d '' file; do
files+=("$file")
done < <(find "$dir" -type f \( -name Manifest -o -name '*.yaml' -o -name '*.sh' \) -print0)
bash ../../../bin/verify-securebuild-images.sh "$dir/Manifest" "$replacements" "${files[@]}" || return 1

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should fix before merging

The new network-dependent verify step runs after remove_previous_versions, so a failed verify leaves every existing ekco version deleted and generation aborted. Reorder the script so the verify runs first, or only clean old versions once the new one has been verified.

mkdir -p "${src}/assets"
curl -L -o "${src}/assets/sonobuoy.tar.gz" "https://github.com/vmware-tanzu/sonobuoy/releases/download/v${SONOBUOY_VERSION}/sonobuoy_${SONOBUOY_VERSION}_linux_amd64.tar.gz"
local download=
download="$(mktemp "${src}/assets/sonobuoy.tar.gz.XXXXXX")"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you have the time

If mktemp fails for sonobuoy_binary, the script aborts with no message while every other failure path wraps errors in logFail. Route this one through logFail too so a failed install isn't silently unattributed.

manifest="$1"
replacements="$2"
shift 2
images="$(sed -E "$replacements" "$manifest" | awk '$1 == "image" && $3 ~ /^docker[.]io\/kurlsh\// {print $3}' | sort -u)"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you have the time

The SecureBuild closure check at the top of this script doesn't catch upstream images that were silently left unrewritten. If an upstream ref skips the rewrite, the closure still validates. Worth asserting every upstream image was actually rewritten, or at least flagging any that weren't.

@github-actions

Copy link
Copy Markdown
Contributor

@xavpaice

Copy link
Copy Markdown
Member

Testgrid run pr-6204-589ea77-rook-1.19.7-k8s-docker: 0/22 finished instances passed — every OS fails the same way, and the root cause is the SecureBuild rook image.

Failure mode

rook-discover CrashLoopBackOffs on every OS (Amazon Linux 2023, Rocky 9.8/10.2, Ubuntu 22.04/24.04/26.04 — 12 × kurl_install, 6 × kurl_upgrade):

  • Install: no device discovery → no OSD → RGW pod never starts → installer stalls at checking for attached secondary block device (awaiting rook-ceph RGW pod) until the 30m timeout (exit 124), or fails fast at Awaiting rook-ceph pods (exit 1)
  • Upgrade: timed out waiting for Rook 1.19.7 to roll out, Ceph stays HEALTH_WARN, installer aborts with Refusing to update cluster rook-ceph, Ceph is not healthy

Root cause

docker.io/kurlsh/rook-ceph:v1.19.7 is missing the storage utilities rook shells out to. Compared with upstream docker.io/rook/ceph:v1.19.7:

Binary upstream rook/ceph:v1.19.7 kurlsh/rook-ceph:v1.19.7
lsblk ✅ ❌
sgdisk / sfdisk ✅ ❌
dmsetup ✅ ❌
lvm / pvcreate / vgcreate / lvcreate ✅ ❌
mkfs.xfs ✅ ❌
ceph, ceph-volume, udevadm, blkid, mount ✅ ✅

Entrypoint, user, and the rook binary itself are identical between the two images — rook discover starts fine, then crashes when it execs lsblk to enumerate host block devices. The operator uses the same image but survives because that code path never execs these tools.

Ask

Can the SecureBuild rook-ceph image be rebuilt with package parity — at minimum util-linux (lsblk), gdisk (sgdisk/sfdisk), device-mapper (dmsetup), lvm2, and xfsprogs (mkfs.xfs)? Once that's published we can re-run this.

(For the record: the 4 CentOS 9 stream failures in this run are failed to create VMI infra issues, unrelated to the PR. Also worth noting the new bin/verify-securebuild-images.sh only verifies image references were rewritten — it doesn't check image content parity, which is how this got as far as Testgrid.)

@mikhailswift

Copy link
Copy Markdown
Member Author

The missing-storage-tool image defect is repaired and the rebuilt docker.io/kurlsh/rook-ceph:v1.19.7 is published to Docker Hub. This addresses the image content reported in the Rook Testgrid failure analysis.

Added the util-linux subpackages (lsblk, sfdisk, blockdev, wipefs, findmnt), gptfdisk-1.0, lvm2-2.03 (which also supplies dmsetup), and xfsprogs-6.15. Runtime verification also uncovered existing missing Python packaging and yaml modules that prevented ceph-volume from starting; the image now includes their Python 3.12 packages. Rook version, entrypoint and default user are unchanged.

Pulled and executed both published architectures. All nine reported missing binaries are present and executable. lsblk JSON output, storage-tool version/help checks, rook version, ceph --version, and ceph-volume top-level/LVM/inventory help passed on both architectures. Grype reported 0 findings on both, using DB built 2026-10-15T06:30:36Z (update check reported no newer DB).

Verified manifests:

  • amd64: sha256:ac62f00b79e2dbf5a7c74dceee8b7c90fbe46c5fe033e9905880d7f4f1b4c9ea
  • arm64: sha256:abf5cf9654aa722f22d0f76e31086e516dcc3effffe8ae4bfd02767ea050d0b7

These are isolated runtime smoke checks; OSD provisioning and cluster install/upgrade still need the existing Testgrid scenarios. Rebuild the Rook add-on archive with the new image before rerunning—previously built online/air-gap artifacts and queued runs can still contain the old image despite the unchanged tag. No new Testgrid run was submitted as part of this image repair.

@github-actions

Copy link
Copy Markdown
Contributor

@xavpaice

Copy link
Copy Markdown
Member

Follow-up: rebuilt image fixed the discover crash, but the rook-ceph image is still broken — radosgw-admin hangs, so RGW is never created.

Re-ran rook-only tests against the rebuilt image (run pr-6204-f1099ba): rook-discover now runs and OSDs provision on every OS — but 0 instances still pass. All install/upgrade legs now stall ~20 min later at checking for attached secondary block device (awaiting rook-ceph RGW pod) → timeout (exit 124). The RGW deployment for rook-ceph-store is never created.

Reproduced on a CMX VM (Ubuntu 24.04, exact staging installer from the failed run). Operator log loops forever on:

exec: exec timeout waiting for process radosgw-admin to return. Sending interrupt signal
E | object-controller: failed to reconcile CephObjectStore "rook-ceph/rook-ceph-store": failed to configure multisite for object store: failed create ceph multisite for object-store ["rook-ceph-store"]: 'radosgw-admin "realm" get' failed with code "-1", for reason ". ": signal: interrupt

Rook's object-store controller execs radosgw-admin locally in the operator container to set up the realm/zonegroup/zone before it creates the RGW deployment — so a hanging radosgw-admin in the operator image blocks RGW forever.

Isolation (same live cluster, healthy OSD, 10 pools, RADOS I/O verified working from the operator pod):

Where Image / embedded ceph radosgw-admin realm get
rook-ceph-operator pod kurlsh/rook-ceph:v1.19.7 / 19.2.3 (squid) ❌ hangs indefinitely
rook-ceph-tools pod kurlsh/ceph:v19.2.4 / 19.2.4 ✅ instant, expected rc=2 (no realm yet)
(baseline) upstream rook/ceph:v1.19.7 / 20.2.1 (tentacle) ✅ (same tests passed in June with upstream images)

So the SecureBuild kurlsh/rook-ceph:v1.19.7 doesn't have content parity with upstream even in Ceph version (squid 19.2.3 vs tentacle 20.2.1), and its radosgw-admin hangs on realm operations. The kurlsh/ceph:v19.2.4 daemon image is fine — the cluster it forms is healthy.

Ask: rebuild kurlsh/rook-ceph:v1.19.7 with the same Ceph clients as upstream (ceph --version → v20.2.1 tentacle). A cheap parity gate that would have caught both failures so far: run ceph --version + a smoke radosgw-admin realm get against a scratch cluster (or even just diff the binary/version inventory) on the SecureBuild image vs the upstream image it replaces.

@mikhailswift

Copy link
Copy Markdown
Member Author

@doomer-ai are you listening?

# Keep older releases on upstream images; use SecureBuild from this release onward.
function use_securebuild_images() {
local dir="../$CERT_MANAGER_VERSION"
[ "$(printf '%s\n' "1.21.2" "$CERT_MANAGER_VERSION" | sort -V | head -n 1)" = "1.21.2" ] || return 0

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@doomer-ai does this properly handle new versions of this addon going forward

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, mechanically. The gate on line 8 is a lower bound (SecureBuild applies when CERT_MANAGER_VERSION sorts at or above 1.21.2), not a pinned version, so any newer version passes. The sed rules match quay.io/jetstack/cert-manager-* tags regardless of version, and generate() runs use_securebuild_images on every generation. The caveat: each new version still requires the corresponding docker.io/kurlsh images to be published — verify-securebuild-images.sh checks the Manifest rewrite and runs docker manifest inspect, so it fails loudly ("Publish this tag before generating") rather than silently shipping broken images. If upstream ever moves off quay.io/jetstack or renames the controller/cainjector/webhook/acmesolver images, the rewrite won't match and the same verification will error out instead of producing stale upstream references.

Sources: addons/cert-manager/template/generate.sh, addons/cert-manager/template/generate.sh, bin/verify-securebuild-images.sh

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

@github-actions

Copy link
Copy Markdown
Contributor

if [ "$(printf '%s\n' "1.36.5" "$version" | sort -V | head -n 1)" = "1.36.5" ]; then
local upstream_pause= pause_image=
upstream_pause="$(awk '$1 == "image" && $2 == "pause" {print $3; exit}' "$manifest")"
case "$upstream_pause" in

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don’t merge until this is fixed

Silently ignoring an unrecognized pause ref means a typo'd or renamed upstream tag skips the SecureBuild gate without a trace. Fail loudly instead: match against an explicit allowlist and abort generation on anything else.

local binary="/usr/local/lib/sonobuoy/sonobuoy"
if [ -f "${src}/sonobuoy.sh" ] && [ -x "$binary" ] && \
[ "$("$binary" version 2>/dev/null | awk '/^Sonobuoy Version:/ {print $NF}')" = "v${SONOBUOY_VERSION}" ]; then
install -m 0755 "${src}/sonobuoy.sh" /usr/local/bin/sonobuoy

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should fix before merging

Both fast-path reinstall calls exit silently on failure — no logFail, no return-1 — so a broken install looks like success. Wrap them the same way the tar steps are wrapped so failures actually surface.

curl -L -o "${src}/assets/sonobuoy.tar.gz" "https://github.com/vmware-tanzu/sonobuoy/releases/download/v${SONOBUOY_VERSION}/sonobuoy_${SONOBUOY_VERSION}_linux_amd64.tar.gz"
local download=
download="$(mktemp "${src}/assets/sonobuoy.tar.gz.XXXXXX")"
if ! curl -fL -o "$download" "https://github.com/vmware-tanzu/sonobuoy/releases/download/v${SONOBUOY_VERSION}/sonobuoy_${SONOBUOY_VERSION}_linux_amd64.tar.gz"; then

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should fix before merging

mktemp failure here gets logged as a download failure, so a staging-dir problem masquerades as a network issue. Check mktemp separately, e.g. if ! download="$(mktemp "${src}/assets/sonobuoy.tar.gz.XXXXXX")"; then logFail "Failed to create a staging file next to ${src}/assets/sonobuoy.tar.gz."; return 1; fi.

@doomer-ai

doomer-ai Bot commented Oct 16, 2026

Copy link
Copy Markdown

Doomer isn't automatically approving this pull request.

Why: The Doomer review did not complete successfully. Reviewer failure details: - <code>registry.doomer.ai/library/review/engineering@​sha256:2a50f498bff3fc16561ed0bec4fc7233633acd11900e80cf990a3207f0f41b9d [batch-001]</code>: <code>ModelReviewError: model_request_recovery_exhausted: Model request recovery exhausted after 3 attempt(s) (attempt_limit).</code>; Partial review: 1 review jobs failed; unsupported candidates, if any, were withheld. Completed reviewers' findings are retained. No clean-review opinion. Findings from completed reviewers do not establish that the whole review passed.

Comment /doomer run on this pull request to try again. Automatic approval requires a completed review that passes the configured checks.

Alternatively, a reviewer can review and approve this pull request on GitHub.

@mikhailswift

mikhailswift commented Oct 16, 2026 •

Copy link
Copy Markdown
Member Author

Updated image: docker.io/kurlsh/rook-ceph:v1.19.7

Immutable multi-architecture reference: docker.io/kurlsh/rook-ceph@sha256:c5062b872e6cfa600a96e29ba754244360ac0b8783983495850ce0da3f68508c

Follow-up to #6204 (comment): the rebuilt docker.io/kurlsh/rook-ceph:v1.19.7 is published for amd64 and arm64 with Ceph 20.2.1 clients, matching the upstream Rook image's embedded Ceph version. The earlier storage-tool and Python dependency fixes are preserved. The separate kurlsh/ceph:v19.2.4 daemon image was not changed.

I reproduced the old image's radosgw-admin realm get hang against a disposable Ceph 19.2.4 monitor/OSD cluster with verified RADOS write/read access. The old client exceeded the 20-second limit; known-good Ceph 19.2.4 and upstream Rook/Ceph 20.2.1 returned normally against the same cluster.

The final published stable image was pulled by immutable digest and checked independently:

  • On that same cluster, unqualified realm get returned the expected rc 2 (no default realm) in 0.462 seconds. Named realm creation/read, zonegroup creation/read, zone creation/read, period commit, and the final realm read all succeeded. Period commit took 0.637 seconds. Client commands ran as UID 2016 with capabilities dropped. Small metadata pools were precreated to suit this disposable single-OSD setup.
  • Both architectures passed 18 runtime/content checks, including actual Ceph/Rook versions, lsblk, partitioning/LVM/XFS tools, ceph-volume LVM/inventory help, and Python rados, packaging, and yaml imports. The original entrypoint and UID 2016 are retained.
  • Fresh independent Grype scans of both final architecture images reported 0 matches / 0 ignored matches, using the database built 2026-10-16T06:29:51Z.

Published digests for docker.io/kurlsh/rook-ceph:v1.19.7:

Manifest Digest
Index sha256:c5062b872e6cfa600a96e29ba754244360ac0b8783983495850ce0da3f68508c
amd64 sha256:12ff893b74afe0757ac19d4a6b82c1bc5264fec90798d7fa60a737dbcfbf3b12
arm64 sha256:9702809180f5b9a360cb7cacaaadf7847d56416e8643922c34c62ca0023bf0cd

These checks verify the reported client hang is resolved in the rebuilt image; they are not a full Rook rollout or S3 end-to-end test. Live cluster metadata checks ran on amd64; both architectures received the runtime checks and scans. Existing Rook add-on archives still embed the old image and must be rebuilt before rerunning the existing Testgrid scenarios. Republishing the Docker tag alone does not update those archives.

@github-actions

Copy link
Copy Markdown
Contributor

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants