Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
116 changes: 58 additions & 58 deletions config/v1/feature_gates.go

Large diffs are not rendered by default.

10 changes: 6 additions & 4 deletions config/v1/types_feature.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,17 @@ var (
// this feature set on CANNOT BE UNDONE and PREVENTS UPGRADES.
TechPreviewNoUpgrade FeatureSet = "TechPreviewNoUpgrade"

// DevPreviewNoUpgrade turns on dev preview features that are not part of the normal supported platform. Turning
// this feature set on CANNOT BE UNDONE and PREVENTS UPGRADES.
DevPreviewNoUpgrade FeatureSet = "DevPreviewNoUpgrade"

// CustomNoUpgrade allows the enabling or disabling of any feature. Turning this feature set on IS NOT SUPPORTED, CANNOT BE UNDONE, and PREVENTS UPGRADES.
// Because of its nature, this setting cannot be validated. If you have any typos or accidentally apply invalid combinations
// your cluster may fail in an unrecoverable way.
CustomNoUpgrade FeatureSet = "CustomNoUpgrade"

// TopologyManager enables ToplogyManager support. Upgrades are enabled with this feature.
LatencySensitive FeatureSet = "LatencySensitive"

// AllFixedFeatureSets are the featuresets that have known featuregates. Custom doesn't for instance. LatencySensitive is dead
AllFixedFeatureSets = []FeatureSet{Default, TechPreviewNoUpgrade}
AllFixedFeatureSets = []FeatureSet{Default, TechPreviewNoUpgrade, DevPreviewNoUpgrade}
)

type FeatureGateSpec struct {
Expand All @@ -67,6 +68,7 @@ type FeatureGateSelection struct {
// +optional
// +kubebuilder:validation:XValidation:rule="oldSelf == 'CustomNoUpgrade' ? self == 'CustomNoUpgrade' : true",message="CustomNoUpgrade may not be changed"
// +kubebuilder:validation:XValidation:rule="oldSelf == 'TechPreviewNoUpgrade' ? self == 'TechPreviewNoUpgrade' : true",message="TechPreviewNoUpgrade may not be changed"
// +kubebuilder:validation:XValidation:rule="oldSelf == 'DevPreviewNoUpgrade' ? self == 'DevPreviewNoUpgrade' : true",message="DevPreviewNoUpgrade may not be changed"
Copy link
Contributor

Choose a reason for hiding this comment

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

I don't remember there being CEL here, but, LGTM. Is it new?

Copy link
Contributor Author

Choose a reason for hiding this comment

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

I don't remember there being CEL here, but, LGTM. Is it new?

"while you were out" :)

FeatureSet FeatureSet `json:"featureSet,omitempty"`

// customNoUpgrade allows the enabling or disabling of any feature. Turning this feature set on IS NOT SUPPORTED, CANNOT BE UNDONE, and PREVENTS UPGRADES.
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,9 @@ spec:
- message: TechPreviewNoUpgrade may not be changed
rule: 'oldSelf == ''TechPreviewNoUpgrade'' ? self == ''TechPreviewNoUpgrade''
: true'
- message: DevPreviewNoUpgrade may not be changed
rule: 'oldSelf == ''DevPreviewNoUpgrade'' ? self == ''DevPreviewNoUpgrade''
: true'
type: object
status:
description: status holds observed values from the cluster. They may not
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.openshift.io: https://github.com/openshift/api/pull/470
api.openshift.io/merged-by-featuregates: "true"
include.release.openshift.io/ibm-cloud-managed: "true"
include.release.openshift.io/self-managed-high-availability: "true"
release.openshift.io/feature-set: DevPreviewNoUpgrade
name: schedulers.config.openshift.io
spec:
group: config.openshift.io
names:
kind: Scheduler
listKind: SchedulerList
plural: schedulers
singular: scheduler
scope: Cluster
versions:
- name: v1
schema:
openAPIV3Schema:
description: "Scheduler holds cluster-wide config information to run the Kubernetes
Scheduler and influence its placement decisions. The canonical name for
this config is `cluster`. \n Compatibility level 1: Stable within a major
release for a minimum of 12 months or 3 minor releases (whichever is longer)."
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: spec holds user settable values for configuration
properties:
defaultNodeSelector:
description: 'defaultNodeSelector helps set the cluster-wide default
node selector to restrict pod placement to specific nodes. This
is applied to the pods created in all namespaces and creates an
intersection with any existing nodeSelectors already set on a pod,
additionally constraining that pod''s selector. For example, defaultNodeSelector:
"type=user-node,region=east" would set nodeSelector field in pod
spec to "type=user-node,region=east" to all pods created in all
namespaces. Namespaces having project-wide node selectors won''t
be impacted even if this field is set. This adds an annotation section
to the namespace. For example, if a new namespace is created with
node-selector=''type=user-node,region=east'', the annotation openshift.io/node-selector:
type=user-node,region=east gets added to the project. When the openshift.io/node-selector
annotation is set on the project the value is used in preference
to the value we are setting for defaultNodeSelector field. For instance,
openshift.io/node-selector: "type=user-node,region=west" means that
the default of "type=user-node,region=east" set in defaultNodeSelector
would not be applied.'
type: string
mastersSchedulable:
description: 'MastersSchedulable allows masters nodes to be schedulable.
When this flag is turned on, all the master nodes in the cluster
will be made schedulable, so that workload pods can run on them.
The default value for this field is false, meaning none of the master
nodes are schedulable. Important Note: Once the workload pods start
running on the master nodes, extreme care must be taken to ensure
that cluster-critical control plane components are not impacted.
Please turn on this field after doing due diligence.'
type: boolean
policy:
description: 'DEPRECATED: the scheduler Policy API has been deprecated
and will be removed in a future release. policy is a reference to
a ConfigMap containing scheduler policy which has user specified
predicates and priorities. If this ConfigMap is not available scheduler
will default to use DefaultAlgorithmProvider. The namespace for
this configmap is openshift-config.'
properties:
name:
description: name is the metadata.name of the referenced config
map
type: string
required:
- name
type: object
profile:
description: "profile sets which scheduling profile should be set
in order to configure scheduling decisions for new pods. \n Valid
values are \"LowNodeUtilization\", \"HighNodeUtilization\", \"NoScoring\"
Defaults to \"LowNodeUtilization\""
enum:
- ""
- LowNodeUtilization
- HighNodeUtilization
- NoScoring
type: string
profileCustomizations:
description: profileCustomizations contains configuration for modifying
the default behavior of existing scheduler profiles.
properties:
dynamicResourceAllocation:
description: dynamicResourceAllocation allows to enable or disable
dynamic resource allocation within the scheduler. Dynamic resource
allocation is an API for requesting and sharing resources between
pods and containers inside a pod. Third-party resource drivers
are responsible for tracking and allocating resources. Different
kinds of resources support arbitrary parameters for defining
requirements and initialization. Valid values are Enabled, Disabled
and omitted. When omitted, this means no opinion and the platform
is left to choose a reasonable default, which is subject to
change over time. The current default is Disabled.
enum:
- ""
- Enabled
- Disabled
type: string
type: object
type: object
status:
description: status holds observed values from the cluster. They may not
be overridden.
type: object
required:
- spec
type: object
served: true
storage: true
subresources:
status: {}
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,9 @@ spec:
- message: TechPreviewNoUpgrade may not be changed
rule: 'oldSelf == ''TechPreviewNoUpgrade'' ? self == ''TechPreviewNoUpgrade''
: true'
- message: DevPreviewNoUpgrade may not be changed
rule: 'oldSelf == ''DevPreviewNoUpgrade'' ? self == ''DevPreviewNoUpgrade''
: true'
type: object
status:
description: status holds observed values from the cluster. They may not
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.openshift.io: https://github.com/openshift/api/pull/1482
api.openshift.io/merged-by-featuregates: "true"
include.release.openshift.io/ibm-cloud-managed: "true"
include.release.openshift.io/self-managed-high-availability: "true"
release.openshift.io/feature-set: DevPreviewNoUpgrade
name: backups.config.openshift.io
spec:
group: config.openshift.io
names:
kind: Backup
listKind: BackupList
plural: backups
singular: backup
scope: Cluster
versions:
- name: v1alpha1
schema:
openAPIV3Schema:
description: "Backup provides configuration for performing backups of the
openshift cluster. \n Compatibility level 4: No compatibility is provided,
the API can change at any point for any reason. These capabilities should
not be used by applications needing long term support."
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: spec holds user settable values for configuration
properties:
etcd:
description: etcd specifies the configuration for periodic backups
of the etcd cluster
properties:
pvcName:
description: PVCName specifies the name of the PersistentVolumeClaim
(PVC) which binds a PersistentVolume where the etcd backup files
would be saved The PVC itself must always be created in the
"openshift-etcd" namespace If the PVC is left unspecified ""
then the platform will choose a reasonable default location
to save the backup. In the future this would be backups saved
across the control-plane master nodes.
type: string
retentionPolicy:
description: RetentionPolicy defines the retention policy for
retaining and deleting existing backups.
properties:
retentionNumber:
description: RetentionNumber configures the retention policy
based on the number of backups
properties:
maxNumberOfBackups:
description: MaxNumberOfBackups defines the maximum number
of backups to retain. If the existing number of backups
saved is equal to MaxNumberOfBackups then the oldest
backup will be removed before a new backup is initiated.
minimum: 1
type: integer
required:
- maxNumberOfBackups
type: object
retentionSize:
description: RetentionSize configures the retention policy
based on the size of backups
properties:
maxSizeOfBackupsGb:
description: MaxSizeOfBackupsGb defines the total size
in GB of backups to retain. If the current total size
backups exceeds MaxSizeOfBackupsGb then the oldest backup
will be removed before a new backup is initiated.
minimum: 1
type: integer
required:
- maxSizeOfBackupsGb
type: object
retentionType:
allOf:
- enum:
- RetentionNumber
- RetentionSize
- enum:
- ""
- RetentionNumber
- RetentionSize
description: RetentionType sets the type of retention policy.
Currently, the only valid policies are retention by number
of backups (RetentionNumber), by the size of backups (RetentionSize).
More policies or types may be added in the future. Empty
string means no opinion and the platform is left to choose
a reasonable default which is subject to change without
notice. The current default is RetentionNumber with 15 backups
kept.
type: string
required:
- retentionType
type: object
schedule:
description: 'Schedule defines the recurring backup schedule in
Cron format every 2 hours: 0 */2 * * * every day at 3am: 0 3
* * * Empty string means no opinion and the platform is left
to choose a reasonable default which is subject to change without
notice. The current default is "no backups", but will change
in the future.'
pattern: ^(@(annually|yearly|monthly|weekly|daily|hourly))|(\*|(?:\*|(?:[0-9]|(?:[1-5][0-9])))\/(?:[0-9]|(?:[1-5][0-9]))|(?:[0-9]|(?:[1-5][0-9]))(?:(?:\-[0-9]|\-(?:[1-5][0-9]))?|(?:\,(?:[0-9]|(?:[1-5][0-9])))*))
(\*|(?:\*|(?:\*|(?:[0-9]|1[0-9]|2[0-3])))\/(?:[0-9]|1[0-9]|2[0-3])|(?:[0-9]|1[0-9]|2[0-3])(?:(?:\-(?:[0-9]|1[0-9]|2[0-3]))?|(?:\,(?:[0-9]|1[0-9]|2[0-3]))*))
(\*|(?:[1-9]|(?:[12][0-9])|3[01])(?:(?:\-(?:[1-9]|(?:[12][0-9])|3[01]))?|(?:\,(?:[1-9]|(?:[12][0-9])|3[01]))*))
(\*|(?:[1-9]|1[012]|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)(?:(?:\-(?:[1-9]|1[012]|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))?|(?:\,(?:[1-9]|1[012]|JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC))*))
(\*|(?:[0-6]|SUN|MON|TUE|WED|THU|FRI|SAT)(?:(?:\-(?:[0-6]|SUN|MON|TUE|WED|THU|FRI|SAT))?|(?:\,(?:[0-6]|SUN|MON|TUE|WED|THU|FRI|SAT))*))$
type: string
timeZone:
description: The time zone name for the given schedule, see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
If not specified, this will default to the time zone of the
kube-controller-manager process. See https://kubernetes.io/docs/concepts/workloads/controllers/cron-jobs/#time-zones
pattern: ^([A-Za-z_]+([+-]*0)*|[A-Za-z_]+(\/[A-Za-z_]+){1,2})(\/GMT[+-]\d{1,2})?$
type: string
type: object
required:
- etcd
type: object
status:
description: status holds observed values from the cluster. They may not
be overridden.
type: object
required:
- spec
type: object
served: true
storage: true
subresources:
status: {}
Loading