Skip to content

Conversation

@dobsonj
Copy link
Member

@dobsonj dobsonj commented Jan 24, 2026

User description

https://issues.redhat.com/browse/STOR-2859

/cc @openshift/storage


PR Type

Enhancement


Description

  • Add ControllerManager API for cluster-wide Kubernetes controller manager configuration

  • Introduce ForceDetachOnTimeoutPolicy to control volume force detach behavior

  • Generate deepcopy, swagger documentation, and OpenAPI schema definitions

  • Create CustomResourceDefinition manifest for controllermanagers resource


Diagram Walkthrough

flowchart LR
  A["ControllerManager API Type"] --> B["ForceDetachOnTimeoutPolicy"]
  A --> C["ControllerManagerSpec"]
  A --> D["ControllerManagerStatus"]
  C --> E["forceDetachOnTimeout Field"]
  E --> F["Enabled/Disabled/Omitted"]
  A --> G["Generated Code"]
  G --> H["DeepCopy Functions"]
  G --> I["Swagger Documentation"]
  G --> J["OpenAPI Schemas"]
  A --> K["CRD Manifest"]
Loading

File Walkthrough

Relevant files
Enhancement
types_controllermanager.go
Define ControllerManager API types and policy                       

config/v1/types_controllermanager.go

  • Define new ControllerManager struct with metadata, spec, and status
    fields
  • Create ControllerManagerSpec with ForceDetachOnTimeoutPolicy field
  • Define ForceDetachOnTimeoutPolicy type with Enabled and Disabled
    constants
  • Create ControllerManagerList struct for list operations
+72/-0   
Code generation
zz_generated.deepcopy.go
Generate deepcopy functions for ControllerManager types   

config/v1/zz_generated.deepcopy.go

  • Generate DeepCopyInto, DeepCopy, and DeepCopyObject methods for
    ControllerManager
  • Generate deepcopy methods for ControllerManagerList
  • Generate deepcopy methods for ControllerManagerSpec
  • Generate deepcopy methods for ControllerManagerStatus
+93/-0   
zz_generated.swagger_doc_generated.go
Generate swagger documentation for ControllerManager         

config/v1/zz_generated.swagger_doc_generated.go

  • Add swagger documentation map for ControllerManager type
  • Add swagger documentation map for ControllerManagerList type
  • Add swagger documentation map for ControllerManagerSpec type
  • Document field descriptions and compatibility level
+28/-0   
zz_generated.openapi.go
Generate OpenAPI schema definitions for ControllerManager

openapi/generated_openapi/zz_generated.openapi.go

  • Register OpenAPI schema definitions for ControllerManager,
    ControllerManagerList, ControllerManagerSpec, and
    ControllerManagerStatus
  • Generate schema_openshift_api_config_v1_ControllerManager function
    with properties and dependencies
  • Generate schema_openshift_api_config_v1_ControllerManagerList function
    with items array
  • Generate schema_openshift_api_config_v1_ControllerManagerSpec and
    ControllerManagerStatus schema functions
+135/-0 
Configuration
0000_10_config-operator_01_controllermanagers.crd.yaml
Create ControllerManager CustomResourceDefinition manifest

config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_controllermanagers.crd.yaml

  • Create CustomResourceDefinition manifest for
    controllermanagers.config.openshift.io
  • Define spec with forceDetachOnTimeout property supporting Enabled,
    Disabled, and empty string values
  • Configure cluster-scoped resource with status subresource
  • Include bootstrap-required annotation and API approval reference
+73/-0   
zz_generated.featuregated-crd-manifests.yaml
Register ControllerManager in featuregated manifests         

config/v1/zz_generated.featuregated-crd-manifests.yaml

  • Add controllermanagers.config.openshift.io entry to featuregated CRD
    manifests
  • Register metadata including operator name, run level, and scope
    information
  • Mark as bootstrap-required and ungated feature
+22/-0   
AAA_ungated.yaml
Create ungated ControllerManager CRD manifest                       

config/v1/zz_generated.featuregated-crd-manifests/controllermanagers.config.openshift.io/AAA_ungated.yaml

  • Create ungated CustomResourceDefinition manifest for
    controllermanagers resource
  • Define identical schema to main CRD manifest with feature-gate
    annotations
  • Configure cluster scope with status subresource and bootstrap
    requirement
+74/-0   

@openshift-ci-robot
Copy link

Pipeline controller notification
This repo is configured to use the pipeline controller. Second-stage tests will be triggered either automatically or after lgtm label is added, depending on the repository configuration. The pipeline controller will automatically detect which contexts are required and will utilize /test Prow commands to trigger the second stage.

For optional jobs, comment /test ? to see a list of all defined jobs. To trigger manually all jobs from second stage use /pipeline required command.

This repository is configured in: LGTM mode

@openshift-ci-robot openshift-ci-robot added the jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. label Jan 24, 2026
@openshift-ci-robot
Copy link

openshift-ci-robot commented Jan 24, 2026

@dobsonj: This pull request references STOR-2859 which is a valid jira issue.

Details

In response to this:

https://issues.redhat.com/browse/STOR-2859

/cc @openshift/storage

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.

@openshift-ci openshift-ci bot added the do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. label Jan 24, 2026
@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 24, 2026

Hello @dobsonj! Some important instructions when contributing to openshift/api:
API design plays an important part in the user experience of OpenShift and as such API PRs are subject to a high level of scrutiny to ensure they follow our best practices. If you haven't already done so, please review the OpenShift API Conventions and ensure that your proposed changes are compliant. Following these conventions will help expedite the api review process for your PR.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 24, 2026

@dobsonj: GitHub didn't allow me to request PR reviews from the following users: openshift/storage.

Note that only openshift members and repo collaborators can review this PR, and authors cannot review their own PRs.

Details

In response to this:

https://issues.redhat.com/browse/STOR-2859

/cc @openshift/storage

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 kubernetes-sigs/prow repository.

@coderabbitai
Copy link

coderabbitai bot commented Jan 24, 2026

📝 Walkthrough

Walkthrough

Adds a new cluster-scoped ControllerManager CRD to the config/v1 API. Introduces types: ControllerManager, ControllerManagerSpec (with ForceDetachOnTimeoutPolicy), ControllerManagerStatus, ControllerManagerList, and string constants for the policy values. Adds autogenerated deepcopy methods, Swagger and OpenAPI schema entries, a feature-gated CRD manifest entry, and a packaged CRD YAML for controllermanagers.config.openshift.io.

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly references the main change: adding APIs for disabling force detach in the KCM operator, which aligns with the changeset's primary objective.
Description check ✅ Passed The description is directly related to the changeset, detailing the ControllerManager API, ForceDetachOnTimeoutPolicy, and generated code for the new cluster-wide configuration resource.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (2.5.0)

Error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented
The command is terminated due to an error: build linters: unable to load custom analyzer "kubeapilinter": tools/_output/bin/kube-api-linter.so, plugin: not implemented


Comment @coderabbitai help to get the list of available commands and usage tips.

@openshift-ci openshift-ci bot added the size/L Denotes a PR that changes 100-499 lines, ignoring generated files. label Jan 24, 2026
@openshift-ci-robot
Copy link

openshift-ci-robot commented Jan 24, 2026

@dobsonj: This pull request references STOR-2859 which is a valid jira issue.

Details

In response to this:

User description

https://issues.redhat.com/browse/STOR-2859

/cc @openshift/storage


PR Type

Enhancement


Description

  • Add ControllerManager API for cluster-wide Kubernetes controller manager configuration

  • Introduce ForceDetachOnTimeoutPolicy to control volume force detach behavior

  • Generate deepcopy, swagger documentation, and OpenAPI schema definitions

  • Create CustomResourceDefinition manifest for controllermanagers resource


Diagram Walkthrough

flowchart LR
 A["ControllerManager API Type"] --> B["ForceDetachOnTimeoutPolicy"]
 A --> C["ControllerManagerSpec"]
 A --> D["ControllerManagerStatus"]
 C --> E["forceDetachOnTimeout Field"]
 E --> F["Enabled/Disabled/Omitted"]
 A --> G["Generated Code"]
 G --> H["DeepCopy Functions"]
 G --> I["Swagger Documentation"]
 G --> J["OpenAPI Schemas"]
 A --> K["CRD Manifest"]
Loading

File Walkthrough

Relevant files
Enhancement
types_controllermanager.go
Define ControllerManager API types and policy                       

config/v1/types_controllermanager.go

  • Define new ControllerManager struct with metadata, spec, and status
    fields
  • Create ControllerManagerSpec with ForceDetachOnTimeoutPolicy field
  • Define ForceDetachOnTimeoutPolicy type with Enabled and Disabled
    constants
  • Create ControllerManagerList struct for list operations
+72/-0   
Code generation
zz_generated.deepcopy.go
Generate deepcopy functions for ControllerManager types   

config/v1/zz_generated.deepcopy.go

  • Generate DeepCopyInto, DeepCopy, and DeepCopyObject methods for
    ControllerManager
  • Generate deepcopy methods for ControllerManagerList
  • Generate deepcopy methods for ControllerManagerSpec
  • Generate deepcopy methods for ControllerManagerStatus
+93/-0   
zz_generated.swagger_doc_generated.go
Generate swagger documentation for ControllerManager         

config/v1/zz_generated.swagger_doc_generated.go

  • Add swagger documentation map for ControllerManager type
  • Add swagger documentation map for ControllerManagerList type
  • Add swagger documentation map for ControllerManagerSpec type
  • Document field descriptions and compatibility level
+28/-0   
zz_generated.openapi.go
Generate OpenAPI schema definitions for ControllerManager

openapi/generated_openapi/zz_generated.openapi.go

  • Register OpenAPI schema definitions for ControllerManager,
    ControllerManagerList, ControllerManagerSpec, and
    ControllerManagerStatus
  • Generate schema_openshift_api_config_v1_ControllerManager function
    with properties and dependencies
  • Generate schema_openshift_api_config_v1_ControllerManagerList function
    with items array
  • Generate schema_openshift_api_config_v1_ControllerManagerSpec and
    ControllerManagerStatus schema functions
+135/-0 
Configuration
0000_10_config-operator_01_controllermanagers.crd.yaml
Create ControllerManager CustomResourceDefinition manifest

config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_controllermanagers.crd.yaml

  • Create CustomResourceDefinition manifest for
    controllermanagers.config.openshift.io
  • Define spec with forceDetachOnTimeout property supporting Enabled,
    Disabled, and empty string values
  • Configure cluster-scoped resource with status subresource
  • Include bootstrap-required annotation and API approval reference
+73/-0   
zz_generated.featuregated-crd-manifests.yaml
Register ControllerManager in featuregated manifests         

config/v1/zz_generated.featuregated-crd-manifests.yaml

  • Add controllermanagers.config.openshift.io entry to featuregated CRD
    manifests
  • Register metadata including operator name, run level, and scope
    information
  • Mark as bootstrap-required and ungated feature
+22/-0   
AAA_ungated.yaml
Create ungated ControllerManager CRD manifest                       

config/v1/zz_generated.featuregated-crd-manifests/controllermanagers.config.openshift.io/AAA_ungated.yaml

  • Create ungated CustomResourceDefinition manifest for
    controllermanagers resource
  • Define identical schema to main CRD manifest with feature-gate
    annotations
  • Configure cluster scope with status subresource and bootstrap
    requirement
+74/-0   

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.

1 similar comment
@openshift-ci-robot
Copy link

openshift-ci-robot commented Jan 24, 2026

@dobsonj: This pull request references STOR-2859 which is a valid jira issue.

Details

In response to this:

User description

https://issues.redhat.com/browse/STOR-2859

/cc @openshift/storage


PR Type

Enhancement


Description

  • Add ControllerManager API for cluster-wide Kubernetes controller manager configuration

  • Introduce ForceDetachOnTimeoutPolicy to control volume force detach behavior

  • Generate deepcopy, swagger documentation, and OpenAPI schema definitions

  • Create CustomResourceDefinition manifest for controllermanagers resource


Diagram Walkthrough

flowchart LR
 A["ControllerManager API Type"] --> B["ForceDetachOnTimeoutPolicy"]
 A --> C["ControllerManagerSpec"]
 A --> D["ControllerManagerStatus"]
 C --> E["forceDetachOnTimeout Field"]
 E --> F["Enabled/Disabled/Omitted"]
 A --> G["Generated Code"]
 G --> H["DeepCopy Functions"]
 G --> I["Swagger Documentation"]
 G --> J["OpenAPI Schemas"]
 A --> K["CRD Manifest"]
Loading

File Walkthrough

Relevant files
Enhancement
types_controllermanager.go
Define ControllerManager API types and policy                       

config/v1/types_controllermanager.go

  • Define new ControllerManager struct with metadata, spec, and status
    fields
  • Create ControllerManagerSpec with ForceDetachOnTimeoutPolicy field
  • Define ForceDetachOnTimeoutPolicy type with Enabled and Disabled
    constants
  • Create ControllerManagerList struct for list operations
+72/-0   
Code generation
zz_generated.deepcopy.go
Generate deepcopy functions for ControllerManager types   

config/v1/zz_generated.deepcopy.go

  • Generate DeepCopyInto, DeepCopy, and DeepCopyObject methods for
    ControllerManager
  • Generate deepcopy methods for ControllerManagerList
  • Generate deepcopy methods for ControllerManagerSpec
  • Generate deepcopy methods for ControllerManagerStatus
+93/-0   
zz_generated.swagger_doc_generated.go
Generate swagger documentation for ControllerManager         

config/v1/zz_generated.swagger_doc_generated.go

  • Add swagger documentation map for ControllerManager type
  • Add swagger documentation map for ControllerManagerList type
  • Add swagger documentation map for ControllerManagerSpec type
  • Document field descriptions and compatibility level
+28/-0   
zz_generated.openapi.go
Generate OpenAPI schema definitions for ControllerManager

openapi/generated_openapi/zz_generated.openapi.go

  • Register OpenAPI schema definitions for ControllerManager,
    ControllerManagerList, ControllerManagerSpec, and
    ControllerManagerStatus
  • Generate schema_openshift_api_config_v1_ControllerManager function
    with properties and dependencies
  • Generate schema_openshift_api_config_v1_ControllerManagerList function
    with items array
  • Generate schema_openshift_api_config_v1_ControllerManagerSpec and
    ControllerManagerStatus schema functions
+135/-0 
Configuration
0000_10_config-operator_01_controllermanagers.crd.yaml
Create ControllerManager CustomResourceDefinition manifest

config/v1/zz_generated.crd-manifests/0000_10_config-operator_01_controllermanagers.crd.yaml

  • Create CustomResourceDefinition manifest for
    controllermanagers.config.openshift.io
  • Define spec with forceDetachOnTimeout property supporting Enabled,
    Disabled, and empty string values
  • Configure cluster-scoped resource with status subresource
  • Include bootstrap-required annotation and API approval reference
+73/-0   
zz_generated.featuregated-crd-manifests.yaml
Register ControllerManager in featuregated manifests         

config/v1/zz_generated.featuregated-crd-manifests.yaml

  • Add controllermanagers.config.openshift.io entry to featuregated CRD
    manifests
  • Register metadata including operator name, run level, and scope
    information
  • Mark as bootstrap-required and ungated feature
+22/-0   
AAA_ungated.yaml
Create ungated ControllerManager CRD manifest                       

config/v1/zz_generated.featuregated-crd-manifests/controllermanagers.config.openshift.io/AAA_ungated.yaml

  • Create ungated CustomResourceDefinition manifest for
    controllermanagers resource
  • Define identical schema to main CRD manifest with feature-gate
    annotations
  • Configure cluster scope with status subresource and bootstrap
    requirement
+74/-0   

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.

@qodo-code-review
Copy link

qodo-code-review bot commented Jan 24, 2026

PR Compliance Guide 🔍

Below is a summary of compliance checks for this PR:

Security Compliance
🟢
No security concerns identified No security vulnerabilities detected by AI analysis. Human verification advised for critical code.
Ticket Compliance
🎫 No ticket provided
  • Create ticket/issue
Codebase Duplication Compliance
Codebase context is not defined

Follow the guide to enable codebase context checks.

Custom Compliance
🟢
Generic: Comprehensive Audit Trails

Objective: To create a detailed and reliable record of critical system actions for security analysis
and compliance.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Meaningful Naming and Self-Documenting Code

Objective: Ensure all identifiers clearly express their purpose and intent, making code
self-documenting

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Robust Error Handling and Edge Case Management

Objective: Ensure comprehensive error handling that provides meaningful context and graceful
degradation

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Error Handling

Objective: To prevent the leakage of sensitive system information through error messages while
providing sufficient detail for internal debugging.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

Generic: Secure Logging Practices

Objective: To ensure logs are useful for debugging and auditing without exposing sensitive
information like PII, PHI, or cardholder data.

Status: Passed

Learn more about managing compliance generic rules or creating your own custom rules

🔴
Generic: Security-First Input Validation and Data Handling

Objective: Ensure all data inputs are validated, sanitized, and handled securely to prevent
vulnerabilities

Status:
Optional field not omittable: ForceDetachOnTimeout is documented as optional/omittable but is a non-pointer field
without omitempty, so it will serialize as "" and cannot reliably represent
“omitted/no opinion.”

Referred Code
type ControllerManagerSpec struct {
	// ForceDetachOnTimeout allows the admin to enable or disable
	// force detaching volumes based on a timeout.
	// Valid values are Enabled, Disabled and omitted.
	// Omitted means no opinion and the platform is left to choose
	// a reasonable default, which is subject to change over time.
	// The current default is Enabled.
	// +optional
	ForceDetachOnTimeout ForceDetachOnTimeoutPolicy `json:"forceDetachOnTimeout"`
}

Learn more about managing compliance generic rules or creating your own custom rules

  • Update
Compliance status legend 🟢 - Fully Compliant
🟡 - Partial Compliant
🔴 - Not Compliant
⚪ - Requires Further Human Verification
🏷️ - Compliance label

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 24, 2026

[APPROVALNOTIFIER] This PR is NOT APPROVED

This pull-request has been approved by:
Once this PR has been reviewed and has the lgtm label, please assign everettraven for approval. For more information see the Code Review Process.

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

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@qodo-code-review
Copy link

qodo-code-review bot commented Jan 24, 2026

PR Code Suggestions ✨

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
High-level
Consider if a new CRD is justified

The suggestion questions the creation of a new ControllerManager CRD for just a
single configuration field. It asks for justification, such as plans for future
additions, to validate introducing a new top-level API.

Examples:

config/v1/types_controllermanager.go [20-43]
type ControllerManager struct {
	metav1.TypeMeta `json:",inline"`

	// metadata is the standard object's metadata.
	// More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
	metav1.ObjectMeta `json:"metadata,omitempty"`
	// spec holds user settable values for configuration
	// +required
	Spec ControllerManagerSpec `json:"spec"`
	// status holds observed values from the cluster. They may not be overridden.

 ... (clipped 14 lines)

Solution Walkthrough:

Before:

// File: config/v1/types_controllermanager.go

// A new CRD is introduced
type ControllerManager struct {
  metav1.TypeMeta   `json:",inline"`
  metav1.ObjectMeta `json:"metadata,omitempty"`
  Spec ControllerManagerSpec `json:"spec"`
  Status ControllerManagerStatus `json:"status"`
}

// The spec for the new CRD contains only one field
type ControllerManagerSpec struct {
  ForceDetachOnTimeout ForceDetachOnTimeoutPolicy `json:"forceDetachOnTimeout"`
}

type ControllerManagerStatus struct {}

After:

// The suggestion implies that instead of a new CRD,
// the new field could be added to an existing, related CRD.
// For example (conceptual):

// File: config/v1/types_some_existing_crd.go

type SomeExistingCRDSpec struct {
  // ... existing fields ...

  // The new field is added here, avoiding a new CRD
  ControllerManager ControllerManagerConfig `json:"controllerManager,omitempty"`
}

type ControllerManagerConfig struct {
    ForceDetachOnTimeout ForceDetachOnTimeoutPolicy `json:"forceDetachOnTimeout,omitempty"`
}
Suggestion importance[1-10]: 8

__

Why: The suggestion raises a critical API design question about the justification for creating an entirely new CRD for a single configuration field, which has long-term implications for the API surface and maintainability.

Medium
General
Add conditions field to status

Add a Conditions field of type []metav1.Condition to the ControllerManagerStatus
struct to align with Kubernetes API best practices for status reporting.

config/v1/types_controllermanager.go [57-58]

 type ControllerManagerStatus struct {
+	// conditions provide details on the status of the controller manager configuration.
+	// +optional
+	Conditions []metav1.Condition `json:"conditions,omitempty"`
 }
  • Apply / Chat
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly recommends adding a standard conditions field to the status struct, which is a Kubernetes API best practice that improves extensibility and observability.

Medium
Possible issue
Omit empty JSON field

Add omitempty to the json tag of the forceDetachOnTimeout field.

config/v1/types_controllermanager.go [41-42]

 // +optional
-ForceDetachOnTimeout ForceDetachOnTimeoutPolicy `json:"forceDetachOnTimeout"`
+ForceDetachOnTimeout ForceDetachOnTimeoutPolicy `json:"forceDetachOnTimeout,omitempty"`
  • Apply / Chat
Suggestion importance[1-10]: 6

__

Why: The suggestion correctly identifies that an optional field is missing omitempty in its JSON tag, and adding it aligns with Kubernetes API best practices for cleaner resource definitions.

Low
  • Update

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 2

🤖 Fix all issues with AI agents
In `@config/v1/types_controllermanager.go`:
- Around line 12-15: The +openshift:api-approved annotation in the header
comment of types_controllermanager.go still uses the placeholder URL
"https://github.com/openshift/api/pull/XYZ"; update that annotation to the
actual API approval PR URL (the real pull request number) so it passes API
approval checks—locate the comment block containing
"+openshift:api-approved.openshift.io" and replace the placeholder with the real
PR link.

In `@config/v1/zz_generated.featuregated-crd-manifests.yaml`:
- Around line 199-203: Update the placeholder ApprovedPRNumber value for the CRD
entry with CRDName controllermanagers.config.openshift.io: replace
"https://github.com/openshift/api/pull/XYZ" with the real approval PR URL (or
the correct PR number path) so the ApprovedPRNumber field references the actual
merged/approved PR; ensure the URL is valid and points to the final PR in the
openshift/api repo.
🧹 Nitpick comments (1)
config/v1/types_controllermanager.go (1)

34-42: Add omitempty to the optional enum field for consistency.

ForceDetachOnTimeout is marked optional and should use omitempty in its JSON tag, consistent with other optional enum fields throughout the config/v1 API group (e.g., Platform, CgroupMode, WorkerLatencyProfile). This keeps manifests clean by omitting the field when unset.

♻️ Proposed change
-	ForceDetachOnTimeout ForceDetachOnTimeoutPolicy `json:"forceDetachOnTimeout"`
+	ForceDetachOnTimeout ForceDetachOnTimeoutPolicy `json:"forceDetachOnTimeout,omitempty"`

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In
`@payload-manifests/crds/0000_10_config-operator_01_controllermanagers.crd.yaml`:
- Line 5: The api approval annotation api-approved.openshift.io currently
contains a placeholder URL ending with "XYZ"; replace that placeholder with the
actual GitHub PR URL for the OpenShift API approval (the final merged/approved
PR number), e.g. https://github.com/openshift/api/pull/<PR_NUMBER>, ensuring the
annotation value is a valid URL and kept as a single string on the
api-approved.openshift.io line in the CRD manifest so gating will recognize it.

kind: CustomResourceDefinition
metadata:
annotations:
api-approved.openshift.io: https://github.com/openshift/api/pull/XYZ
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Replace placeholder API approval URL before merge.

The api-approved.openshift.io annotation still points to a placeholder XYZ, which violates API approval compliance and will fail gating. Update it to the actual approval PR URL.

🔧 Suggested fix
-    api-approved.openshift.io: https://github.com/openshift/api/pull/XYZ
+    api-approved.openshift.io: https://github.com/openshift/api/pull/2668
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
api-approved.openshift.io: https://github.com/openshift/api/pull/XYZ
api-approved.openshift.io: https://github.com/openshift/api/pull/2668
🤖 Prompt for AI Agents
In
`@payload-manifests/crds/0000_10_config-operator_01_controllermanagers.crd.yaml`
at line 5, The api approval annotation api-approved.openshift.io currently
contains a placeholder URL ending with "XYZ"; replace that placeholder with the
actual GitHub PR URL for the OpenShift API approval (the final merged/approved
PR number), e.g. https://github.com/openshift/api/pull/<PR_NUMBER>, ensuring the
annotation value is a valid URL and kept as a single string on the
api-approved.openshift.io line in the CRD manifest so gating will recognize it.

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Jan 24, 2026

@dobsonj: The following tests failed, say /retest to rerun all failed tests or /retest-required to rerun all mandatory failed tests:

Test name Commit Details Required Rerun command
ci/prow/verify 2e1d9a8 link true /test verify
ci/prow/lint 2e1d9a8 link true /test lint

Full PR test history. Your PR dashboard.

Details

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 kubernetes-sigs/prow repository. I understand the commands that are listed here.

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

Labels

do-not-merge/work-in-progress Indicates that a PR should not merge because it is a work in progress. jira/valid-reference Indicates that this PR references a valid Jira ticket of any type. Review effort 2/5 size/L Denotes a PR that changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants