Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ tests:
kind: FeatureGate
spec:
featureSet: bar
expectedError: "spec.featureSet: Unsupported value: \"bar\": supported values: \"CustomNoUpgrade\", \"DevPreviewNoUpgrade\", \"TechPreviewNoUpgrade\", \"\""
expectedError: "spec.featureSet: Unsupported value: \"bar\": supported values: \"CustomNoUpgrade\", \"DevPreviewNoUpgrade\", \"TechPreviewNoUpgrade\", \"OKD\", \"\""
onUpdate:
- name: Default to TechPreview
initial: |
Expand Down Expand Up @@ -121,4 +121,4 @@ tests:
kind: FeatureGate
spec:
featureSet: "bar"
expectedError: "spec.featureSet: Unsupported value: \"bar\": supported values: \"CustomNoUpgrade\", \"DevPreviewNoUpgrade\", \"TechPreviewNoUpgrade\", \"\""
expectedError: "spec.featureSet: Unsupported value: \"bar\": supported values: \"CustomNoUpgrade\", \"DevPreviewNoUpgrade\", \"TechPreviewNoUpgrade\", \"OKD\", \"\""
9 changes: 7 additions & 2 deletions config/v1/types_feature.go
Original file line number Diff line number Diff line change
Expand Up @@ -53,8 +53,12 @@ var (
// your cluster may fail in an unrecoverable way.
CustomNoUpgrade FeatureSet = "CustomNoUpgrade"

// OKD turns on features for OKD. Turning this feature set ON is supported for OKD clusters, but NOT for OpenShift clusters.
// Once enabled, this feature set cannot be changed back to Default, but can be changed to other feature sets and it allows upgrades.
OKD FeatureSet = "OKD"

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

type FeatureGateSpec struct {
Expand All @@ -67,10 +71,11 @@ type FeatureGateSelection struct {
// Turning on or off features may cause irreversible changes in your cluster which cannot be undone.
// +unionDiscriminator
// +optional
// +kubebuilder:validation:Enum=CustomNoUpgrade;DevPreviewNoUpgrade;TechPreviewNoUpgrade;""
// +kubebuilder:validation:Enum=CustomNoUpgrade;DevPreviewNoUpgrade;TechPreviewNoUpgrade;OKD;""
// +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"
// +kubebuilder:validation:XValidation:rule="oldSelf == 'OKD' ? self != '' : true",message="OKD cannot transition to Default"
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.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ spec:
- CustomNoUpgrade
- DevPreviewNoUpgrade
- TechPreviewNoUpgrade
- OKD
- ""
type: string
x-kubernetes-validations:
Expand All @@ -91,6 +92,8 @@ spec:
- message: DevPreviewNoUpgrade may not be changed
rule: 'oldSelf == ''DevPreviewNoUpgrade'' ? self == ''DevPreviewNoUpgrade''
: true'
- message: OKD cannot transition to Default
rule: 'oldSelf == ''OKD'' ? self != '''' : true'
type: object
x-kubernetes-validations:
- message: .spec.featureSet cannot be removed
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,136 @@
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
annotations:
api-approved.openshift.io: https://github.com/openshift/api/pull/1107
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/bootstrap-required: "true"
release.openshift.io/feature-set: OKD
name: nodes.config.openshift.io
spec:
group: config.openshift.io
names:
kind: Node
listKind: NodeList
plural: nodes
singular: node
scope: Cluster
versions:
- name: v1
schema:
openAPIV3Schema:
description: |-
Node holds cluster-wide information about node specific features.
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:
cgroupMode:
description: cgroupMode determines the cgroups version on the node
enum:
- v2
- ""
type: string
workerLatencyProfile:
description: |-
workerLatencyProfile determins the how fast the kubelet is updating
the status and corresponding reaction of the cluster
enum:
- Default
- MediumUpdateAverageReaction
- LowUpdateSlowReaction
type: string
type: object
status:
description: status holds observed values.
properties:
conditions:
description: conditions contain the details and the current state
of the nodes.config object
items:
description: Condition contains details for one aspect of the current
state of this API Resource.
properties:
lastTransitionTime:
description: |-
lastTransitionTime is the last time the condition transitioned from one status to another.
This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable.
format: date-time
type: string
message:
description: |-
message is a human readable message indicating details about the transition.
This may be an empty string.
maxLength: 32768
type: string
observedGeneration:
description: |-
observedGeneration represents the .metadata.generation that the condition was set based upon.
For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date
with respect to the current state of the instance.
format: int64
minimum: 0
type: integer
reason:
description: |-
reason contains a programmatic identifier indicating the reason for the condition's last transition.
Producers of specific condition types may define expected values and meanings for this field,
and whether the values are considered a guaranteed API.
The value should be a CamelCase string.
This field may not be empty.
maxLength: 1024
minLength: 1
pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$
type: string
status:
description: status of the condition, one of True, False, Unknown.
enum:
- "True"
- "False"
- Unknown
type: string
type:
description: type of condition in CamelCase or in foo.example.com/CamelCase.
maxLength: 316
pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$
type: string
required:
- lastTransitionTime
- message
- reason
- status
- type
type: object
type: array
x-kubernetes-list-map-keys:
- type
x-kubernetes-list-type: map
type: object
required:
- spec
type: object
served: true
storage: true
subresources:
status: {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
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/self-managed-high-availability: "true"
release.openshift.io/bootstrap-required: "true"
release.openshift.io/feature-set: OKD
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`.

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.

Valid values are "LowNodeUtilization", "HighNodeUtilization", "NoScoring"
Defaults to "LowNodeUtilization"
enum:
- ""
- LowNodeUtilization
- HighNodeUtilization
- NoScoring
type: string
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 @@ -80,6 +80,7 @@ spec:
- CustomNoUpgrade
- DevPreviewNoUpgrade
- TechPreviewNoUpgrade
- OKD
- ""
type: string
x-kubernetes-validations:
Expand All @@ -92,6 +93,8 @@ spec:
- message: DevPreviewNoUpgrade may not be changed
rule: 'oldSelf == ''DevPreviewNoUpgrade'' ? self == ''DevPreviewNoUpgrade''
: true'
- message: OKD cannot transition to Default
rule: 'oldSelf == ''OKD'' ? self != '''' : true'
type: object
x-kubernetes-validations:
- message: .spec.featureSet cannot be removed
Expand Down
Loading