[Draft] - Adding cabilities for crdcompatibilitychecker and capi CRs#2884
[Draft] - Adding cabilities for crdcompatibilitychecker and capi CRs#2884miyadav wants to merge 4 commits into
Conversation
|
Pipeline controller notification For optional jobs, comment This repository is configured in: LGTM mode |
|
Hello @miyadav! Some important instructions when contributing to openshift/api: |
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Repository YAML (base), Central YAML (inherited) Review profile: CHILL Plan: Enterprise Run ID: ⛔ Files ignored due to path filters (11)
📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThis PR introduces two new optional cluster capabilities to the ClusterVersion API: CompatibilityRequirements and ClusterAPI. It adds exported constants documenting that ClusterAPI depends on CompatibilityRequirements, extends the CRD schema enumeration to include both capabilities under the CRDCompatibilityRequirementOperator feature gate, registers them in the public KnownClusterVersionCapabilities list and the current capability set, and adds an XValidation rule that prevents enabling ClusterAPI without also enabling CompatibilityRequirements (either explicitly in spec.additionalEnabledCapabilities or implicitly in status.capabilities.enabledCapabilities). 🚥 Pre-merge checks | ✅ 14 | ❌ 1❌ Failed checks (1 inconclusive)
✅ Passed checks (14 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Comment Tip CodeRabbit can scan changed files for high-signal PII patterns.Microsoft Presidio Analyzer scans changed files for sensitive identifiers such as payment card numbers, US Social Security numbers, Bitcoin wallet addresses, and phone numbers. To tune entities, score thresholds, or languages, add Microsoft Presidio configuration in the repository (for example |
|
[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: 1
🧹 Nitpick comments (1)
config/v1/types_cluster_version.go (1)
22-22: ⚡ Quick winAdd/extend CRD validation tests for the new dependency rule.
Please add explicit create/update tests for
ClusterAPIrequiringCompatibilityRequirements(both failing and passing paths), mirroring the existing marketplace dependency test style.As per coding guidelines, “Add validation tests in
<group>/<version>/tests/<crd-name>/” for API validation changes.🤖 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 `@config/v1/types_cluster_version.go` at line 22, Add CRD validation tests for the new XValidation rule in types_cluster_version.go that enforces ClusterAPI requires CompatibilityRequirements: create tests under the API group/version tests directory (following the pattern in existing marketplace dependency tests) that cover both failing and passing paths for create and update operations; name tests clearly (e.g., TestCreateClusterVersion_ClusterAPIWithoutCompatibilityRequirements_Fails and TestUpdateClusterVersion_EnableCompatibilityRequirements_Passes) and construct ClusterVersion objects toggling spec.capabilities.additionalEnabledCapabilities and status.capabilities.enabledCapabilities to assert validation rejection when ClusterAPI is present without CompatibilityRequirements and acceptance when CompatibilityRequirements is present either in spec or in status.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.
Inline comments:
In `@config/v1/types_cluster_version.go`:
- Line 22: The XValidation rule currently only applies when
spec.capabilities.baselineCapabilitySet == 'None', letting configs with a
non-None baseline (e.g., baselineCapabilitySet: v4.18) enable ClusterAPI without
CompatibilityRequirements; remove the baselineCapabilitySet check so the rule
always enforces the dependency: update the kubebuilder XValidation expression in
types_cluster_version.go to check for the presence of spec.capabilities and
spec.capabilities.additionalEnabledCapabilities, and if 'ClusterAPI' is in
spec.capabilities.additionalEnabledCapabilities require
'CompatibilityRequirements' to be either in
spec.capabilities.additionalEnabledCapabilities or (if present) in
status.capabilities.enabledCapabilities; keep the existing has(...) guards and
the same error message.
---
Nitpick comments:
In `@config/v1/types_cluster_version.go`:
- Line 22: Add CRD validation tests for the new XValidation rule in
types_cluster_version.go that enforces ClusterAPI requires
CompatibilityRequirements: create tests under the API group/version tests
directory (following the pattern in existing marketplace dependency tests) that
cover both failing and passing paths for create and update operations; name
tests clearly (e.g.,
TestCreateClusterVersion_ClusterAPIWithoutCompatibilityRequirements_Fails and
TestUpdateClusterVersion_EnableCompatibilityRequirements_Passes) and construct
ClusterVersion objects toggling spec.capabilities.additionalEnabledCapabilities
and status.capabilities.enabledCapabilities to assert validation rejection when
ClusterAPI is present without CompatibilityRequirements and acceptance when
CompatibilityRequirements is present either in spec or in status.
🪄 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: afefc07d-7be7-4bb8-a2e8-90622698cd31
📒 Files selected for processing (1)
config/v1/types_cluster_version.go
| // +kubebuilder:subresource:status | ||
| // +kubebuilder:resource:path=clusterversions,scope=Cluster | ||
| // +kubebuilder:validation:XValidation:rule="has(self.spec.capabilities) && has(self.spec.capabilities.additionalEnabledCapabilities) && self.spec.capabilities.baselineCapabilitySet == 'None' && 'marketplace' in self.spec.capabilities.additionalEnabledCapabilities ? 'OperatorLifecycleManager' in self.spec.capabilities.additionalEnabledCapabilities || (has(self.status) && has(self.status.capabilities) && has(self.status.capabilities.enabledCapabilities) && 'OperatorLifecycleManager' in self.status.capabilities.enabledCapabilities) : true",message="the `marketplace` capability requires the `OperatorLifecycleManager` capability, which is neither explicitly or implicitly enabled in this cluster, please enable the `OperatorLifecycleManager` capability" | ||
| // +kubebuilder:validation:XValidation:rule="has(self.spec.capabilities) && has(self.spec.capabilities.additionalEnabledCapabilities) && 'ClusterAPI' in self.spec.capabilities.additionalEnabledCapabilities ? 'CompatibilityRequirements' in self.spec.capabilities.additionalEnabledCapabilities || (has(self.status) && has(self.status.capabilities) && has(self.status.capabilities.enabledCapabilities) && 'CompatibilityRequirements' in self.status.capabilities.enabledCapabilities) : true",message="the `ClusterAPI` capability requires the `CompatibilityRequirements` capability, which is neither explicitly or implicitly enabled in this cluster, please enable the `CompatibilityRequirements` capability" |
There was a problem hiding this comment.
The changes here look fine, but we should make this a feature gated validation based on the presence of the two gates
|
|
||
| // ClusterVersionCapability enumerates optional, core cluster components. | ||
| // +kubebuilder:validation:Enum=openshift-samples;baremetal;marketplace;Console;Insights;Storage;CSISnapshot;NodeTuning;MachineAPI;Build;DeploymentConfig;ImageRegistry;OperatorLifecycleManager;CloudCredential;Ingress;CloudControllerManager;OperatorLifecycleManagerV1 | ||
| // +kubebuilder:validation:Enum=openshift-samples;baremetal;marketplace;Console;Insights;Storage;CSISnapshot;NodeTuning;MachineAPI;Build;DeploymentConfig;ImageRegistry;OperatorLifecycleManager;CloudCredential;Ingress;CloudControllerManager;OperatorLifecycleManagerV1;CompatibilityRequirements;ClusterAPI |
There was a problem hiding this comment.
Make these feature gated enum validations instead
That way we only ship the capabilities when the feature gates are promoted
|
according to this guide, we should add a capability set for the current version |
Thanks @stefanonardo for review , it is already here |
…patibilityRequirements dependency XValidation behind the CRDCompatibilityRequirementOperator feature gate so they only ship in TechPreview/DevPreview CRDs until the gate is promoted.
… which is also ungated , FeatureGateAwareXValidation causing test failure
|
@miyadav: all tests passed! 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. |
Adding new capability constants
WIP - OCPCLOUD-3368
/hold
Generated by - claude-opus-4-6(2.1.169)