Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add CEL rules to ClusterQueue #1972

Merged
merged 5 commits into from Apr 16, 2024

Conversation

IrvingMg
Copy link
Contributor

What type of PR is this?

/kind cleanup

What this PR does / why we need it:

It replaces some of the validations executed by webhooks for the ClusterQueue type with CRD validation rules.

Which issue(s) this PR fixes:

Relates to #463

Special notes for your reviewer:

Only validation rules with a cost within the API server limits have been added.

Does this PR introduce a user-facing change?

Added CRD validation rules to ClusterQueue.

ACTION REQUIRED: Requires Kubernetes 1.25 or newer

@k8s-ci-robot k8s-ci-robot added release-note-action-required Denotes a PR that introduces potentially breaking changes that require user action. kind/cleanup Categorizes issue or PR as related to cleaning up code, process, or technical debt. labels Apr 11, 2024
@k8s-ci-robot k8s-ci-robot added cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Apr 11, 2024
@k8s-ci-robot
Copy link
Contributor

Hi @IrvingMg. Thanks for your PR.

I'm waiting for a kubernetes-sigs member to verify that this patch is reasonable to test. If it is, they should reply with /ok-to-test on its own line. Until that is done, I will not automatically test new commits in this PR, but the usual testing commands by org members will still work. Regular contributors should join the org to skip this step.

Once the patch is verified, the new status will be reflected by the ok-to-test label.

I understand the commands that are listed here.

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/test-infra repository.

@k8s-ci-robot k8s-ci-robot added the size/XL Denotes a PR that changes 500-999 lines, ignoring generated files. label Apr 11, 2024
Copy link

netlify bot commented Apr 11, 2024

Deploy Preview for kubernetes-sigs-kueue canceled.

Name Link
🔨 Latest commit e1000f4
🔍 Latest deploy log https://app.netlify.com/sites/kubernetes-sigs-kueue/deploys/661e294537e570000807e993

@trasc
Copy link
Contributor

trasc commented Apr 11, 2024

/assign
/ok-to-test

@k8s-ci-robot k8s-ci-robot added ok-to-test Indicates a non-member PR verified by an org member that is safe to test. and removed needs-ok-to-test Indicates a PR that requires an org member to verify it is safe to test. labels Apr 11, 2024
Copy link
Contributor

@trasc trasc left a comment

Choose a reason for hiding this comment

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

First pass

pkg/webhooks/clusterqueue_webhook.go Show resolved Hide resolved
apis/kueue/v1beta1/clusterqueue_types.go Outdated Show resolved Hide resolved
Copy link
Contributor

@trasc trasc left a comment

Choose a reason for hiding this comment

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

One nit.

LGTM otherwise

@@ -74,6 +77,7 @@ type ClusterQueueSpec struct {

// flavorFungibility defines whether a workload should try the next flavor
// before borrowing or preempting in the flavor being evaluated.
// +kubebuilder:default={}
Copy link
Contributor

Choose a reason for hiding this comment

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

NIT: Just making the field not a pointer will do this and we can remove some nil checks in the rest of the code-base.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

Should this change be applied to every field where +kubebuilder:default={} was added? Because we could change the pointers on spec.preemption and spec.preemption.borrowWithinCohort as well

Copy link
Contributor

Choose a reason for hiding this comment

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

Yes if we'll default them to empty, in my opinion.
@alculquicondor WDYT?

Copy link
Contributor

Choose a reason for hiding this comment

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

we can make it a non-pointer when we migrate to v1beta2 or v1.

@IrvingMg IrvingMg mentioned this pull request Apr 15, 2024
apis/kueue/v1beta1/clusterqueue_types.go Outdated Show resolved Hide resolved
@@ -74,6 +77,7 @@ type ClusterQueueSpec struct {

// flavorFungibility defines whether a workload should try the next flavor
// before borrowing or preempting in the flavor being evaluated.
// +kubebuilder:default={}
Copy link
Contributor

Choose a reason for hiding this comment

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

we can make it a non-pointer when we migrate to v1beta2 or v1.

apis/kueue/v1beta1/clusterqueue_types.go Outdated Show resolved Hide resolved
test/integration/webhook/clusterqueue_test.go Outdated Show resolved Hide resolved
@@ -191,7 +155,6 @@ func validateFlavorQuotas(flavorQuotas kueue.FlavorQuotas, coveredResources []co
if rq.BorrowingLimit != nil {
borrowingLimitPath := path.Child("borrowingLimit")
allErrs = append(allErrs, validateResourceQuantity(*rq.BorrowingLimit, borrowingLimitPath)...)
allErrs = append(allErrs, validateLimit(*rq.BorrowingLimit, cohort, borrowingLimitPath)...)
}
if features.Enabled(features.LendingLimit) && rq.LendingLimit != nil {
lendingLimitPath := path.Child("lendingLimit")
Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

According to this table https://kubernetes.io/docs/reference/using-api/cel/#cel-options-language-features-and-libraries quantity library requires Kubernetes 1.29 -although then, in the quantity subsection states 1.28-, is it safe to replace the quantity validations with CEL? Wouldn't introduce breaking changes for the supported versions earlier than 1.29?

Copy link
Contributor

Choose a reason for hiding this comment

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

oh I see. I missed that.
Can you leave an open issue to change this when 1.28 reaches EoL?

@alculquicondor
Copy link
Contributor

/lgtm
/approve

@k8s-ci-robot k8s-ci-robot added the lgtm "Looks good to me", indicates that a PR is ready to be merged. label Apr 16, 2024
@k8s-ci-robot
Copy link
Contributor

LGTM label has been added.

Git tree hash: 3ef7bb460335de62e6fabb58ff75d10b51bc64e7

@k8s-ci-robot
Copy link
Contributor

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: alculquicondor, IrvingMg

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:

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

@k8s-ci-robot k8s-ci-robot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Apr 16, 2024
@k8s-ci-robot k8s-ci-robot merged commit 991e83a into kubernetes-sigs:main Apr 16, 2024
14 checks passed
@k8s-ci-robot k8s-ci-robot added this to the v0.7 milestone Apr 16, 2024
@IrvingMg IrvingMg deleted the add-clusterqueue-cel-rules branch April 17, 2024 09:52
vsoch pushed a commit to researchapps/kueue that referenced this pull request Apr 18, 2024
* Add CEL rules to ClusterQueue

* Set default values with CRD validations

* Update message for validation rule

* Remove unecessary checks from crd validations

* Remove test case
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
approved Indicates a PR has been approved by an approver from all required OWNERS files. cncf-cla: yes Indicates the PR's author has signed the CNCF CLA. kind/cleanup Categorizes issue or PR as related to cleaning up code, process, or technical debt. lgtm "Looks good to me", indicates that a PR is ready to be merged. ok-to-test Indicates a non-member PR verified by an org member that is safe to test. release-note-action-required Denotes a PR that introduces potentially breaking changes that require user action. size/XL Denotes a PR that changes 500-999 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants