-
Notifications
You must be signed in to change notification settings - Fork 53
Implement Limit controller #868
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
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -71,6 +71,7 @@ kubectl delete -f $ORC_RELEASE | |
| | group | | ✔ | ✔ | | ||
| | image | ✔ | ✔ | ✔ | | ||
| | keypair | | ◐ | ◐ | | ||
| | limit | | | ◐ | | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. When we have RegionRef on this controller, I believe we will be pretty much done.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes. After Region controller is merged, we can add the
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We have the Region controller now, we can now add |
||
| | network | | ◐ | ◐ | | ||
| | port | | ◐ | ◐ | | ||
| | project | | ◐ | ◐ | | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,125 @@ | ||
| /* | ||
| Copyright The ORC Authors. | ||
|
|
||
| Licensed under the Apache License, Version 2.0 (the "License"); | ||
| you may not use this file except in compliance with the License. | ||
| You may obtain a copy of the License at | ||
|
|
||
| http://www.apache.org/licenses/LICENSE-2.0 | ||
|
|
||
| Unless required by applicable law or agreed to in writing, software | ||
| distributed under the License is distributed on an "AS IS" BASIS, | ||
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
| See the License for the specific language governing permissions and | ||
| limitations under the License. | ||
| */ | ||
|
|
||
| package v1alpha1 | ||
|
|
||
| // LimitResourceSpec contains the desired state of the resource. | ||
| // +kubebuilder:validation:XValidation:rule="has(self.projectRef) || has(self.domainRef)",message="either projectRef or domainRef must be specified" | ||
| // +kubebuilder:validation:XValidation:rule="!(has(self.projectRef) && has(self.domainRef))",message="projectRef and domainRef are mutually exclusive" | ||
| type LimitResourceSpec struct { | ||
| // description is a human-readable description for the resource. | ||
| // Note, currently, there is an issue with keystone that it fails to clear the description field | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is the keystone bug proper, or the gophercloud implementation of it (i.e. missing field pointer)? Do we have a bug report?
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It is a bug from keystone. It can be reproduced with openstack cli, so it is not an issue of gophercloud. @winiciusallan has helped locate the issue https://github.com/k-orc/openstack-resource-controller/pull/868/changes#r3707450414 . I haven't reported it yet. |
||
| // when Description is updated to empty. | ||
| // +kubebuilder:validation:MinLength:=1 | ||
| // +kubebuilder:validation:MaxLength:=255 | ||
| // +optional | ||
| Description *string `json:"description,omitempty"` | ||
|
|
||
| // serviceRef is a reference to the ORC Service which this resource is associated with. | ||
| // +required | ||
| // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="serviceRef is immutable" | ||
| ServiceRef KubernetesNameRef `json:"serviceRef,omitempty"` | ||
|
|
||
| // projectRef is a reference to the ORC Project which this resource is associated with. | ||
| // Either Domain ID or Project ID must be provided. | ||
| // https://opendev.org/openstack/keystone/src/commit/30ef2ffa65a3486ef882f00538e20f2253c57d4c/keystone/limit/schema.py#L323-L340 | ||
| // +optional | ||
| // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="projectRef is immutable" | ||
| ProjectRef *KubernetesNameRef `json:"projectRef,omitempty"` | ||
|
|
||
| // domainRef is a reference to the ORC Domain which this resource is associated with. | ||
| // Either Domain ID or Project ID must be provided. | ||
| // https://opendev.org/openstack/keystone/src/commit/30ef2ffa65a3486ef882f00538e20f2253c57d4c/keystone/limit/schema.py#L323-L340 | ||
| // +optional | ||
| // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="domainRef is immutable" | ||
| DomainRef *KubernetesNameRef `json:"domainRef,omitempty"` | ||
|
|
||
| // resourceName is the name of the resource this limit is associated with. | ||
| // +kubebuilder:validation:MinLength:=1 | ||
| // +kubebuilder:validation:MaxLength:=255 | ||
| // +kubebuilder:validation:Pattern=`^[\S]+$` | ||
| // +required | ||
| // +kubebuilder:validation:XValidation:rule="self == oldSelf",message="resourceName is immutable" | ||
| ResourceName string `json:"resourceName,omitempty"` | ||
|
|
||
| // resourceLimit is the override value of the limit. | ||
| // Note, currently, there is an issue with keystone that it fails to set the resourceLimit field to zero | ||
| // when ResourceLimit is updated to zero. | ||
| // +kubebuilder:validation:Minimum=-1 | ||
| // +required | ||
| ResourceLimit int32 `json:"resourceLimit"` | ||
| } | ||
|
|
||
| // LimitFilter defines an existing resource by its properties | ||
| // +kubebuilder:validation:MinProperties:=1 | ||
| type LimitFilter struct { | ||
| // description of the existing resource | ||
| // +kubebuilder:validation:MinLength:=1 | ||
| // +kubebuilder:validation:MaxLength:=255 | ||
| // +optional | ||
| Description *string `json:"description,omitempty"` | ||
|
|
||
| // serviceRef is a reference to the ORC Service which this resource is associated with. | ||
| // +optional | ||
| ServiceRef *KubernetesNameRef `json:"serviceRef,omitempty"` | ||
|
|
||
| // projectRef is a reference to the ORC Project which this resource is associated with. | ||
| // +optional | ||
| ProjectRef *KubernetesNameRef `json:"projectRef,omitempty"` | ||
|
|
||
| // domainRef is a reference to the ORC Domain which this resource is associated with. | ||
| // +optional | ||
| DomainRef *KubernetesNameRef `json:"domainRef,omitempty"` | ||
|
|
||
| // resourceName is the name of the resource this limit is associated with. | ||
| // +kubebuilder:validation:MinLength:=1 | ||
| // +kubebuilder:validation:MaxLength:=255 | ||
| // +kubebuilder:validation:Pattern=`^[\S]+$` | ||
| // +optional | ||
| ResourceName string `json:"resourceName,omitempty"` | ||
| } | ||
|
|
||
| // LimitResourceStatus represents the observed state of the resource. | ||
| type LimitResourceStatus struct { | ||
| // description is a human-readable description for the resource. | ||
| // +kubebuilder:validation:MaxLength=1024 | ||
| // +optional | ||
| Description string `json:"description,omitempty"` | ||
|
|
||
| // serviceID is the ID of the Service to which the resource is associated. | ||
| // +kubebuilder:validation:MaxLength=1024 | ||
| // +optional | ||
| ServiceID string `json:"serviceID,omitempty"` | ||
|
|
||
| // projectID is the ID of the Project to which the resource is associated. | ||
| // +kubebuilder:validation:MaxLength=1024 | ||
| // +optional | ||
| ProjectID string `json:"projectID,omitempty"` | ||
|
|
||
| // domainID is the ID of the Domain to which the resource is associated. | ||
| // +kubebuilder:validation:MaxLength=1024 | ||
| // +optional | ||
| DomainID string `json:"domainID,omitempty"` | ||
|
|
||
| // resourceLimit is the override value of the limit. | ||
| // +optional | ||
| ResourceLimit *int32 `json:"resourceLimit,omitempty"` | ||
|
|
||
| // resourceName is the name of the resource this limit is associated with. | ||
| // +kubebuilder:validation:MaxLength=1024 | ||
| // +optional | ||
| ResourceName string `json:"resourceName,omitempty"` | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This seems very fragile. Don't we have a better way to skip tests? Perhaps we need to improve kuttl (in my experience, they're very receptive).
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was considering using labels, but then it seems I will need to update all cases with labels. If
kubettlhas something like--skip-labels, it will be a good fit for this case.