Skip to content
50 changes: 50 additions & 0 deletions api/v1beta2/clustercustomquota_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
// Copyright 2020-2025 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0

package v1beta2

import (
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// ClusterCustomQuotaSpec.
type ClusterCustomQuotaSpec struct {
CustomQuotaSpec `json:",inline"`

Selectors []metav1.LabelSelector `json:"selectors,omitempty"`
}

// +kubebuilder:object:root=true
// +kubebuilder:resource:scope=Cluster
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Used",type="string",JSONPath=".status.used",description="The total used amount"
// +kubebuilder:printcolumn:name="Limit",type="string",JSONPath=".spec.limit",description="The total limit available"
// +kubebuilder:printcolumn:name="Available",type="string",JSONPath=".status.available",description="The total amount available"

type ClusterCustomQuota struct {
metav1.TypeMeta `json:",inline"`

// +optional
metav1.ObjectMeta `json:"metadata,omitzero"`

Spec ClusterCustomQuotaSpec `json:"spec"`

// +optional
Status CustomQuotaStatus `json:"status,omitzero"`
}

// +kubebuilder:object:root=true

// ClusterCustomQuotaList contains a list of ClusterCustomQuota.
type ClusterCustomQuotaList struct {
metav1.TypeMeta `json:",inline"`

// +optional
metav1.ListMeta `json:"metadata,omitzero"`

Items []ClusterCustomQuota `json:"items"`
}

func init() {
SchemeBuilder.Register(&ClusterCustomQuota{}, &ClusterCustomQuotaList{})
}
13 changes: 13 additions & 0 deletions api/v1beta2/customquota_status.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
// Copyright 2020-2025 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0

package v1beta2

import "k8s.io/apimachinery/pkg/api/resource"

// CustomQuotaStatus defines the observed state of GlobalResourceQuota.
type CustomQuotaStatus struct {
Used resource.Quantity `json:"used"`
Available resource.Quantity `json:"available"`
Claims []string `json:"claims,omitempty"`
}
57 changes: 57 additions & 0 deletions api/v1beta2/customquota_types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// Copyright 2020-2025 Project Capsule Authors
// SPDX-License-Identifier: Apache-2.0

package v1beta2

import (
"k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)

// CustomQuotaSpec.
type CustomQuotaSpec struct {
ScopeSelectors []metav1.LabelSelector `json:"scopeSelectors,omitempty"`
Limit resource.Quantity `json:"limit"`
//+kubebuilder:default:={}
Source CustomQuotaSpecSource `json:"source,omitzero"`
}

type CustomQuotaSpecSource struct {
Version string `json:"version,omitempty"`
Kind string `json:"kind,omitempty"`
Path string `json:"path,omitempty"`
}

// +kubebuilder:object:root=true
// +kubebuilder:subresource:status
// +kubebuilder:printcolumn:name="Used",type="string",JSONPath=".status.used",description="The total used amount"
// +kubebuilder:printcolumn:name="Limit",type="string",JSONPath=".spec.limit",description="The total limit available"
// +kubebuilder:printcolumn:name="Available",type="string",JSONPath=".status.available",description="The total amount available"

type CustomQuota struct {
metav1.TypeMeta `json:",inline"`

// +optional
metav1.ObjectMeta `json:"metadata,omitzero"`

Spec CustomQuotaSpec `json:"spec"`

// +optional
Status CustomQuotaStatus `json:"status,omitzero"`
}

// +kubebuilder:object:root=true

// CustomQuotaList contains a list of CustomQuota.
type CustomQuotaList struct {
metav1.TypeMeta `json:",inline"`

// +optional
metav1.ListMeta `json:"metadata,omitzero"`

Items []CustomQuota `json:"items"`
}

func init() {
SchemeBuilder.Register(&CustomQuota{}, &CustomQuotaList{})
}
202 changes: 202 additions & 0 deletions api/v1beta2/zz_generated.deepcopy.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions charts/capsule/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,12 @@ The following Values have changed key or Value:
| webhooks.hooks.cordoning.namespaceSelector | object | `{"matchExpressions":[{"key":"capsule.clastix.io/tenant","operator":"Exists"},{"key":"projectcapsule.dev/cordoned","operator":"Exists"}]}` | [NamespaceSelector](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-namespaceselector) |
| webhooks.hooks.cordoning.objectSelector | object | `{}` | [ObjectSelector](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-objectselector) |
| webhooks.hooks.cordoning.rules | list | `[{"apiGroups":["*"],"apiVersions":["*"],"operations":["CREATE","UPDATE","DELETE"],"resources":["*"],"scope":"Namespaced"}]` | [Rules](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-rules) |
| webhooks.hooks.customquotas.enabled | bool | `true` | Enable the Hook |
| webhooks.hooks.customquotas.failurePolicy | string | `"Fail"` | [FailurePolicy](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#failure-policy) |
| webhooks.hooks.customquotas.matchConditions | list | `[]` | [MatchConditions](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-matchpolicy) |
| webhooks.hooks.customquotas.matchPolicy | string | `"Equivalent"` | [MatchPolicy](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-matchpolicy) |
| webhooks.hooks.customquotas.namespaceSelector | object | `{"matchExpressions":[{"key":"capsule.clastix.io/tenant","operator":"Exists"}]}` | [NamespaceSelector](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-namespaceselector) |
| webhooks.hooks.customquotas.objectSelector | object | `{}` | [ObjectSelector](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-objectselector) |
| webhooks.hooks.customresources.enabled | bool | `true` | Enable the Hook |
| webhooks.hooks.customresources.failurePolicy | string | `"Fail"` | [FailurePolicy](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#failure-policy) |
| webhooks.hooks.customresources.matchConditions | list | `[]` | [MatchConditions](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/#matching-requests-matchpolicy) |
Expand Down
Loading