CORS-4536: Auto-upload RHCOS image for sovereign clouds#10686
Conversation
|
Pipeline controller notification For optional jobs, comment This repository is configured in: LGTM mode |
|
@barbacbd: This pull request references CORS-4536 which is a valid jira issue. Warning: The referenced jira issue has an invalid target version for the target branch this PR targets: expected the story to target the "5.0.0" version, but no target version was set. DetailsIn response to this:
Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the openshift-eng/jira-lifecycle-plugin repository. |
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughChangesThe change adds sovereign-GCP-aware instance, disk, and marketplace-image validation, resolves RHCOS artifacts for non-default universes, uploads cluster-specific RHCOS images when required, and wires those references into generated machine manifests. Sovereign GCP provisioning
Estimated code review effort: 4 (Complex) | ~60 minutes Possibly related PRs
🚥 Pre-merge checks | ✅ 15✅ Passed checks (15 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
[APPROVALNOTIFIER] This PR is NOT APPROVED This pull-request has been approved by: The full list of commands accepted by this bot can be found here. DetailsNeeds approval from an approver in each of these files:Approvers can indicate their approval by writing |
There was a problem hiding this comment.
Actionable comments posted: 6
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (2)
pkg/clusterapi/system.go (1)
310-335: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winLeftover duplicate block — old universe-domain check wasn't removed.
Lines 326-335 duplicate the exact same universe-domain detection/env-var-setting logic just added above (310-321), using the old direct
!= "googleapis.com"comparison this PR was meant to replace. Please delete the old block.🧹 Suggested cleanup
if v, ok := capgEnvVars[gAppCredEnvVar]; ok { logrus.Infof("setting %q to %s for capg infrastructure controller", gAppCredEnvVar, v) } - // Google Cloud Dedicated support: detect universe domain from - // credentials and pass it to the CAPG controller via env var. - ud, err := session.Credentials.GetUniverseDomain() - if err != nil { - return fmt.Errorf("failed to get universe domain from gcp credentials: %w", err) - } - if ud != "googleapis.com" { - capgEnvVars["GOOGLE_CLOUD_UNIVERSE_DOMAIN"] = ud - logrus.Infof("setting GOOGLE_CLOUD_UNIVERSE_DOMAIN to %q for capg infrastructure controller", ud) - } - controllers = append(controllers,🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/clusterapi/system.go` around lines 310 - 335, Remove the duplicate universe-domain handling block beginning with the second session.Credentials.GetUniverseDomain() call and ending with its logging statement. Keep the earlier block using gcp.IsNonDefaultUniverseDomain(universeDomain), including its error handling and GOOGLE_CLOUD_UNIVERSE_DOMAIN assignment.pkg/infrastructure/gcp/clusterapi/image.go (1)
1-345: 📐 Maintainability & Code Quality | 🟠 Major | 🏗️ Heavy liftNew file lacks unit tests.
This file introduces substantial new logic (download, GCS staging/upload, compute image creation, manifest patching) with no accompanying
_test.go. As per coding guidelines, all code under./cmd/...,./data/..., and./pkg/...must have unit tests. Given the correctness issues already flagged in this file (disk-iteration overwrite, single-arch image reuse), test coverage here would materially reduce risk.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/infrastructure/gcp/clusterapi/image.go` around lines 1 - 345, Add a unit-test file covering the new logic in uploadRHCOSImage, downloadRHCOSImage, createStagingBucket, uploadToGCS, createComputeImage, cleanupStaging, needsImageUpload, updateMachineManifestImages, and updateWorkerMachineSetImages. Include cases for checksum and HTTP failures, manifest image updates, preserving existing disk images while updating eligible worker disks, and relevant GCP operation or cleanup errors; use mocks or test doubles for external services.Source: Coding guidelines
🧹 Nitpick comments (2)
pkg/infrastructure/gcp/clusterapi/image.go (1)
26-32: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winInconsistent alias for
github.com/openshift/api/machine/v1beta1.This file aliases it as
machineapi, while the rest of the codebase (e.g.pkg/asset/machines/master.go) usesmachinev1beta1for the same import. As per coding guidelines, new imports that could conflict or overlap with existing package usage should follow established alias conventions already used in the project.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/infrastructure/gcp/clusterapi/image.go` around lines 26 - 32, Rename the import alias for github.com/openshift/api/machine/v1beta1 from machineapi to the project-standard machinev1beta1, and update all references to that package within the file accordingly.Source: Coding guidelines
pkg/asset/machines/clusterapi.go (1)
341-352: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winFragile string-prefix contract for "needs upload" signal.
Detecting sovereign-cloud/download-URL images via
strings.HasPrefix(controlPlaneImage, "http")works today only because pre-built GCP image references always look likeprojects/.../global/images/..., but it's an implicit, undocumented contract shared across three files (this one,pkg/asset/rhcos/image.go, andpkg/infrastructure/gcp/clusterapi/image.go's disk-image check). A safer approach would be an explicit boolean (e.g.rhcos.Image.NeedsUploador a typed URL wrapper) set once inpkg/asset/rhcos/image.goand threaded through, rather than re-deriving it from string shape in multiple places.Also applies to: 365-365
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/asset/machines/clusterapi.go` around lines 341 - 352, The needs-upload state is being inferred from the fragile “http” prefix in the cluster machine-generation path. Add an explicit boolean or typed image state in the RHCOS image model and set it once in the image-loading logic, then thread that state through the relevant GCP generation and disk-image checks; update the controlPlaneImage handling near gcp.GenerateMachines and the corresponding symbols in rhcos image and GCP cluster API code to use the explicit state instead of string-prefix detection.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/asset/installconfig/gcp/session.go`:
- Around line 198-202: Add unit coverage for cliLoader.Load, verifying it passes
compute.CloudPlatformScope to googleoauth.FindDefaultCredentialsWithParams and
propagates finder errors unchanged. Introduce a small injectable finder seam
around FindDefaultCredentialsWithParams if needed to test these behaviors
without external credentials.
In `@pkg/asset/rhcos/image.go`:
- Around line 265-280: Update needsGCPImageUpload to propagate failures from
icgcp.GetSession and ssn.Credentials.GetUniverseDomain instead of returning
false; adjust its callers, including osImage, to handle the returned error and
fail the installation with actionable context before selecting the public
rhcos-cloud image. Preserve the existing universe-domain decision for successful
lookups.
In `@pkg/infrastructure/gcp/clusterapi/image.go`:
- Around line 180-197: Make staging bucket and compute image creation retry-safe
in createStagingBucket and createComputeImage: detect the cloud API’s
already-exists response for the deterministic resource names and treat it as
success, while still returning other errors. Preserve normal creation behavior
so retries after partial provisioning can continue past completed steps.
- Around line 123-177: Update downloadRHCOSImage to perform the image request
with a bounded timeout instead of calling http.Get directly. Use the file’s
established context.WithTimeout pattern or an HTTP client configured with an
appropriate timeout, and ensure the timeout is applied to each retry attempt
while preserving the existing retry and cleanup behavior.
- Around line 41-119: Update uploadRHCOSImage to select the RHCOS source based
on the target machine role instead of always using in.RhcosImage.ControlPlane.
Use in.RhcosImage.Compute when preparing the worker MachineSet image, while
preserving the control-plane image selection for control-plane provisioning and
the existing upload flow.
In `@pkg/types/gcp/platform.go`:
- Around line 215-217: Update GetCloudEnvironment so sovereign ARM64
installations never select the x86 c3-standard-4 machine type or its
incompatible ARM image; instead choose a supported sovereign ARM64 type, or
reject the configuration during validation while preserving existing behavior
for non-ARM64 environments.
---
Outside diff comments:
In `@pkg/clusterapi/system.go`:
- Around line 310-335: Remove the duplicate universe-domain handling block
beginning with the second session.Credentials.GetUniverseDomain() call and
ending with its logging statement. Keep the earlier block using
gcp.IsNonDefaultUniverseDomain(universeDomain), including its error handling and
GOOGLE_CLOUD_UNIVERSE_DOMAIN assignment.
In `@pkg/infrastructure/gcp/clusterapi/image.go`:
- Around line 1-345: Add a unit-test file covering the new logic in
uploadRHCOSImage, downloadRHCOSImage, createStagingBucket, uploadToGCS,
createComputeImage, cleanupStaging, needsImageUpload,
updateMachineManifestImages, and updateWorkerMachineSetImages. Include cases for
checksum and HTTP failures, manifest image updates, preserving existing disk
images while updating eligible worker disks, and relevant GCP operation or
cleanup errors; use mocks or test doubles for external services.
---
Nitpick comments:
In `@pkg/asset/machines/clusterapi.go`:
- Around line 341-352: The needs-upload state is being inferred from the fragile
“http” prefix in the cluster machine-generation path. Add an explicit boolean or
typed image state in the RHCOS image model and set it once in the image-loading
logic, then thread that state through the relevant GCP generation and disk-image
checks; update the controlPlaneImage handling near gcp.GenerateMachines and the
corresponding symbols in rhcos image and GCP cluster API code to use the
explicit state instead of string-prefix detection.
In `@pkg/infrastructure/gcp/clusterapi/image.go`:
- Around line 26-32: Rename the import alias for
github.com/openshift/api/machine/v1beta1 from machineapi to the project-standard
machinev1beta1, and update all references to that package within the file
accordingly.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: b169c791-fb71-47d7-84bb-0e2b3a459bd7
📒 Files selected for processing (13)
pkg/asset/installconfig/gcp/session.gopkg/asset/installconfig/gcp/validation.gopkg/asset/installconfig/gcp/validation_test.gopkg/asset/machines/clusterapi.gopkg/asset/machines/master.gopkg/asset/machines/worker.gopkg/asset/rhcos/image.gopkg/clusterapi/system.gopkg/infrastructure/gcp/clusterapi/clusterapi.gopkg/infrastructure/gcp/clusterapi/image.gopkg/types/gcp/defaults/machinepool.gopkg/types/gcp/machinepools.gopkg/types/gcp/platform.go
|
Caution Failed to replace (edit) comment. This is likely due to insufficient permissions or the comment being deleted. Error details |
|
Adding a note here to revisit or remove the changes we are adding in #10630. The original change is to require a user to add an image or compute and controlPlane when sovereign cloud is detected. This branch will allow the installer to create an image for the purposes of the install rather than requiring the user to bring their own. |
There was a problem hiding this comment.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
pkg/asset/installconfig/gcp/validation.go (1)
200-200: 🩺 Stability & Availability | 🟠 Major | 🏗️ Heavy liftPropagate a cancellable context to the disk lookup.
GetDiskTypeWithZonesuses this context forGetZonesbefore its internal timeout is created, so this new network path cannot inherit caller cancellation or a request deadline. Thread acontext.Contextthrough validation instead of introducing anothercontext.TODO()call. As per path instructions, Go code must usecontext.Contextfor cancellation and timeouts.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/asset/installconfig/gcp/validation.go` at line 200, Update the validation flow around GetDiskTypeWithZones to accept and propagate a caller-provided context.Context, replacing context.TODO() with that context for the disk lookup. Thread the context through any intervening validation functions and preserve existing timeout behavior inside GetDiskTypeWithZones.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/asset/installconfig/gcp/validation.go`:
- Around line 250-253: The sovereign defaulting branch in the instance-type
selection logic must preserve architecture: update the cloudEnv ==
gcp.CloudEnvironmentSovereign handling to return an ARM-compatible default for
ARM64, or explicitly reject unsupported ARM64 before returning the x86
c3-standard-4 default. Keep c3-standard-4 for supported non-ARM architectures.
---
Outside diff comments:
In `@pkg/asset/installconfig/gcp/validation.go`:
- Line 200: Update the validation flow around GetDiskTypeWithZones to accept and
propagate a caller-provided context.Context, replacing context.TODO() with that
context for the disk lookup. Thread the context through any intervening
validation functions and preserve existing timeout behavior inside
GetDiskTypeWithZones.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: b06e1bcb-6644-4f25-81ee-7272ce2b44ac
📒 Files selected for processing (11)
pkg/asset/installconfig/gcp/validation.gopkg/asset/installconfig/gcp/validation_test.gopkg/asset/machines/clusterapi.gopkg/asset/machines/master.gopkg/asset/machines/worker.gopkg/asset/rhcos/image.gopkg/infrastructure/gcp/clusterapi/clusterapi.gopkg/infrastructure/gcp/clusterapi/image.gopkg/types/gcp/defaults/machinepool.gopkg/types/gcp/machinepools.gopkg/types/gcp/platform.go
🚧 Files skipped from review as they are similar to previous changes (9)
- pkg/asset/machines/master.go
- pkg/asset/rhcos/image.go
- pkg/types/gcp/defaults/machinepool.go
- pkg/asset/machines/worker.go
- pkg/infrastructure/gcp/clusterapi/clusterapi.go
- pkg/types/gcp/platform.go
- pkg/asset/machines/clusterapi.go
- pkg/asset/installconfig/gcp/validation_test.go
- pkg/infrastructure/gcp/clusterapi/image.go
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
pkg/asset/machines/clusterapi.go (1)
329-329: 📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick winAdd unit coverage for the new GCP image-selection paths.
Please test that the project ID reaches GCP default generation, download URLs become empty image references for both control-plane and bootstrap machines, and normal GCP image references remain unchanged. These branches control whether the later cluster-specific upload flow is used.
As per coding guidelines, all Go code under
pkg/must have unit tests.Also applies to: 341-352, 365-365
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/asset/machines/clusterapi.go` at line 329, Extend unit tests for the GCP image-selection logic around defaultGCPMachinePoolPlatform and the control-plane/bootstrap machine paths. Verify the GCP project ID is passed through, download URLs produce empty image references for both machine types, and standard GCP image references remain unchanged.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Outside diff comments:
In `@pkg/asset/machines/clusterapi.go`:
- Line 329: Extend unit tests for the GCP image-selection logic around
defaultGCPMachinePoolPlatform and the control-plane/bootstrap machine paths.
Verify the GCP project ID is passed through, download URLs produce empty image
references for both machine types, and standard GCP image references remain
unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: a8146b2d-b7a2-4c4d-bc72-38430cd7ea9e
📒 Files selected for processing (6)
pkg/asset/installconfig/gcp/validation.gopkg/asset/installconfig/gcp/validation_test.gopkg/asset/machines/clusterapi.gopkg/asset/rhcos/image.gopkg/infrastructure/gcp/clusterapi/clusterapi.gopkg/infrastructure/gcp/clusterapi/image.go
🚧 Files skipped from review as they are similar to previous changes (5)
- pkg/infrastructure/gcp/clusterapi/clusterapi.go
- pkg/asset/rhcos/image.go
- pkg/asset/installconfig/gcp/validation_test.go
- pkg/infrastructure/gcp/clusterapi/image.go
- pkg/asset/installconfig/gcp/validation.go
| updateMachineManifestImages(in.MachineManifests, imageRef) | ||
| if err := updateWorkerMachineSetImages(in.WorkersAsset, imageRef); err != nil { | ||
| return fmt.Errorf("failed to update worker machineset images: %w", err) | ||
| } | ||
| } |
There was a problem hiding this comment.
We should be able to create these images with a deterministic name, in which case we should populate them in the machine manifests--for both control plane and worker.
That is, you create the manifest with the name the image will have, and then we upload it later in pkg/infrastructure
Require osImage configuration for sovereign cloud installations and validate that the image project is specified. Sovereign clouds require RHCOS images to be pre-loaded in specific projects, unlike public GCP which uses shared image projects. Add validation in validateMarketplaceImages to detect sovereign cloud environments via project ID prefix (e.g., eu0:) and enforce: - osImage must be specified in defaultMachinePlatform, controlPlane, or compute machine pools - osImage.project must be non-empty when osImage is configured Guard GetImage API calls to skip when project is empty, preventing redundant error messages. Add comprehensive test coverage including edge cases for nil DefaultMachinePlatform. The validation is backwards compatible and only applies to sovereign cloud project IDs. Existing public GCP installations are unaffected. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
There was a problem hiding this comment.
Actionable comments posted: 3
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/infrastructure/gcp/clusterapi/clusterapi.go`:
- Around line 105-113: Update the RHCOS upload decision in the cluster creation
flow around NeedsRHCOSUpload and uploadRHCOSImage to evaluate all resolved
compute machine pools, not only controlPlaneMpool. Trigger the upload when any
control-plane or compute pool requires the cluster-specific image, while
preserving the existing upload error propagation.
In `@pkg/infrastructure/gcp/clusterapi/image.go`:
- Around line 33-110: Add unit tests covering the sovereign RHCOS flow in
pkg/infrastructure/gcp/clusterapi/image.go:33-110, including download
verification, staging, image creation, and cleanup failures with mocked clients;
cover missing and project-qualified images for default, control-plane, and
compute pools in pkg/asset/installconfig/gcp/validation.go:839-896; predicate
combinations and generated references in pkg/types/gcp/platform.go:246-254; the
worker-only upload path in clusterapi.go:105-113; and CAPI, MAPI, and worker
image references in pkg/asset/machines/clusterapi.go:341-363,
pkg/asset/machines/master.go:292-296, and pkg/asset/machines/worker.go:698-702.
- Around line 136-140: Update the file-writing flow around os.Create and io.Copy
to capture and return any error from f.Close(), including close failures after a
successful copy. Ensure the close error is propagated before the temporary
archive can be uploaded, while preserving existing create and copy error
handling.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository YAML (base), Central YAML (inherited)
Review profile: CHILL
Plan: Enterprise
Run ID: 5db78c1f-1826-4c92-9618-6eb9a5cbf5f4
📒 Files selected for processing (9)
pkg/asset/installconfig/gcp/validation.gopkg/asset/installconfig/gcp/validation_test.gopkg/asset/machines/clusterapi.gopkg/asset/machines/master.gopkg/asset/machines/worker.gopkg/asset/rhcos/image.gopkg/infrastructure/gcp/clusterapi/clusterapi.gopkg/infrastructure/gcp/clusterapi/image.gopkg/types/gcp/platform.go
🚧 Files skipped from review as they are similar to previous changes (2)
- pkg/asset/rhcos/image.go
- pkg/asset/installconfig/gcp/validation_test.go
| // Upload a cluster-specific RHCOS image for sovereign clouds where the | ||
| // pre-built images in the rhcos-cloud project are not accessible. | ||
| // Machine manifests are already populated with the deterministic image | ||
| // reference during generation. | ||
| if gcptypes.NeedsRHCOSUpload(projectID, controlPlaneMpool) { | ||
| if _, err := uploadRHCOSImage(ctx, in); err != nil { | ||
| return fmt.Errorf("failed to upload RHCOS image: %w", err) | ||
| } | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Upload when any resolved machine pool needs it.
This only checks controlPlaneMpool. With a custom control-plane osImage and a compute pool using the default image, worker manifests reference <infraID>-rhcos but this path skips creating it. Evaluate the resolved compute pools too before deciding to upload.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@pkg/infrastructure/gcp/clusterapi/clusterapi.go` around lines 105 - 113,
Update the RHCOS upload decision in the cluster creation flow around
NeedsRHCOSUpload and uploadRHCOSImage to evaluate all resolved compute machine
pools, not only controlPlaneMpool. Trigger the upload when any control-plane or
compute pool requires the cluster-specific image, while preserving the existing
upload error propagation.
| f, err := os.Create(filePath) | ||
| if err != nil { | ||
| return err | ||
| } | ||
| defer f.Close() |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
file="pkg/infrastructure/gcp/clusterapi/image.go"
echo "== File outline =="
ast-grep outline "$file" --view expanded || true
echo
echo "== Relevant lines =="
sed -n '110,170p' "$file" | cat -n
echo
echo "== Search for similar close handling in this file =="
rg -n "Close\(\)|os\.Create|io\.Copy|defer f\.Close" "$file"Repository: openshift/installer
Length of output: 3478
Handle the os.File.Close() error here. A successful io.Copy can still be followed by a close failure; return that error so a corrupt temp archive doesn’t get uploaded.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@pkg/infrastructure/gcp/clusterapi/image.go` around lines 136 - 140, Update
the file-writing flow around os.Create and io.Copy to capture and return any
error from f.Close(), including close failures after a successful copy. Ensure
the close error is propagated before the temporary archive can be uploaded,
while preserving existing create and copy error handling.
Source: Path instructions
|
@barbacbd: The following tests failed, say
Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
In GCP sovereign clouds (non-default universe domain), the pre-built
RHCOS images hosted in the public rhcos-cloud project are not
accessible. Previously, users were required to manually download,
upload, and configure a custom RHCOS image via the osImage field in
the install config.
Summary by CodeRabbit