diff --git a/features.md b/features.md
index afa64782571..716346a66a1 100644
--- a/features.md
+++ b/features.md
@@ -83,7 +83,6 @@
| AdminNetworkPolicy| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| AzureWorkloadIdentity| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| BuildCSIVolumes| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
-| CPMSMachineNamePrefix| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| ConsolePluginContentSecurityPolicy| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| ExternalOIDC| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
| ExternalOIDCWithUIDAndExtraClaimMappings| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | Enabled |
diff --git a/features/features.go b/features/features.go
index 187edb0e164..0da98b1adc5 100644
--- a/features/features.go
+++ b/features/features.go
@@ -155,14 +155,6 @@ var (
enableIn(configv1.Default, configv1.OKD, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade).
mustRegister()
- FeatureGateCPMSMachineNamePrefix = newFeatureGate("CPMSMachineNamePrefix").
- reportProblemsToJiraComponent("Cloud Compute / ControlPlaneMachineSet").
- contactPerson("chiragkyal").
- productScope(ocpSpecific).
- enhancementPR("https://github.com/openshift/enhancements/pull/1714").
- enableIn(configv1.Default, configv1.OKD, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade).
- mustRegister()
-
FeatureGateAdminNetworkPolicy = newFeatureGate("AdminNetworkPolicy").
reportProblemsToJiraComponent("Networking/ovn-kubernetes").
contactPerson("tssurya").
diff --git a/machine/v1/tests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml b/machine/v1/tests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml
index 11ff2bec4d4..54776d441ff 100644
--- a/machine/v1/tests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml
+++ b/machine/v1/tests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml
@@ -91,6 +91,112 @@ tests:
machine.openshift.io/cluster-api-cluster: cluster
spec:
providerSpec: {}
+ - name: Should be able to create ControlPlaneMachineSet with machineNamePrefix
+ initial: |
+ apiVersion: machine.openshift.io/v1
+ kind: ControlPlaneMachineSet
+ spec:
+ machineNamePrefix: machine-prefix
+ selector:
+ matchLabels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ template:
+ machineType: machines_v1beta1_machine_openshift_io
+ machines_v1beta1_machine_openshift_io:
+ metadata:
+ labels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ machine.openshift.io/cluster-api-cluster: cluster
+ spec:
+ providerSpec: {}
+ expected: |
+ apiVersion: machine.openshift.io/v1
+ kind: ControlPlaneMachineSet
+ spec:
+ machineNamePrefix: machine-prefix
+ replicas: 3
+ state: Inactive
+ strategy:
+ type: RollingUpdate
+ selector:
+ matchLabels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ template:
+ machineType: machines_v1beta1_machine_openshift_io
+ machines_v1beta1_machine_openshift_io:
+ metadata:
+ labels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ machine.openshift.io/cluster-api-cluster: cluster
+ spec:
+ providerSpec: {}
+ - name: Should reject to create ControlPlaneMachineSet with empty machineNamePrefix
+ initial: |
+ apiVersion: machine.openshift.io/v1
+ kind: ControlPlaneMachineSet
+ spec:
+ machineNamePrefix: ""
+ selector:
+ matchLabels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ template:
+ machineType: machines_v1beta1_machine_openshift_io
+ machines_v1beta1_machine_openshift_io:
+ metadata:
+ labels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ machine.openshift.io/cluster-api-cluster: cluster
+ spec:
+ providerSpec: {}
+ expectedError: 'Invalid value: "": spec.machineNamePrefix in body should be at least 1 chars long'
+ - name: Should reject to create ControlPlaneMachineSet with invalid machineNamePrefix
+ initial: |
+ apiVersion: machine.openshift.io/v1
+ kind: ControlPlaneMachineSet
+ spec:
+ machineNamePrefix: "inv@lid-"
+ selector:
+ matchLabels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ template:
+ machineType: machines_v1beta1_machine_openshift_io
+ machines_v1beta1_machine_openshift_io:
+ metadata:
+ labels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ machine.openshift.io/cluster-api-cluster: cluster
+ spec:
+ providerSpec: {}
+ expectedError: 'Invalid value: "string": a lowercase RFC 1123 subdomain must consist of lowercase alphanumeric characters, hyphens (''-''), and periods (''.''). Each block, separated by periods, must start and end with an alphanumeric character. Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted.'
+ - name: Should reject to create ControlPlaneMachineSet with invalid machineNamePrefix - Consecutive periods are not permitted
+ initial: |
+ apiVersion: machine.openshift.io/v1
+ kind: ControlPlaneMachineSet
+ spec:
+ machineNamePrefix: "control..plane"
+ selector:
+ matchLabels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ template:
+ machineType: machines_v1beta1_machine_openshift_io
+ machines_v1beta1_machine_openshift_io:
+ metadata:
+ labels:
+ machine.openshift.io/cluster-api-machine-role: master
+ machine.openshift.io/cluster-api-machine-type: master
+ machine.openshift.io/cluster-api-cluster: cluster
+ spec:
+ providerSpec: {}
+ expectedError: 'Invalid value: "string": a lowercase RFC 1123 subdomain must consist of lowercase alphanumeric characters, hyphens (''-''), and periods (''.''). Each block, separated by periods, must start and end with an alphanumeric character. Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted.'
- name: Should reject a missing machineType
initial: |
apiVersion: machine.openshift.io/v1
diff --git a/machine/v1/tests/controlplanemachinesets.machine.openshift.io/CPMSMachineNamePrefix.yaml b/machine/v1/tests/controlplanemachinesets.machine.openshift.io/CPMSMachineNamePrefix.yaml
deleted file mode 100644
index 48602b50418..00000000000
--- a/machine/v1/tests/controlplanemachinesets.machine.openshift.io/CPMSMachineNamePrefix.yaml
+++ /dev/null
@@ -1,162 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this
-name: "ControlPlaneMachineSet (+CPMSMachineNamePrefix +MachineAPIMigration)"
-crdName: controlplanemachinesets.machine.openshift.io
-featureGates:
- - CPMSMachineNamePrefix
- - MachineAPIMigration
-tests:
- onCreate:
- - name: Should be able to create a minimal ControlPlaneMachineSet
- initial: |
- apiVersion: machine.openshift.io/v1
- kind: ControlPlaneMachineSet
- spec:
- selector:
- matchLabels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- template:
- machineType: machines_v1beta1_machine_openshift_io
- machines_v1beta1_machine_openshift_io:
- metadata:
- labels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- machine.openshift.io/cluster-api-cluster: cluster
- spec:
- authoritativeAPI: MachineAPI
- providerSpec: {}
- expected: |
- apiVersion: machine.openshift.io/v1
- kind: ControlPlaneMachineSet
- spec:
- replicas: 3
- state: Inactive
- strategy:
- type: RollingUpdate
- selector:
- matchLabels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- template:
- machineType: machines_v1beta1_machine_openshift_io
- machines_v1beta1_machine_openshift_io:
- metadata:
- labels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- machine.openshift.io/cluster-api-cluster: cluster
- spec:
- authoritativeAPI: MachineAPI
- providerSpec: {}
- - name: Should be able to create ControlPlaneMachineSet with machineNamePrefix
- initial: |
- apiVersion: machine.openshift.io/v1
- kind: ControlPlaneMachineSet
- spec:
- machineNamePrefix: machine-prefix
- selector:
- matchLabels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- template:
- machineType: machines_v1beta1_machine_openshift_io
- machines_v1beta1_machine_openshift_io:
- metadata:
- labels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- machine.openshift.io/cluster-api-cluster: cluster
- spec:
- authoritativeAPI: MachineAPI
- providerSpec: {}
- expected: |
- apiVersion: machine.openshift.io/v1
- kind: ControlPlaneMachineSet
- spec:
- machineNamePrefix: machine-prefix
- replicas: 3
- state: Inactive
- strategy:
- type: RollingUpdate
- selector:
- matchLabels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- template:
- machineType: machines_v1beta1_machine_openshift_io
- machines_v1beta1_machine_openshift_io:
- metadata:
- labels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- machine.openshift.io/cluster-api-cluster: cluster
- spec:
- authoritativeAPI: MachineAPI
- providerSpec: {}
- - name: Should reject to create ControlPlaneMachineSet with empty machineNamePrefix
- initial: |
- apiVersion: machine.openshift.io/v1
- kind: ControlPlaneMachineSet
- spec:
- machineNamePrefix: ""
- selector:
- matchLabels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- template:
- machineType: machines_v1beta1_machine_openshift_io
- machines_v1beta1_machine_openshift_io:
- metadata:
- labels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- machine.openshift.io/cluster-api-cluster: cluster
- spec:
- authoritativeAPI: MachineAPI
- providerSpec: {}
- expectedError: 'Invalid value: "": spec.machineNamePrefix in body should be at least 1 chars long'
- - name: Should reject to create ControlPlaneMachineSet with invalid machineNamePrefix
- initial: |
- apiVersion: machine.openshift.io/v1
- kind: ControlPlaneMachineSet
- spec:
- machineNamePrefix: "inv@lid-"
- selector:
- matchLabels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- template:
- machineType: machines_v1beta1_machine_openshift_io
- machines_v1beta1_machine_openshift_io:
- metadata:
- labels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- machine.openshift.io/cluster-api-cluster: cluster
- spec:
- authoritativeAPI: MachineAPI
- providerSpec: {}
- expectedError: 'Invalid value: "string": a lowercase RFC 1123 subdomain must consist of lowercase alphanumeric characters, hyphens (''-''), and periods (''.''). Each block, separated by periods, must start and end with an alphanumeric character. Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted.'
- - name: Should reject to create ControlPlaneMachineSet with invalid machineNamePrefix - Consecutive periods are not permitted
- initial: |
- apiVersion: machine.openshift.io/v1
- kind: ControlPlaneMachineSet
- spec:
- machineNamePrefix: "control..plane"
- selector:
- matchLabels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- template:
- machineType: machines_v1beta1_machine_openshift_io
- machines_v1beta1_machine_openshift_io:
- metadata:
- labels:
- machine.openshift.io/cluster-api-machine-role: master
- machine.openshift.io/cluster-api-machine-type: master
- machine.openshift.io/cluster-api-cluster: cluster
- spec:
- authoritativeAPI: MachineAPI
- providerSpec: {}
- expectedError: 'Invalid value: "string": a lowercase RFC 1123 subdomain must consist of lowercase alphanumeric characters, hyphens (''-''), and periods (''.''). Each block, separated by periods, must start and end with an alphanumeric character. Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted.'
diff --git a/machine/v1/types_controlplanemachineset.go b/machine/v1/types_controlplanemachineset.go
index d7661cf3893..25ffc9f46d5 100644
--- a/machine/v1/types_controlplanemachineset.go
+++ b/machine/v1/types_controlplanemachineset.go
@@ -53,10 +53,9 @@ type ControlPlaneMachineSetSpec struct {
// For example, if machineNamePrefix is set to 'control-plane',
// and three machines are created, their names might be:
// control-plane-abcde-0, control-plane-fghij-1, control-plane-klmno-2
- // +openshift:validation:FeatureGateAwareXValidation:featureGate=CPMSMachineNamePrefix,rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lowercase alphanumeric characters, hyphens ('-'), and periods ('.'). Each block, separated by periods, must start and end with an alphanumeric character. Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted."
+ // +kubebuilder:validation:XValidation:rule="!format.dns1123Subdomain().validate(self).hasValue()",message="a lowercase RFC 1123 subdomain must consist of lowercase alphanumeric characters, hyphens ('-'), and periods ('.'). Each block, separated by periods, must start and end with an alphanumeric character. Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted."
// +kubebuilder:validation:MinLength=1
// +kubebuilder:validation:MaxLength=245
- // +openshift:enable:FeatureGate=CPMSMachineNamePrefix
// +optional
MachineNamePrefix string `json:"machineNamePrefix,omitempty"`
diff --git a/machine/v1/zz_generated.featuregated-crd-manifests.yaml b/machine/v1/zz_generated.featuregated-crd-manifests.yaml
index 7be04ec8443..b001170fafe 100644
--- a/machine/v1/zz_generated.featuregated-crd-manifests.yaml
+++ b/machine/v1/zz_generated.featuregated-crd-manifests.yaml
@@ -7,7 +7,6 @@ controlplanemachinesets.machine.openshift.io:
Capability: MachineAPI
Category: ""
FeatureGates:
- - CPMSMachineNamePrefix
- MachineAPIMigration
FilenameOperatorName: control-plane-machine-set
FilenameOperatorOrdering: "01"
diff --git a/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml b/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml
index ad497744810..c8fcc81036b 100644
--- a/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml
+++ b/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/AAA_ungated.yaml
@@ -77,6 +77,29 @@ spec:
description: ControlPlaneMachineSet represents the configuration of the
ControlPlaneMachineSet.
properties:
+ machineNamePrefix:
+ description: |-
+ machineNamePrefix is the prefix used when creating machine names.
+ Each machine name will consist of this prefix, followed by
+ a randomly generated string of 5 characters, and the index of the machine.
+ It must be a lowercase RFC 1123 subdomain, consisting of lowercase
+ alphanumeric characters, hyphens ('-'), and periods ('.').
+ Each block, separated by periods, must start and end with an alphanumeric character.
+ Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted.
+ The prefix must be between 1 and 245 characters in length.
+ For example, if machineNamePrefix is set to 'control-plane',
+ and three machines are created, their names might be:
+ control-plane-abcde-0, control-plane-fghij-1, control-plane-klmno-2
+ maxLength: 245
+ minLength: 1
+ type: string
+ x-kubernetes-validations:
+ - message: a lowercase RFC 1123 subdomain must consist of lowercase
+ alphanumeric characters, hyphens ('-'), and periods ('.'). Each
+ block, separated by periods, must start and end with an alphanumeric
+ character. Hyphens are not allowed at the start or end of a block,
+ and consecutive periods are not permitted.
+ rule: '!format.dns1123Subdomain().validate(self).hasValue()'
replicas:
default: 3
description: |-
diff --git a/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/CPMSMachineNamePrefix.yaml b/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/CPMSMachineNamePrefix.yaml
deleted file mode 100644
index e691be635ef..00000000000
--- a/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/CPMSMachineNamePrefix.yaml
+++ /dev/null
@@ -1,952 +0,0 @@
-apiVersion: apiextensions.k8s.io/v1
-kind: CustomResourceDefinition
-metadata:
- annotations:
- api-approved.openshift.io: https://github.com/openshift/api/pull/1112
- api.openshift.io/filename-cvo-runlevel: "0000_10"
- api.openshift.io/filename-operator: control-plane-machine-set
- api.openshift.io/filename-ordering: "01"
- capability.openshift.io/name: MachineAPI
- exclude.release.openshift.io/internal-openshift-hosted: "true"
- feature-gate.release.openshift.io/CPMSMachineNamePrefix: "true"
- include.release.openshift.io/self-managed-high-availability: "true"
- name: controlplanemachinesets.machine.openshift.io
-spec:
- group: machine.openshift.io
- names:
- kind: ControlPlaneMachineSet
- listKind: ControlPlaneMachineSetList
- plural: controlplanemachinesets
- singular: controlplanemachineset
- scope: Namespaced
- versions:
- - additionalPrinterColumns:
- - description: Desired Replicas
- jsonPath: .spec.replicas
- name: Desired
- type: integer
- - description: Current Replicas
- jsonPath: .status.replicas
- name: Current
- type: integer
- - description: Ready Replicas
- jsonPath: .status.readyReplicas
- name: Ready
- type: integer
- - description: Updated Replicas
- jsonPath: .status.updatedReplicas
- name: Updated
- type: integer
- - description: Observed number of unavailable replicas
- jsonPath: .status.unavailableReplicas
- name: Unavailable
- type: integer
- - description: ControlPlaneMachineSet state
- jsonPath: .spec.state
- name: State
- type: string
- - description: ControlPlaneMachineSet age
- jsonPath: .metadata.creationTimestamp
- name: Age
- type: date
- name: v1
- schema:
- openAPIV3Schema:
- description: |-
- ControlPlaneMachineSet ensures that a specified number of control plane machine replicas are running at any given time.
- 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: ControlPlaneMachineSet represents the configuration of the
- ControlPlaneMachineSet.
- properties:
- machineNamePrefix:
- description: |-
- machineNamePrefix is the prefix used when creating machine names.
- Each machine name will consist of this prefix, followed by
- a randomly generated string of 5 characters, and the index of the machine.
- It must be a lowercase RFC 1123 subdomain, consisting of lowercase
- alphanumeric characters, hyphens ('-'), and periods ('.').
- Each block, separated by periods, must start and end with an alphanumeric character.
- Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted.
- The prefix must be between 1 and 245 characters in length.
- For example, if machineNamePrefix is set to 'control-plane',
- and three machines are created, their names might be:
- control-plane-abcde-0, control-plane-fghij-1, control-plane-klmno-2
- maxLength: 245
- minLength: 1
- type: string
- x-kubernetes-validations:
- - message: a lowercase RFC 1123 subdomain must consist of lowercase
- alphanumeric characters, hyphens ('-'), and periods ('.'). Each
- block, separated by periods, must start and end with an alphanumeric
- character. Hyphens are not allowed at the start or end of a block,
- and consecutive periods are not permitted.
- rule: '!format.dns1123Subdomain().validate(self).hasValue()'
- replicas:
- default: 3
- description: |-
- replicas defines how many Control Plane Machines should be
- created by this ControlPlaneMachineSet.
- This field is immutable and cannot be changed after cluster
- installation.
- The ControlPlaneMachineSet only operates with 3 or 5 node control planes,
- 3 and 5 are the only valid values for this field.
- enum:
- - 3
- - 5
- format: int32
- type: integer
- x-kubernetes-validations:
- - message: replicas is immutable
- rule: self == oldSelf
- selector:
- description: |-
- Label selector for Machines. Existing Machines selected by this
- selector will be the ones affected by this ControlPlaneMachineSet.
- It must match the template's labels.
- This field is considered immutable after creation of the resource.
- 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
- x-kubernetes-validations:
- - message: selector is immutable
- rule: self == oldSelf
- state:
- default: Inactive
- description: |-
- state defines whether the ControlPlaneMachineSet is Active or Inactive.
- When Inactive, the ControlPlaneMachineSet will not take any action on the
- state of the Machines within the cluster.
- When Active, the ControlPlaneMachineSet will reconcile the Machines and
- will update the Machines as necessary.
- Once Active, a ControlPlaneMachineSet cannot be made Inactive. To prevent
- further action please remove the ControlPlaneMachineSet.
- enum:
- - Active
- - Inactive
- type: string
- x-kubernetes-validations:
- - message: state cannot be changed once Active
- rule: oldSelf != 'Active' || self == oldSelf
- strategy:
- default:
- type: RollingUpdate
- description: |-
- strategy defines how the ControlPlaneMachineSet will update
- Machines when it detects a change to the ProviderSpec.
- properties:
- type:
- default: RollingUpdate
- description: |-
- type defines the type of update strategy that should be
- used when updating Machines owned by the ControlPlaneMachineSet.
- Valid values are "RollingUpdate" and "OnDelete".
- The current default value is "RollingUpdate".
- enum:
- - RollingUpdate
- - OnDelete
- type: string
- type: object
- template:
- description: |-
- template describes the Control Plane Machines that will be created
- by this ControlPlaneMachineSet.
- properties:
- machineType:
- description: |-
- machineType determines the type of Machines that should be managed by the ControlPlaneMachineSet.
- Currently, the only valid value is machines_v1beta1_machine_openshift_io.
- enum:
- - machines_v1beta1_machine_openshift_io
- type: string
- machines_v1beta1_machine_openshift_io:
- description: |-
- OpenShiftMachineV1Beta1Machine defines the template for creating Machines
- from the v1beta1.machine.openshift.io API group.
- properties:
- failureDomains:
- description: |-
- failureDomains is the list of failure domains (sometimes called
- availability zones) in which the ControlPlaneMachineSet should balance
- the Control Plane Machines.
- This will be merged into the ProviderSpec given in the template.
- This field is optional on platforms that do not require placement information.
- properties:
- aws:
- description: aws configures failure domain information
- for the AWS platform.
- items:
- description: AWSFailureDomain configures failure domain
- information for the AWS platform.
- minProperties: 1
- properties:
- placement:
- description: placement configures the placement
- information for this instance.
- properties:
- availabilityZone:
- description: availabilityZone is the availability
- zone of the instance.
- type: string
- required:
- - availabilityZone
- type: object
- subnet:
- description: subnet is a reference to the subnet
- to use for this instance.
- properties:
- arn:
- description: arn of resource.
- type: string
- filters:
- description: filters is a set of filters used
- to identify a resource.
- items:
- description: AWSResourceFilter is a filter
- used to identify an AWS resource
- properties:
- name:
- description: name of the filter. Filter
- names are case-sensitive.
- type: string
- values:
- description: values includes one or more
- filter values. Filter values are case-sensitive.
- items:
- type: string
- type: array
- x-kubernetes-list-type: atomic
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-type: atomic
- id:
- description: id of resource.
- type: string
- type:
- description: type determines how the reference
- will fetch the AWS resource.
- enum:
- - ID
- - ARN
- - Filters
- type: string
- required:
- - type
- type: object
- x-kubernetes-validations:
- - message: id is required when type is ID, and forbidden
- otherwise
- rule: 'has(self.type) && self.type == ''ID'' ? has(self.id)
- : !has(self.id)'
- - message: arn is required when type is ARN, and
- forbidden otherwise
- rule: 'has(self.type) && self.type == ''ARN''
- ? has(self.arn) : !has(self.arn)'
- - message: filters is required when type is Filters,
- and forbidden otherwise
- rule: 'has(self.type) && self.type == ''Filters''
- ? has(self.filters) : !has(self.filters)'
- type: object
- type: array
- x-kubernetes-list-type: atomic
- azure:
- description: azure configures failure domain information
- for the Azure platform.
- items:
- description: AzureFailureDomain configures failure domain
- information for the Azure platform.
- properties:
- subnet:
- description: |-
- subnet is the name of the network subnet in which the VM will be created.
- When omitted, the subnet value from the machine providerSpec template will be used.
- maxLength: 80
- pattern: ^[a-zA-Z0-9](?:[a-zA-Z0-9._-]*[a-zA-Z0-9_])?$
- type: string
- zone:
- description: |-
- Availability Zone for the virtual machine.
- If nil, the virtual machine should be deployed to no zone.
- type: string
- required:
- - zone
- type: object
- type: array
- x-kubernetes-list-type: atomic
- gcp:
- description: gcp configures failure domain information
- for the GCP platform.
- items:
- description: GCPFailureDomain configures failure domain
- information for the GCP platform
- properties:
- zone:
- description: zone is the zone in which the GCP machine
- provider will create the VM.
- type: string
- required:
- - zone
- type: object
- type: array
- x-kubernetes-list-type: atomic
- nutanix:
- description: nutanix configures failure domain information
- for the Nutanix platform.
- items:
- description: NutanixFailureDomainReference refers to
- the failure domain of the Nutanix platform.
- properties:
- name:
- description: |-
- name of the failure domain in which the nutanix machine provider will create the VM.
- Failure domains are defined in a cluster's config.openshift.io/Infrastructure resource.
- maxLength: 64
- minLength: 1
- pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?'
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- openstack:
- description: openstack configures failure domain information
- for the OpenStack platform.
- items:
- description: OpenStackFailureDomain configures failure
- domain information for the OpenStack platform.
- minProperties: 1
- properties:
- availabilityZone:
- description: |-
- availabilityZone is the nova availability zone in which the OpenStack machine provider will create the VM.
- If not specified, the VM will be created in the default availability zone specified in the nova configuration.
- Availability zone names must NOT contain : since it is used by admin users to specify hosts where instances
- are launched in server creation. Also, it must not contain spaces otherwise it will lead to node that belongs
- to this availability zone register failure, see kubernetes/cloud-provider-openstack#1379 for further information.
- The maximum length of availability zone name is 63 as per labels limits.
- maxLength: 63
- minLength: 1
- pattern: '^[^: ]*$'
- type: string
- rootVolume:
- description: |-
- rootVolume contains settings that will be used by the OpenStack machine provider to create the root volume attached to the VM.
- If not specified, no root volume will be created.
- properties:
- availabilityZone:
- description: |-
- availabilityZone specifies the Cinder availability zone where the root volume will be created.
- If not specifified, the root volume will be created in the availability zone specified by the volume type in the cinder configuration.
- If the volume type (configured in the OpenStack cluster) does not specify an availability zone, the root volume will be created in the default availability
- zone specified in the cinder configuration. See https://docs.openstack.org/cinder/latest/admin/availability-zone-type.html for more details.
- If the OpenStack cluster is deployed with the cross_az_attach configuration option set to false, the root volume will have to be in the same
- availability zone as the VM (defined by OpenStackFailureDomain.AvailabilityZone).
- Availability zone names must NOT contain spaces otherwise it will lead to volume that belongs to this availability zone register failure,
- see kubernetes/cloud-provider-openstack#1379 for further information.
- The maximum length of availability zone name is 63 as per labels limits.
- maxLength: 63
- minLength: 1
- pattern: ^[^ ]*$
- type: string
- volumeType:
- description: |-
- volumeType specifies the type of the root volume that will be provisioned.
- The maximum length of a volume type name is 255 characters, as per the OpenStack limit.
- maxLength: 255
- minLength: 1
- type: string
- required:
- - volumeType
- type: object
- type: object
- x-kubernetes-validations:
- - message: rootVolume.availabilityZone is required when
- availabilityZone is set
- rule: '!has(self.availabilityZone) || !has(self.rootVolume)
- || has(self.rootVolume.availabilityZone)'
- type: array
- x-kubernetes-list-type: atomic
- platform:
- description: |-
- platform identifies the platform for which the FailureDomain represents.
- Currently supported values are AWS, Azure, GCP, OpenStack, VSphere and Nutanix.
- enum:
- - ""
- - AWS
- - Azure
- - BareMetal
- - GCP
- - Libvirt
- - OpenStack
- - None
- - VSphere
- - oVirt
- - IBMCloud
- - KubeVirt
- - EquinixMetal
- - PowerVS
- - AlibabaCloud
- - Nutanix
- - External
- type: string
- vsphere:
- description: vsphere configures failure domain information
- for the VSphere platform.
- items:
- description: VSphereFailureDomain configures failure
- domain information for the vSphere platform
- properties:
- name:
- description: |-
- name of the failure domain in which the vSphere machine provider will create the VM.
- Failure domains are defined in a cluster's config.openshift.io/Infrastructure resource.
- When balancing machines across failure domains, the control plane machine set will inject configuration from the
- Infrastructure resource into the machine providerSpec to allocate the machine to a failure domain.
- type: string
- required:
- - name
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- required:
- - platform
- type: object
- x-kubernetes-validations:
- - message: aws configuration is required when platform is
- AWS, and forbidden otherwise
- rule: 'has(self.platform) && self.platform == ''AWS'' ? has(self.aws)
- : !has(self.aws)'
- - message: azure configuration is required when platform is
- Azure, and forbidden otherwise
- rule: 'has(self.platform) && self.platform == ''Azure''
- ? has(self.azure) : !has(self.azure)'
- - message: gcp configuration is required when platform is
- GCP, and forbidden otherwise
- rule: 'has(self.platform) && self.platform == ''GCP'' ? has(self.gcp)
- : !has(self.gcp)'
- - message: openstack configuration is required when platform
- is OpenStack, and forbidden otherwise
- rule: 'has(self.platform) && self.platform == ''OpenStack''
- ? has(self.openstack) : !has(self.openstack)'
- - message: vsphere configuration is required when platform
- is VSphere, and forbidden otherwise
- rule: 'has(self.platform) && self.platform == ''VSphere''
- ? has(self.vsphere) : !has(self.vsphere)'
- - message: nutanix configuration is required when platform
- is Nutanix, and forbidden otherwise
- rule: 'has(self.platform) && self.platform == ''Nutanix''
- ? has(self.nutanix) : !has(self.nutanix)'
- metadata:
- description: |-
- ObjectMeta is the standard object metadata
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata
- Labels are required to match the ControlPlaneMachineSet selector.
- properties:
- annotations:
- additionalProperties:
- type: string
- description: |-
- annotations is an unstructured key value map stored with a resource that may be
- set by external tools to store and retrieve arbitrary metadata. They are not
- queryable and should be preserved when modifying objects.
- More info: http://kubernetes.io/docs/user-guide/annotations
- type: object
- labels:
- additionalProperties:
- type: string
- description: |-
- Map of string keys and values that can be used to organize and categorize
- (scope and select) objects. May match selectors of replication controllers
- and services.
- More info: http://kubernetes.io/docs/user-guide/labels.
- This field must contain both the 'machine.openshift.io/cluster-api-machine-role' and 'machine.openshift.io/cluster-api-machine-type' labels, both with a value of 'master'.
- It must also contain a label with the key 'machine.openshift.io/cluster-api-cluster'.
- type: object
- x-kubernetes-validations:
- - message: label 'machine.openshift.io/cluster-api-machine-role'
- is required, and must have value 'master'
- rule: '''machine.openshift.io/cluster-api-machine-role''
- in self && self[''machine.openshift.io/cluster-api-machine-role'']
- == ''master'''
- - message: label 'machine.openshift.io/cluster-api-machine-type'
- is required, and must have value 'master'
- rule: '''machine.openshift.io/cluster-api-machine-type''
- in self && self[''machine.openshift.io/cluster-api-machine-type'']
- == ''master'''
- - message: label 'machine.openshift.io/cluster-api-cluster'
- is required
- rule: '''machine.openshift.io/cluster-api-cluster''
- in self'
- required:
- - labels
- type: object
- spec:
- description: |-
- spec contains the desired configuration of the Control Plane Machines.
- The ProviderSpec within contains platform specific details
- for creating the Control Plane Machines.
- The ProviderSe should be complete apart from the platform specific
- failure domain field. This will be overridden when the Machines
- are created based on the FailureDomains field.
- properties:
- lifecycleHooks:
- description: |-
- lifecycleHooks allow users to pause operations on the machine at
- certain predefined points within the machine lifecycle.
- properties:
- preDrain:
- description: |-
- preDrain hooks prevent the machine from being drained.
- This also blocks further lifecycle events, such as termination.
- items:
- description: LifecycleHook represents a single instance
- of a lifecycle hook
- properties:
- name:
- description: |-
- name defines a unique name for the lifcycle hook.
- The name should be unique and descriptive, ideally 1-3 words, in CamelCase or
- it may be namespaced, eg. foo.example.com/CamelCase.
- Names must be unique and should only be managed by a single entity.
- maxLength: 256
- minLength: 3
- 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
- owner:
- description: |-
- owner defines the owner of the lifecycle hook.
- This should be descriptive enough so that users can identify
- who/what is responsible for blocking the lifecycle.
- This could be the name of a controller (e.g. clusteroperator/etcd)
- or an administrator managing the hook.
- maxLength: 512
- minLength: 3
- type: string
- required:
- - name
- - owner
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- preTerminate:
- description: |-
- preTerminate hooks prevent the machine from being terminated.
- PreTerminate hooks be actioned after the Machine has been drained.
- items:
- description: LifecycleHook represents a single instance
- of a lifecycle hook
- properties:
- name:
- description: |-
- name defines a unique name for the lifcycle hook.
- The name should be unique and descriptive, ideally 1-3 words, in CamelCase or
- it may be namespaced, eg. foo.example.com/CamelCase.
- Names must be unique and should only be managed by a single entity.
- maxLength: 256
- minLength: 3
- 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
- owner:
- description: |-
- owner defines the owner of the lifecycle hook.
- This should be descriptive enough so that users can identify
- who/what is responsible for blocking the lifecycle.
- This could be the name of a controller (e.g. clusteroperator/etcd)
- or an administrator managing the hook.
- maxLength: 512
- minLength: 3
- type: string
- required:
- - name
- - owner
- type: object
- type: array
- x-kubernetes-list-map-keys:
- - name
- x-kubernetes-list-type: map
- type: object
- metadata:
- description: |-
- ObjectMeta will autopopulate the Node created. Use this to
- indicate what labels, annotations, name prefix, etc., should be used
- when creating the Node.
- properties:
- annotations:
- additionalProperties:
- type: string
- description: |-
- annotations is an unstructured key value map stored with a resource that may be
- set by external tools to store and retrieve arbitrary metadata. They are not
- queryable and should be preserved when modifying objects.
- More info: http://kubernetes.io/docs/user-guide/annotations
- type: object
- generateName:
- description: |-
- generateName is an optional prefix, used by the server, to generate a unique
- name ONLY IF the Name field has not been provided.
- If this field is used, the name returned to the client will be different
- than the name passed. This value will also be combined with a unique suffix.
- The provided value has the same validation rules as the Name field,
- and may be truncated by the length of the suffix required to make the value
- unique on the server.
-
- If this field is specified and the generated name exists, the server will
- NOT return a 409 - instead, it will either return 201 Created or 500 with Reason
- ServerTimeout indicating a unique name could not be found in the time allotted, and the client
- should retry (optionally after the time indicated in the Retry-After header).
-
- Applied only if Name is not specified.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#idempotency
- type: string
- labels:
- additionalProperties:
- type: string
- description: |-
- Map of string keys and values that can be used to organize and categorize
- (scope and select) objects. May match selectors of replication controllers
- and services.
- More info: http://kubernetes.io/docs/user-guide/labels
- type: object
- name:
- description: |-
- name must be unique within a namespace. Is required when creating resources, although
- some resources may allow a client to request the generation of an appropriate name
- automatically. Name is primarily intended for creation idempotence and configuration
- definition.
- Cannot be updated.
- More info: http://kubernetes.io/docs/user-guide/identifiers#names
- type: string
- namespace:
- description: |-
- namespace defines the space within each name must be unique. An empty namespace is
- equivalent to the "default" namespace, but "default" is the canonical representation.
- Not all objects are required to be scoped to a namespace - the value of this field for
- those objects will be empty.
-
- Must be a DNS_LABEL.
- Cannot be updated.
- More info: http://kubernetes.io/docs/user-guide/namespaces
- type: string
- ownerReferences:
- description: |-
- List of objects depended by this object. If ALL objects in the list have
- been deleted, this object will be garbage collected. If this object is managed by a controller,
- then an entry in this list will point to this controller, with the controller field set to true.
- There cannot be more than one managing controller.
- items:
- description: |-
- OwnerReference contains enough information to let you identify an owning
- object. An owning object must be in the same namespace as the dependent, or
- be cluster-scoped, so there is no namespace field.
- properties:
- apiVersion:
- description: API version of the referent.
- type: string
- blockOwnerDeletion:
- description: |-
- If true, AND if the owner has the "foregroundDeletion" finalizer, then
- the owner cannot be deleted from the key-value store until this
- reference is removed.
- See https://kubernetes.io/docs/concepts/architecture/garbage-collection/#foreground-deletion
- for how the garbage collector interacts with this field and enforces the foreground deletion.
- Defaults to false.
- To set this field, a user needs "delete" permission of the owner,
- otherwise 422 (Unprocessable Entity) will be returned.
- type: boolean
- controller:
- description: If true, this reference points
- to the managing controller.
- type: boolean
- kind:
- description: |-
- Kind of the referent.
- More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds
- type: string
- name:
- description: |-
- Name of the referent.
- More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#names
- type: string
- uid:
- description: |-
- UID of the referent.
- More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names#uids
- type: string
- required:
- - apiVersion
- - kind
- - name
- - uid
- type: object
- x-kubernetes-map-type: atomic
- type: array
- x-kubernetes-list-map-keys:
- - uid
- x-kubernetes-list-type: map
- type: object
- providerID:
- description: |-
- providerID is the identification ID of the machine provided by the provider.
- This field must match the provider ID as seen on the node object corresponding to this machine.
- This field is required by higher level consumers of cluster-api. Example use case is cluster autoscaler
- with cluster-api as provider. Clean-up logic in the autoscaler compares machines to nodes to find out
- machines at provider which could not get registered as Kubernetes nodes. With cluster-api as a
- generic out-of-tree provider for autoscaler, this field is required by autoscaler to be
- able to have a provider view of the list of machines. Another list of nodes is queried from the k8s apiserver
- and then a comparison is done to find out unregistered machines and are marked for delete.
- This field will be set by the actuators and consumed by higher level entities like autoscaler that will
- be interfacing with cluster-api as generic provider.
- type: string
- providerSpec:
- description: providerSpec details Provider-specific configuration
- to use during node creation.
- properties:
- value:
- description: |-
- value is an inlined, serialized representation of the resource
- configuration. It is recommended that providers maintain their own
- versioned API types that should be serialized/deserialized from this
- field, akin to component config.
- type: object
- x-kubernetes-preserve-unknown-fields: true
- type: object
- taints:
- description: |-
- The list of the taints to be applied to the corresponding Node in additive
- manner. This list will not overwrite any other taints added to the Node on
- an ongoing basis by other entities. These taints should be actively reconciled
- e.g. if you ask the machine controller to apply a taint and then manually remove
- the taint the machine controller will put it back) but not have the machine controller
- remove any taints
- items:
- description: |-
- The node this Taint is attached to has the "effect" on
- any pod that does not tolerate the Taint.
- properties:
- effect:
- description: |-
- Required. The effect of the taint on pods
- that do not tolerate the taint.
- Valid effects are NoSchedule, PreferNoSchedule and NoExecute.
- type: string
- key:
- description: Required. The taint key to be applied
- to a node.
- type: string
- timeAdded:
- description: TimeAdded represents the time at which
- the taint was added.
- format: date-time
- type: string
- value:
- description: The taint value corresponding to the
- taint key.
- type: string
- required:
- - effect
- - key
- type: object
- type: array
- x-kubernetes-list-type: atomic
- type: object
- required:
- - metadata
- - spec
- type: object
- required:
- - machineType
- type: object
- x-kubernetes-validations:
- - message: machines_v1beta1_machine_openshift_io configuration is
- required when machineType is machines_v1beta1_machine_openshift_io,
- and forbidden otherwise
- rule: 'has(self.machineType) && self.machineType == ''machines_v1beta1_machine_openshift_io''
- ? has(self.machines_v1beta1_machine_openshift_io) : !has(self.machines_v1beta1_machine_openshift_io)'
- required:
- - replicas
- - selector
- - template
- type: object
- status:
- description: ControlPlaneMachineSetStatus represents the status of the
- ControlPlaneMachineSet CRD.
- properties:
- conditions:
- description: |-
- conditions represents the observations of the ControlPlaneMachineSet's current state.
- Known .status.conditions.type are: Available, Degraded and Progressing.
- 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
- observedGeneration:
- description: |-
- observedGeneration is the most recent generation observed for this
- ControlPlaneMachineSet. It corresponds to the ControlPlaneMachineSets's generation,
- which is updated on mutation by the API Server.
- format: int64
- type: integer
- readyReplicas:
- description: |-
- readyReplicas is the number of Control Plane Machines created by the
- ControlPlaneMachineSet controller which are ready.
- Note that this value may be higher than the desired number of replicas
- while rolling updates are in-progress.
- format: int32
- type: integer
- replicas:
- description: |-
- replicas is the number of Control Plane Machines created by the
- ControlPlaneMachineSet controller.
- Note that during update operations this value may differ from the
- desired replica count.
- format: int32
- type: integer
- unavailableReplicas:
- description: |-
- unavailableReplicas is the number of Control Plane Machines that are
- still required before the ControlPlaneMachineSet reaches the desired
- available capacity. When this value is non-zero, the number of
- ReadyReplicas is less than the desired Replicas.
- format: int32
- type: integer
- updatedReplicas:
- description: |-
- updatedReplicas is the number of non-terminated Control Plane Machines
- created by the ControlPlaneMachineSet controller that have the desired
- provider spec and are ready.
- This value is set to 0 when a change is detected to the desired spec.
- When the update strategy is RollingUpdate, this will also coincide
- with starting the process of updating the Machines.
- When the update strategy is OnDelete, this value will remain at 0 until
- a user deletes an existing replica and its replacement has become ready.
- format: int32
- type: integer
- type: object
- type: object
- served: true
- storage: true
- subresources:
- status: {}
diff --git a/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/MachineAPIMigration.yaml b/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/MachineAPIMigration.yaml
index f09a28a49f0..92ad879937c 100644
--- a/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/MachineAPIMigration.yaml
+++ b/machine/v1/zz_generated.featuregated-crd-manifests/controlplanemachinesets.machine.openshift.io/MachineAPIMigration.yaml
@@ -77,6 +77,29 @@ spec:
description: ControlPlaneMachineSet represents the configuration of the
ControlPlaneMachineSet.
properties:
+ machineNamePrefix:
+ description: |-
+ machineNamePrefix is the prefix used when creating machine names.
+ Each machine name will consist of this prefix, followed by
+ a randomly generated string of 5 characters, and the index of the machine.
+ It must be a lowercase RFC 1123 subdomain, consisting of lowercase
+ alphanumeric characters, hyphens ('-'), and periods ('.').
+ Each block, separated by periods, must start and end with an alphanumeric character.
+ Hyphens are not allowed at the start or end of a block, and consecutive periods are not permitted.
+ The prefix must be between 1 and 245 characters in length.
+ For example, if machineNamePrefix is set to 'control-plane',
+ and three machines are created, their names might be:
+ control-plane-abcde-0, control-plane-fghij-1, control-plane-klmno-2
+ maxLength: 245
+ minLength: 1
+ type: string
+ x-kubernetes-validations:
+ - message: a lowercase RFC 1123 subdomain must consist of lowercase
+ alphanumeric characters, hyphens ('-'), and periods ('.'). Each
+ block, separated by periods, must start and end with an alphanumeric
+ character. Hyphens are not allowed at the start or end of a block,
+ and consecutive periods are not permitted.
+ rule: '!format.dns1123Subdomain().validate(self).hasValue()'
replicas:
default: 3
description: |-
diff --git a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
index 326d875acd8..7bca420eceb 100644
--- a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
+++ b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml
@@ -260,9 +260,6 @@
{
"name": "BuildCSIVolumes"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "ConsolePluginContentSecurityPolicy"
},
diff --git a/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml
index 1897be7b3c5..5123d2388fb 100644
--- a/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml
+++ b/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml
@@ -106,9 +106,6 @@
{
"name": "CBORServingAndStorage"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "CRDCompatibilityRequirementOperator"
},
diff --git a/payload-manifests/featuregates/featureGate-Hypershift-OKD.yaml b/payload-manifests/featuregates/featureGate-Hypershift-OKD.yaml
index 91f2cd1e720..9de1ab5e290 100644
--- a/payload-manifests/featuregates/featureGate-Hypershift-OKD.yaml
+++ b/payload-manifests/featuregates/featureGate-Hypershift-OKD.yaml
@@ -262,9 +262,6 @@
{
"name": "BuildCSIVolumes"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "ConsolePluginContentSecurityPolicy"
},
diff --git a/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml
index 5853607c02b..3f51a06f1ca 100644
--- a/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml
+++ b/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml
@@ -133,9 +133,6 @@
{
"name": "CBORServingAndStorage"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "CRDCompatibilityRequirementOperator"
},
diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml
index 43c5affe7e2..cc2dc2b8297 100644
--- a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml
+++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml
@@ -254,9 +254,6 @@
{
"name": "BuildCSIVolumes"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "ConsolePluginContentSecurityPolicy"
},
diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml
index e9d704c6a35..cb7a56cb17b 100644
--- a/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml
+++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml
@@ -88,9 +88,6 @@
{
"name": "CBORServingAndStorage"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "CRDCompatibilityRequirementOperator"
},
diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-OKD.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-OKD.yaml
index 9c72a8df94f..82cd01feeb3 100644
--- a/payload-manifests/featuregates/featureGate-SelfManagedHA-OKD.yaml
+++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-OKD.yaml
@@ -256,9 +256,6 @@
{
"name": "BuildCSIVolumes"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "ConsolePluginContentSecurityPolicy"
},
diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml
index f3a7e2c225a..1d7b18a50b6 100644
--- a/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml
+++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml
@@ -115,9 +115,6 @@
{
"name": "CBORServingAndStorage"
},
- {
- "name": "CPMSMachineNamePrefix"
- },
{
"name": "CRDCompatibilityRequirementOperator"
},