openshift / cluster-version-operator

Apache License 2.0
84 stars 191 forks source link

OCPBUGS-37770: pkg/payload/render: Include release image (Cluster)ImagePolicy #1076

Closed wking closed 3 months ago

wking commented 4 months ago

Address OCPBUGS-37770, where a ClusterImagePolicy manifest from the cluster-update-keys repository (openshift/cluster-update-keys#58) was not part of the bootstrap-rendered MachineConfigs, but was part of the production MachineConfigs. That kind of skew causes trouble for the machine-config operator, as in this run:

$ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_cluster-api-provider-aws/519/pull-ci-openshift-cluster-api-provider-aws-master-e2e-aws-ovn-techpreview/1818614625273384960/artifacts/e2e-aws-ovn-techpreview/gather-extra/artifacts/machineconfigpools.json | jq -r '.items[0].status.conditions[] | select(.type == "NodeDegraded").message'
Node ip-10-0-107-110.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-20-34.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-47-251.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found"

To address that, this commit renders any ClusterImagePolicy and ImagePolicy manifests from the release image into the output manifests directory. From there:

  1. The installer's bootkube service puts the manifest into the central manifests directory:

    cp cvo-bootstrap/manifests/* manifests/
  2. The installer's bootkube service puts the manifest into into the machine-config controller's manifest directory:

    cp manifests/* /etc/mcc/bootstrap/
  3. The MCO renders a static MCO bootstrap pod YAML file with --manifest-dir=/etc/mcc/bootstrap/ to configure a manifestDir variable.

  4. The installer's bootkube service passes the rendered static MCO bootstrap pod to the kubelet:

    cp mco-bootstrap/bootstrap/machineconfigoperator-bootstrap-pod.yaml /etc/kubernetes/manifests/
  5. The bootstrap MCO static pod pulls in the ClusterImagePolicy manifest while walking manifestDir.

  6. The bootstrap MCO static pod includes feature-gate status and any collected ClusterImagePolicy manifest when rendering bootstrap MachineConfigs.

My implementation uses group/kind tuples to figure out what needs rendering, because that is robust against things like manifest renames or other release-image-referenced repositories providing their own manifests (using manifest names in skipFiles is ok, because all the manifests we skip that way are from our own repository, where we control naming).

We could extend this to other manifest types that the MCO consumes when rendering MachineConfigs (MachineConfig itself, KubeletConfig, etc.), but I'm leaving those out for now in the optimistic hope that nobody ever needs the CVO to manage those resources.

openshift-ci-robot commented 4 months ago

@wking: This pull request references Jira Issue OCPBUGS-37770, which is valid. The bug has been moved to the POST state.

3 validation(s) were run on this bug * bug is open, matching expected state (open) * bug target version (4.17.0) matches configured target version for branch (4.17.0) * bug is in the state ASSIGNED, which is one of the valid states (NEW, ASSIGNED, POST)

The bug has been updated to refer to the pull request using the external bug tracker.

In response to [this](https://github.com/openshift/cluster-version-operator/pull/1076): >Address [OCPBUGS-37770][1], where a ClusterImagePolicy manifest from the `cluster-update-keys` repository (openshift/cluster-update-keys#58) was not part of the bootstrap-rendered MachineConfigs, but was part of the production MachineConfigs. That kind of skew causes trouble for the machine-config operator, as in [this run][2]: > >```console >$ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_cluster-api-provider-aws/519/pull-ci-openshift-cluster-api-provider-aws-master-e2e-aws-ovn-techpreview/1818614625273384960/artifacts/e2e-aws-ovn-techpreview/gather-extra/artifacts/machineconfigpools.json | jq -r '.items[0].status.conditions[] | select(.type == "NodeDegraded").message' >Node ip-10-0-107-110.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-20-34.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-47-251.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found" >``` > >To address that, this commit renders any ClusterImagePolicy and ImagePolicy manifests from the release image into the output manifests directory. From there: > >1. The installer's bootkube service [puts the manifest into the central manifests directory][3]: > > ```sh > cp cvo-bootstrap/manifests/* manifests/ > ``` > >2. The installer's bootkube service [puts the manifest into into the machine-config controller's manifest directory][4]: > > ```sh > cp manifests/* /etc/mcc/bootstrap/ > ``` > >3. The MCO renders a static MCO bootstrap pod YAML file [with `--manifest-dir=/etc/mcc/bootstrap/`][5] to configure a `manifestDir` variable. > >4. The installer's bootkube service [passes the rendered static MCO bootstrap pod to the kubelet][6]: > > ```sh > cp mco-bootstrap/bootstrap/machineconfigoperator-bootstrap-pod.yaml /etc/kubernetes/manifests/ > ``` > >5. The bootstrap MCO static pod [pulls in the ClusterImagePolicy manifest while walking `manifestDir`][7]. > >6. The bootstrap MCO static pod [includes feature-gate status and any collected ClusterImagePolicy manifest when rendering bootstrap MachineConfigs][8]. > >My implementation uses group/kind tuples to figure out what needs rendering, because that is robust against things like manifest renames or other release-image-referenced repositories providing their own manifests (using manifest names in `skipFiles` is ok, because all the manifests we skip that way are from our own repository, where we control naming). > >We could extend this to other manifest types that the MCO consumes when rendering MachineConfigs (MachineConfig itself, KubeletConfig, etc.), but I'm leaving those out for now in the optimistic hope that nobody ever needs the CVO to manage those resources. > >[1]: https://issues.redhat.com/browse/OCPBUGS-37770 >[2]: https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_cluster-api-provider-aws/519/pull-ci-openshift-cluster-api-provider-aws-master-e2e-aws-ovn-techpreview/1818614625273384960 >[3]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L165 >[4]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L431 >[5]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/manifests/bootstrap-pod-v2.yaml#L15 >[6]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L433 >[7]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/pkg/controller/bootstrap/bootstrap.go#L100-L142 >[8]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/pkg/controller/bootstrap/bootstrap.go#L183 Instructions for interacting with me using PR comments are available [here](https://prow.ci.openshift.org/command-help?repo=openshift%2Fcluster-version-operator). If you have questions or suggestions related to my behavior, please file an issue against the [openshift-eng/jira-lifecycle-plugin](https://github.com/openshift-eng/jira-lifecycle-plugin/issues/new) repository.
wking commented 3 months ago

FAIL: TestOperator_upgradeableSync seems unrelated:

W0801 17:40:37.350500   16137 updatepayload.go:138] Target release version="" image="quay.io/openshift-release-dev/ocp-release@sha256:08ef16270e643a001454410b22864db6246d782298be267688a4433d83f404f4" cannot be verified, but continuing anyway because the update was forced: fails-to-verify

/test unit

wking commented 3 months ago

launch 4.17,openshift/cluster-version-operator#1076,openshift/cluster-update-keys#60 aws,techpreview Cluster Bot success 🎉

hongkailiu commented 3 months ago

/lgtm

openshift-ci[bot] commented 3 months ago

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: hongkailiu, wking

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Needs approval from an approver in each of these files: - ~~[OWNERS](https://github.com/openshift/cluster-version-operator/blob/master/OWNERS)~~ [wking] Approvers can indicate their approval by writing `/approve` in a comment Approvers can cancel approval by writing `/approve cancel` in a comment
wking commented 3 months ago

/retest-required

dis016 commented 3 months ago

/payload e2e-azure-ovn-techpreview

openshift-ci[bot] commented 3 months ago

@dis016: it appears that you have attempted to use some version of the payload command, but your comment was incorrectly formatted and cannot be acted upon. See the docs for usage info.

dis016 commented 3 months ago

/payload-job pull-ci-openshift-cluster-capi-operator-main-e2e-azure-ovn-techpreview

openshift-ci[bot] commented 3 months ago

@dis016: trigger 0 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

wking commented 3 months ago

clusteroperator/openshift-apiserver condition/Available reason/APIServices_Error status/False APIServicesAvailable is unrelated to this change, and upgrade-into-change doesn't exercise this render-time pull anyway.

/override ci/prow/e2e-agnostic-ovn-upgrade-into-change

openshift-ci[bot] commented 3 months ago

@wking: Overrode contexts on behalf of wking: ci/prow/e2e-agnostic-ovn-upgrade-into-change

In response to [this](https://github.com/openshift/cluster-version-operator/pull/1076#issuecomment-2265732927): >[`clusteroperator/openshift-apiserver condition/Available reason/APIServices_Error status/False APIServicesAvailable`][1] is unrelated to this change, and `upgrade-into-change` doesn't exercise this render-time pull anyway. > >/override ci/prow/e2e-agnostic-ovn-upgrade-into-change > >[1]: https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_cluster-version-operator/1076/pull-ci-openshift-cluster-version-operator-master-e2e-agnostic-ovn-upgrade-into-change/1819217111763914752 Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository.
openshift-ci[bot] commented 3 months ago

@wking: all tests passed!

Full PR test history. Your PR dashboard.

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md). If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes-sigs/prow](https://github.com/kubernetes-sigs/prow/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
wking commented 3 months ago

@dis016 , maybe this is the job you were trying to launch?

/payload-job periodic-ci-openshift-release-master-ci-4.17-e2e-azure-ovn-techpreview

Note that we have the AWS tech-preview job as a presubmit.

openshift-ci[bot] commented 3 months ago

@wking: trigger 1 job(s) for the /payload-(with-prs|job|aggregate|job-with-prs|aggregate-with-prs) command

See details on https://pr-payload-tests.ci.openshift.org/runs/ci/251255f0-50eb-11ef-986f-275b6c0f4969-0

dis016 commented 3 months ago

launch 4.17,openshift/cluster-version-operator#1076,openshift/cluster-update-keys#60 aws,techpreview cluster bot success https://prow.ci.openshift.org/view/gs/test-platform-results/logs/release-openshift-origin-installer-launch-aws-modern/1820438174950756352

Payload job e2e-azure-ovn-techpreview Success https://prow.ci.openshift.org/view/gs/test-platform-results/logs/openshift-cluster-version-operator-1076-ci-4.17-e2e-azure-ovn-techpreview/1819407965099134976

dis016 commented 3 months ago

/label qe-approved

openshift-ci-robot commented 3 months ago

@wking: This pull request references Jira Issue OCPBUGS-37770, which is valid.

3 validation(s) were run on this bug * bug is open, matching expected state (open) * bug target version (4.17.0) matches configured target version for branch (4.17.0) * bug is in the state POST, which is one of the valid states (NEW, ASSIGNED, POST)

Requesting review from QA contact: /cc @dis016

In response to [this](https://github.com/openshift/cluster-version-operator/pull/1076): >Address [OCPBUGS-37770][1], where a ClusterImagePolicy manifest from the `cluster-update-keys` repository (openshift/cluster-update-keys#58) was not part of the bootstrap-rendered MachineConfigs, but was part of the production MachineConfigs. That kind of skew causes trouble for the machine-config operator, as in [this run][2]: > >```console >$ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_cluster-api-provider-aws/519/pull-ci-openshift-cluster-api-provider-aws-master-e2e-aws-ovn-techpreview/1818614625273384960/artifacts/e2e-aws-ovn-techpreview/gather-extra/artifacts/machineconfigpools.json | jq -r '.items[0].status.conditions[] | select(.type == "NodeDegraded").message' >Node ip-10-0-107-110.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-20-34.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-47-251.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found" >``` > >To address that, this commit renders any ClusterImagePolicy and ImagePolicy manifests from the release image into the output manifests directory. From there: > >1. The installer's bootkube service [puts the manifest into the central manifests directory][3]: > > ```sh > cp cvo-bootstrap/manifests/* manifests/ > ``` > >2. The installer's bootkube service [puts the manifest into into the machine-config controller's manifest directory][4]: > > ```sh > cp manifests/* /etc/mcc/bootstrap/ > ``` > >3. The MCO renders a static MCO bootstrap pod YAML file [with `--manifest-dir=/etc/mcc/bootstrap/`][5] to configure a `manifestDir` variable. > >4. The installer's bootkube service [passes the rendered static MCO bootstrap pod to the kubelet][6]: > > ```sh > cp mco-bootstrap/bootstrap/machineconfigoperator-bootstrap-pod.yaml /etc/kubernetes/manifests/ > ``` > >5. The bootstrap MCO static pod [pulls in the ClusterImagePolicy manifest while walking `manifestDir`][7]. > >6. The bootstrap MCO static pod [includes feature-gate status and any collected ClusterImagePolicy manifest when rendering bootstrap MachineConfigs][8]. > >My implementation uses group/kind tuples to figure out what needs rendering, because that is robust against things like manifest renames or other release-image-referenced repositories providing their own manifests (using manifest names in `skipFiles` is ok, because all the manifests we skip that way are from our own repository, where we control naming). > >We could extend this to other manifest types that the MCO consumes when rendering MachineConfigs (MachineConfig itself, KubeletConfig, etc.), but I'm leaving those out for now in the optimistic hope that nobody ever needs the CVO to manage those resources. > >[1]: https://issues.redhat.com/browse/OCPBUGS-37770 >[2]: https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_cluster-api-provider-aws/519/pull-ci-openshift-cluster-api-provider-aws-master-e2e-aws-ovn-techpreview/1818614625273384960 >[3]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L165 >[4]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L431 >[5]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/manifests/bootstrap-pod-v2.yaml#L15 >[6]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L433 >[7]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/pkg/controller/bootstrap/bootstrap.go#L100-L142 >[8]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/pkg/controller/bootstrap/bootstrap.go#L183 Instructions for interacting with me using PR comments are available [here](https://prow.ci.openshift.org/command-help?repo=openshift%2Fcluster-version-operator). If you have questions or suggestions related to my behavior, please file an issue against the [openshift-eng/jira-lifecycle-plugin](https://github.com/openshift-eng/jira-lifecycle-plugin/issues/new) repository.
openshift-ci-robot commented 3 months ago

@wking: Jira Issue OCPBUGS-37770: Some pull requests linked via external trackers have merged:

The following pull requests linked via external trackers have not merged:

These pull request must merge or be unlinked from the Jira bug in order for it to move to the next state. Once unlinked, request a bug refresh with /jira refresh.

Jira Issue OCPBUGS-37770 has not been moved to the MODIFIED state.

In response to [this](https://github.com/openshift/cluster-version-operator/pull/1076): >Address [OCPBUGS-37770][1], where a ClusterImagePolicy manifest from the `cluster-update-keys` repository (openshift/cluster-update-keys#58) was not part of the bootstrap-rendered MachineConfigs, but was part of the production MachineConfigs. That kind of skew causes trouble for the machine-config operator, as in [this run][2]: > >```console >$ curl -s https://gcsweb-ci.apps.ci.l2s4.p1.openshiftapps.com/gcs/test-platform-results/pr-logs/pull/openshift_cluster-api-provider-aws/519/pull-ci-openshift-cluster-api-provider-aws-master-e2e-aws-ovn-techpreview/1818614625273384960/artifacts/e2e-aws-ovn-techpreview/gather-extra/artifacts/machineconfigpools.json | jq -r '.items[0].status.conditions[] | select(.type == "NodeDegraded").message' >Node ip-10-0-107-110.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-20-34.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found", Node ip-10-0-47-251.us-east-2.compute.internal is reporting: "missing MachineConfig rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\nmachineconfig.machineconfiguration.openshift.io \"rendered-master-f78e8c7637cfbc6ca42f0f102eaef4e7\" not found" >``` > >To address that, this commit renders any ClusterImagePolicy and ImagePolicy manifests from the release image into the output manifests directory. From there: > >1. The installer's bootkube service [puts the manifest into the central manifests directory][3]: > > ```sh > cp cvo-bootstrap/manifests/* manifests/ > ``` > >2. The installer's bootkube service [puts the manifest into into the machine-config controller's manifest directory][4]: > > ```sh > cp manifests/* /etc/mcc/bootstrap/ > ``` > >3. The MCO renders a static MCO bootstrap pod YAML file [with `--manifest-dir=/etc/mcc/bootstrap/`][5] to configure a `manifestDir` variable. > >4. The installer's bootkube service [passes the rendered static MCO bootstrap pod to the kubelet][6]: > > ```sh > cp mco-bootstrap/bootstrap/machineconfigoperator-bootstrap-pod.yaml /etc/kubernetes/manifests/ > ``` > >5. The bootstrap MCO static pod [pulls in the ClusterImagePolicy manifest while walking `manifestDir`][7]. > >6. The bootstrap MCO static pod [includes feature-gate status and any collected ClusterImagePolicy manifest when rendering bootstrap MachineConfigs][8]. > >My implementation uses group/kind tuples to figure out what needs rendering, because that is robust against things like manifest renames or other release-image-referenced repositories providing their own manifests (using manifest names in `skipFiles` is ok, because all the manifests we skip that way are from our own repository, where we control naming). > >We could extend this to other manifest types that the MCO consumes when rendering MachineConfigs (MachineConfig itself, KubeletConfig, etc.), but I'm leaving those out for now in the optimistic hope that nobody ever needs the CVO to manage those resources. > >[1]: https://issues.redhat.com/browse/OCPBUGS-37770 >[2]: https://prow.ci.openshift.org/view/gs/test-platform-results/pr-logs/pull/openshift_cluster-api-provider-aws/519/pull-ci-openshift-cluster-api-provider-aws-master-e2e-aws-ovn-techpreview/1818614625273384960 >[3]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L165 >[4]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L431 >[5]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/manifests/bootstrap-pod-v2.yaml#L15 >[6]: https://github.com/openshift/installer/blob/e9c454889b638a9af3e1203d0585c756f8cf0136/data/data/bootstrap/files/usr/local/bin/bootkube.sh.template#L433 >[7]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/pkg/controller/bootstrap/bootstrap.go#L100-L142 >[8]: https://github.com/openshift/machine-config-operator/blob/d72d2ed139de8f8d3c60c411b4741045edde2a34/pkg/controller/bootstrap/bootstrap.go#L183 Instructions for interacting with me using PR comments are available [here](https://prow.ci.openshift.org/command-help?repo=openshift%2Fcluster-version-operator). If you have questions or suggestions related to my behavior, please file an issue against the [openshift-eng/jira-lifecycle-plugin](https://github.com/openshift-eng/jira-lifecycle-plugin/issues/new) repository.
openshift-bot commented 3 months ago

[ART PR BUILD NOTIFIER]

Distgit: cluster-version-operator This PR has been included in build cluster-version-operator-container-v4.17.0-202408051813.p0.gb9e63d8.assembly.stream.el9. All builds following this will include this PR.