config/crd/bases/placement.kubernetes-fleet.io_clusterresourceoverrides.yaml (248 lines of code) (raw):
---
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
controller-gen.kubebuilder.io/version: v0.16.0
name: clusterresourceoverrides.placement.kubernetes-fleet.io
spec:
group: placement.kubernetes-fleet.io
names:
categories:
- fleet
- fleet-placement
kind: ClusterResourceOverride
listKind: ClusterResourceOverrideList
plural: clusterresourceoverrides
singular: clusterresourceoverride
scope: Cluster
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: |-
ClusterResourceOverride defines a group of override policies about how to override the selected cluster scope resources
to target clusters.
properties:
apiVersion:
description: |-
APIVersion defines the versioned schema of this representation of an object.
Servers should convert recognized schemas to the latest internal value, and
may reject unrecognized values.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources
type: string
kind:
description: |-
Kind is a string value representing the REST resource this object represents.
Servers may infer this from the endpoint the client submits requests to.
Cannot be updated.
In CamelCase.
More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
type: string
metadata:
type: object
spec:
description: The desired state of ClusterResourceOverrideSpec.
properties:
clusterResourceSelectors:
description: |-
ClusterResourceSelectors is an array of selectors used to select cluster scoped resources. The selectors are `ORed`.
If a namespace is selected, ALL the resources under the namespace are selected automatically.
LabelSelector is not supported.
You can have 1-20 selectors.
We only support Name selector for now.
items:
description: |-
ClusterResourceSelector is used to select cluster scoped resources as the target resources to be placed.
If a namespace is selected, ALL the resources under the namespace are selected automatically.
All the fields are `ANDed`. In other words, a resource must match all the fields to be selected.
properties:
group:
description: |-
Group name of the cluster-scoped resource.
Use an empty string to select resources under the core API group (e.g., namespaces).
type: string
kind:
description: |-
Kind of the cluster-scoped resource.
Note: When `Kind` is `namespace`, ALL the resources under the selected namespaces are selected.
type: string
labelSelector:
description: |-
A label query over all the cluster-scoped resources. Resources matching the query are selected.
Note that namespace-scoped resources can't be selected even if they match the query.
properties:
matchExpressions:
description: matchExpressions is a list of label selector
requirements. The requirements are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key that the selector
applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
name:
description: Name of the cluster-scoped resource.
type: string
version:
description: Version of the cluster-scoped resource.
type: string
required:
- group
- kind
- version
type: object
maxItems: 20
minItems: 1
type: array
placement:
description: |-
Placement defines whether the override is applied to a specific placement or not.
If set, the override will trigger the placement rollout immediately when the rollout strategy type is RollingUpdate.
Otherwise, it will be applied to the next rollout.
The recommended way is to set the placement so that the override can be rolled out immediately.
properties:
name:
description: Name is the reference to the name of placement.
type: string
required:
- name
type: object
policy:
description: Policy defines how to override the selected resources
on the target clusters.
properties:
overrideRules:
description: |-
OverrideRules defines an array of override rules to be applied on the selected resources.
The order of the rules determines the override order.
When there are two rules selecting the same fields on the target cluster, the last one will win.
You can have 1-20 rules.
items:
description: OverrideRule defines how to override the selected
resources on the target clusters.
properties:
clusterSelector:
description: |-
ClusterSelectors selects the target clusters.
The resources will be overridden before applying to the matching clusters.
An empty clusterSelector selects ALL the member clusters.
A nil clusterSelector selects NO member clusters.
For now, only labelSelector is supported.
properties:
clusterSelectorTerms:
description: ClusterSelectorTerms is a list of cluster
selector terms. The terms are `ORed`.
items:
properties:
labelSelector:
description: |-
LabelSelector is a label query over all the joined member clusters. Clusters matching
the query are selected.
If you specify both label and property selectors in the same term, the results are AND'd.
properties:
matchExpressions:
description: matchExpressions is a list of
label selector requirements. The requirements
are ANDed.
items:
description: |-
A label selector requirement is a selector that contains values, a key, and an operator that
relates the key and values.
properties:
key:
description: key is the label key that
the selector applies to.
type: string
operator:
description: |-
operator represents a key's relationship to a set of values.
Valid operators are In, NotIn, Exists and DoesNotExist.
type: string
values:
description: |-
values is an array of string values. If the operator is In or NotIn,
the values array must be non-empty. If the operator is Exists or DoesNotExist,
the values array must be empty. This array is replaced during a strategic
merge patch.
items:
type: string
type: array
x-kubernetes-list-type: atomic
required:
- key
- operator
type: object
type: array
x-kubernetes-list-type: atomic
matchLabels:
additionalProperties:
type: string
description: |-
matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels
map is equivalent to an element of matchExpressions, whose key field is "key", the
operator is "In", and the values array contains only "value". The requirements are ANDed.
type: object
type: object
x-kubernetes-map-type: atomic
propertySelector:
description: |-
PropertySelector is a property query over all joined member clusters. Clusters matching
the query are selected.
If you specify both label and property selectors in the same term, the results are AND'd.
At this moment, PropertySelector can only be used with
`RequiredDuringSchedulingIgnoredDuringExecution` affinity terms.
This field is beta-level; it is for the property-based scheduling feature and is only
functional when a property provider is enabled in the deployment.
properties:
matchExpressions:
description: MatchExpressions is an array
of PropertySelectorRequirements. The requirements
are AND'd.
items:
description: |-
PropertySelectorRequirement is a specific property requirement when picking clusters for
resource placement.
properties:
name:
description: Name is the name of the
property; it should be a Kubernetes
label name.
type: string
operator:
description: |-
Operator specifies the relationship between a cluster's observed value of the specified
property and the values given in the requirement.
type: string
values:
description: |-
Values are a list of values of the specified property which Fleet will compare against
the observed values of individual member clusters in accordance with the given
operator.
At this moment, each value should be a Kubernetes quantity. For more information, see
https://pkg.go.dev/k8s.io/apimachinery/pkg/api/resource#Quantity.
If the operator is Gt (greater than), Ge (greater than or equal to), Lt (less than),
or `Le` (less than or equal to), Eq (equal to), or Ne (ne), exactly one value must be
specified in the list.
items:
type: string
maxItems: 1
type: array
required:
- name
- operator
- values
type: object
type: array
required:
- matchExpressions
type: object
propertySorter:
description: |-
PropertySorter sorts all matching clusters by a specific property and assigns different weights
to each cluster based on their observed property values.
At this moment, PropertySorter can only be used with
`PreferredDuringSchedulingIgnoredDuringExecution` affinity terms.
This field is beta-level; it is for the property-based scheduling feature and is only
functional when a property provider is enabled in the deployment.
properties:
name:
description: Name is the name of the property
which Fleet sorts clusters by.
type: string
sortOrder:
description: |-
SortOrder explains how Fleet should perform the sort; specifically, whether Fleet should
sort in ascending or descending order.
type: string
required:
- name
- sortOrder
type: object
type: object
maxItems: 10
type: array
required:
- clusterSelectorTerms
type: object
jsonPatchOverrides:
description: |-
JSONPatchOverrides defines a list of JSON patch override rules.
This field is only allowed when OverrideType is JSONPatch.
items:
description: JSONPatchOverride applies a JSON patch on
the selected resources following [RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902).
properties:
op:
description: Operator defines the operation on the
target field.
enum:
- add
- remove
- replace
type: string
path:
description: |-
Path defines the target location.
Note: override will fail if the resource path does not exist.
type: string
value:
description: |-
Value defines the content to be applied on the target location.
Value should be empty when operator is `remove`.
We have reserved a few variables in this field that will be replaced by the actual values.
Those variables all start with `$` and are case sensitive.
Here is the list of currently supported variables:
`${MEMBER-CLUSTER-NAME}`: this will be replaced by the name of the memberCluster CR that represents this cluster.
x-kubernetes-preserve-unknown-fields: true
required:
- op
- path
type: object
maxItems: 20
minItems: 1
type: array
overrideType:
default: JSONPatch
description: OverrideType defines the type of the override
rules.
enum:
- JSONPatch
- Delete
type: string
type: object
maxItems: 20
minItems: 1
type: array
required:
- overrideRules
type: object
required:
- clusterResourceSelectors
- policy
type: object
required:
- spec
type: object
served: true
storage: true