diff --git a/config/v1/tests/infrastructures.config.openshift.io/GCPLabelsTags.yaml b/config/v1/tests/infrastructures.config.openshift.io/GCPLabelsTags.yaml index 58a256118a5..3c4e092dc30 100644 --- a/config/v1/tests/infrastructures.config.openshift.io/GCPLabelsTags.yaml +++ b/config/v1/tests/infrastructures.config.openshift.io/GCPLabelsTags.yaml @@ -1,8 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this name: "Infrastructure" crdName: infrastructures.config.openshift.io -featureGates: -- GCPLabelsTags tests: onCreate: - name: Should be able to create a minimal Infrastructure diff --git a/config/v1/types_infrastructure.go b/config/v1/types_infrastructure.go index ffb0f3f603a..2053dccd81d 100644 --- a/config/v1/types_infrastructure.go +++ b/config/v1/types_infrastructure.go @@ -694,8 +694,8 @@ type GCPServiceEndpoint struct { type GCPPlatformSpec struct{} // GCPPlatformStatus holds the current status of the Google Cloud Platform infrastructure provider. -// +openshift:validation:FeatureGateAwareXValidation:featureGate=GCPLabelsTags,rule="!has(oldSelf.resourceLabels) && !has(self.resourceLabels) || has(oldSelf.resourceLabels) && has(self.resourceLabels)",message="resourceLabels may only be configured during installation" -// +openshift:validation:FeatureGateAwareXValidation:featureGate=GCPLabelsTags,rule="!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)",message="resourceTags may only be configured during installation" +// +kubebuilder:validation:XValidation:rule="!has(oldSelf.resourceLabels) && !has(self.resourceLabels) || has(oldSelf.resourceLabels) && has(self.resourceLabels)",message="resourceLabels may only be configured during installation" +// +kubebuilder:validation:XValidation:rule="!has(oldSelf.resourceTags) && !has(self.resourceTags) || has(oldSelf.resourceTags) && has(self.resourceTags)",message="resourceTags may only be configured during installation" type GCPPlatformStatus struct { // resourceGroupName is the Project ID for new GCP resources created for the cluster. ProjectID string `json:"projectID"` @@ -712,7 +712,6 @@ type GCPPlatformStatus struct { // +listType=map // +listMapKey=key // +optional - // +openshift:enable:FeatureGate=GCPLabelsTags ResourceLabels []GCPResourceLabel `json:"resourceLabels,omitempty"` // resourceTags is a list of additional tags to apply to GCP resources created for the cluster. @@ -723,7 +722,6 @@ type GCPPlatformStatus struct { // +listType=map // +listMapKey=key // +optional - // +openshift:enable:FeatureGate=GCPLabelsTags ResourceTags []GCPResourceTag `json:"resourceTags,omitempty"` // This field was introduced and removed under tech preview. diff --git a/config/v1/zz_generated.featuregated-crd-manifests.yaml b/config/v1/zz_generated.featuregated-crd-manifests.yaml index 19a304c17bf..91881630b89 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests.yaml @@ -366,7 +366,6 @@ infrastructures.config.openshift.io: - DyanmicServiceEndpointIBMCloud - GCPClusterHostedDNS - GCPCustomAPIEndpoints - - GCPLabelsTags - HighlyAvailableArbiter - HighlyAvailableArbiter+DualReplica - NutanixMultiSubnets diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AAA_ungated.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AAA_ungated.yaml index dfa0a4c5bc6..b3c15c99842 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AAA_ungated.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AAA_ungated.yaml @@ -1488,7 +1488,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AWSClusterHostedDNS.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AWSClusterHostedDNS.yaml index f222fe2e660..3ea039e8267 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AWSClusterHostedDNS.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/AWSClusterHostedDNS.yaml @@ -1586,7 +1586,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DualReplica.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DualReplica.yaml index 4b225cd1c90..4925a024934 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DualReplica.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DualReplica.yaml @@ -1487,7 +1487,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DyanmicServiceEndpointIBMCloud.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DyanmicServiceEndpointIBMCloud.yaml index 987e6561345..36720562b37 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DyanmicServiceEndpointIBMCloud.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/DyanmicServiceEndpointIBMCloud.yaml @@ -1544,7 +1544,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPClusterHostedDNS.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPClusterHostedDNS.yaml index 2659bf08359..8fd02ad4b85 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPClusterHostedDNS.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPClusterHostedDNS.yaml @@ -1586,7 +1586,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPCustomAPIEndpoints.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPCustomAPIEndpoints.yaml index d15928408e1..67bb8c317ea 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPCustomAPIEndpoints.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPCustomAPIEndpoints.yaml @@ -1482,6 +1482,105 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) serviceEndpoints: description: |- serviceEndpoints specifies endpoints that override the default endpoints @@ -1548,6 +1647,13 @@ spec: name rule: self.all(x, self.exists_one(y, x.name == y.name)) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPLabelsTags.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPLabelsTags.yaml deleted file mode 100644 index 2b25b5b9b51..00000000000 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/GCPLabelsTags.yaml +++ /dev/null @@ -1,2215 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - api-approved.openshift.io: https://github.com/openshift/api/pull/470 - api.openshift.io/filename-cvo-runlevel: "0000_10" - api.openshift.io/filename-operator: config-operator - api.openshift.io/filename-ordering: "01" - feature-gate.release.openshift.io/GCPLabelsTags: "true" - release.openshift.io/bootstrap-required: "true" - name: infrastructures.config.openshift.io -spec: - group: config.openshift.io - names: - kind: Infrastructure - listKind: InfrastructureList - plural: infrastructures - singular: infrastructure - scope: Cluster - versions: - - name: v1 - schema: - openAPIV3Schema: - description: |- - Infrastructure holds cluster-wide information about Infrastructure. The canonical name 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: - cloudConfig: - description: |- - cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. - This configuration file is used to configure the Kubernetes cloud provider integration - when using the built-in cloud provider integration or the external cloud controller manager. - The namespace for this config map is openshift-config. - - cloudConfig should only be consumed by the kube_cloud_config controller. - The controller is responsible for using the user configuration in the spec - for various platforms and combining that with the user provided ConfigMap in this field - to create a stitched kube cloud config. - The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace - with the kube cloud config is stored in `cloud.conf` key. - All the clients are expected to use the generated ConfigMap only. - properties: - key: - description: key allows pointing to a specific key/value inside - of the configmap. This is useful for logical file references. - type: string - name: - type: string - type: object - platformSpec: - description: |- - platformSpec holds desired information specific to the underlying - infrastructure provider. - properties: - alibabaCloud: - description: alibabaCloud contains settings specific to the Alibaba - Cloud infrastructure provider. - type: object - aws: - description: aws contains settings specific to the Amazon Web - Services infrastructure provider. - properties: - serviceEndpoints: - description: |- - serviceEndpoints list contains custom endpoints which will override default - service endpoint of AWS Services. - There must be only one ServiceEndpoint for a service. - items: - description: |- - AWSServiceEndpoint store the configuration of a custom url to - override existing defaults of AWS Services. - properties: - name: - description: |- - name is the name of the AWS service. - The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html - This must be provided and cannot be empty. - pattern: ^[a-z0-9-]+$ - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - pattern: ^https:// - type: string - type: object - type: array - x-kubernetes-list-type: atomic - type: object - azure: - description: azure contains settings specific to the Azure infrastructure - provider. - type: object - baremetal: - description: baremetal contains settings specific to the BareMetal - platform. - properties: - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.apiServerInternalIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() : true' - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.ingressIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() : true' - machineNetworks: - description: |- - machineNetworks are IP networks used to connect all the OpenShift cluster - nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, - for example "10.0.0.0/8" or "fd00::/8". - items: - description: CIDR is an IP address range in CIDR notation - (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - type: object - x-kubernetes-validations: - - message: apiServerInternalIPs list is required once set - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' - - message: ingressIPs list is required once set - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' - equinixMetal: - description: equinixMetal contains settings specific to the Equinix - Metal infrastructure provider. - type: object - external: - description: |- - ExternalPlatformType represents generic infrastructure provider. - Platform-specific components should be supplemented separately. - properties: - platformName: - default: Unknown - description: |- - platformName holds the arbitrary string representing the infrastructure provider name, expected to be set at the installation time. - This field is solely for informational and reporting purposes and is not expected to be used for decision-making. - type: string - x-kubernetes-validations: - - message: platform name cannot be changed once set - rule: oldSelf == 'Unknown' || self == oldSelf - type: object - gcp: - description: gcp contains settings specific to the Google Cloud - Platform infrastructure provider. - type: object - ibmcloud: - description: ibmcloud contains settings specific to the IBMCloud - infrastructure provider. - type: object - kubevirt: - description: kubevirt contains settings specific to the kubevirt - infrastructure provider. - type: object - nutanix: - description: nutanix contains settings specific to the Nutanix - infrastructure provider. - properties: - failureDomains: - description: |- - failureDomains configures failure domains information for the Nutanix platform. - When set, the failure domains defined here may be used to spread Machines across - prism element clusters to improve fault tolerance of the cluster. - items: - description: NutanixFailureDomain configures failure domain - information for the Nutanix platform. - properties: - cluster: - description: |- - cluster is to identify the cluster (the Prism Element under management of the Prism Central), - in which the Machine's VM will be created. The cluster identifier (uuid or name) can be obtained - from the Prism Central console or using the prism_central API. - properties: - name: - description: name is the resource name in the PC. - It cannot be empty if the type is Name. - type: string - type: - description: type is the identifier type to use - for this resource. - enum: - - UUID - - Name - type: string - uuid: - description: uuid is the UUID of the resource in - the PC. It cannot be empty if the type is UUID. - type: string - required: - - type - type: object - x-kubernetes-validations: - - message: uuid configuration is required when type - is UUID, and forbidden otherwise - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) - : !has(self.uuid)' - - message: name configuration is required when type - is Name, and forbidden otherwise - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) - : !has(self.name)' - name: - description: |- - name defines the unique name of a failure domain. - Name is required and must be at most 64 characters in length. - It must consist of only lower case alphanumeric characters and hyphens (-). - It must start and end with an alphanumeric character. - This value is arbitrary and is used to identify the failure domain within the platform. - maxLength: 64 - minLength: 1 - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?' - type: string - subnets: - description: |- - subnets holds a list of identifiers (one or more) of the cluster's network subnets - If the feature gate NutanixMultiSubnets is enabled, up to 32 subnets may be configured. - for the Machine's VM to connect to. The subnet identifiers (uuid or name) can be - obtained from the Prism Central console or using the prism_central API. - items: - description: NutanixResourceIdentifier holds the identity - of a Nutanix PC resource (cluster, image, subnet, - etc.) - properties: - name: - description: name is the resource name in the - PC. It cannot be empty if the type is Name. - type: string - type: - description: type is the identifier type to use - for this resource. - enum: - - UUID - - Name - type: string - uuid: - description: uuid is the UUID of the resource - in the PC. It cannot be empty if the type is - UUID. - type: string - required: - - type - type: object - x-kubernetes-validations: - - message: uuid configuration is required when type - is UUID, and forbidden otherwise - rule: 'has(self.type) && self.type == ''UUID'' ? has(self.uuid) - : !has(self.uuid)' - - message: name configuration is required when type - is Name, and forbidden otherwise - rule: 'has(self.type) && self.type == ''Name'' ? has(self.name) - : !has(self.name)' - minItems: 1 - type: array - x-kubernetes-list-type: atomic - required: - - cluster - - name - - subnets - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - prismCentral: - description: |- - prismCentral holds the endpoint address and port to access the Nutanix Prism Central. - When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. - Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the - proxy spec.noProxy list. - properties: - address: - description: address is the endpoint address (DNS name - or IP address) of the Nutanix Prism Central or Element - (cluster) - maxLength: 256 - type: string - port: - description: port is the port number to access the Nutanix - Prism Central or Element (cluster) - format: int32 - maximum: 65535 - minimum: 1 - type: integer - required: - - address - - port - type: object - prismElements: - description: |- - prismElements holds one or more endpoint address and port data to access the Nutanix - Prism Elements (clusters) of the Nutanix Prism Central. Currently we only support one - Prism Element (cluster) for an OpenShift cluster, where all the Nutanix resources (VMs, subnets, volumes, etc.) - used in the OpenShift cluster are located. In the future, we may support Nutanix resources (VMs, etc.) - spread over multiple Prism Elements (clusters) of the Prism Central. - items: - description: NutanixPrismElementEndpoint holds the name - and endpoint data for a Prism Element (cluster) - properties: - endpoint: - description: |- - endpoint holds the endpoint address and port data of the Prism Element (cluster). - When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. - Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the - proxy spec.noProxy list. - properties: - address: - description: address is the endpoint address (DNS - name or IP address) of the Nutanix Prism Central - or Element (cluster) - maxLength: 256 - type: string - port: - description: port is the port number to access the - Nutanix Prism Central or Element (cluster) - format: int32 - maximum: 65535 - minimum: 1 - type: integer - required: - - address - - port - type: object - name: - description: |- - name is the name of the Prism Element (cluster). This value will correspond with - the cluster field configured on other resources (eg Machines, PVCs, etc). - maxLength: 256 - type: string - required: - - endpoint - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - required: - - prismCentral - - prismElements - type: object - openstack: - description: openstack contains settings specific to the OpenStack - infrastructure provider. - properties: - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.apiServerInternalIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() : true' - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.ingressIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() : true' - machineNetworks: - description: |- - machineNetworks are IP networks used to connect all the OpenShift cluster - nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, - for example "10.0.0.0/8" or "fd00::/8". - items: - description: CIDR is an IP address range in CIDR notation - (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - type: object - x-kubernetes-validations: - - message: apiServerInternalIPs list is required once set - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' - - message: ingressIPs list is required once set - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' - ovirt: - description: ovirt contains settings specific to the oVirt infrastructure - provider. - type: object - powervs: - description: powervs contains settings specific to the IBM Power - Systems Virtual Servers infrastructure provider. - properties: - serviceEndpoints: - description: |- - serviceEndpoints is a list of custom endpoints which will override the default - service endpoints of a Power VS service. - items: - description: |- - PowervsServiceEndpoint stores the configuration of a custom url to - override existing defaults of PowerVS Services. - properties: - name: - description: |- - name is the name of the Power VS service. - Few of the services are - IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api - ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller - Power Cloud - https://cloud.ibm.com/apidocs/power-cloud - enum: - - CIS - - COS - - COSConfig - - DNSServices - - GlobalCatalog - - GlobalSearch - - GlobalTagging - - HyperProtect - - IAM - - KeyProtect - - Power - - ResourceController - - ResourceManager - - VPC - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - format: uri - pattern: ^https:// - type: string - required: - - name - - url - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - type: object - type: - description: |- - type is the underlying infrastructure provider for the cluster. This - value controls whether infrastructure automation such as service load - balancers, dynamic volume provisioning, machine creation and deletion, and - other integrations are enabled. If None, no infrastructure automation is - enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", - "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", - "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, - and must handle unrecognized platforms as None if they do not support that platform. - enum: - - "" - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - - AlibabaCloud - - Nutanix - - External - type: string - vsphere: - description: vsphere contains settings specific to the VSphere - infrastructure provider. - properties: - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.apiServerInternalIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() : true' - failureDomains: - description: |- - failureDomains contains the definition of region, zone and the vCenter topology. - If this is omitted failure domains (regions and zones) will not be used. - items: - description: VSpherePlatformFailureDomainSpec holds the - region and zone failure domain and the vCenter topology - of that failure domain. - properties: - name: - description: |- - name defines the arbitrary but unique name - of a failure domain. - maxLength: 256 - minLength: 1 - type: string - region: - description: |- - region defines the name of a region tag that will - be attached to a vCenter datacenter. The tag - category in vCenter must be named openshift-region. - maxLength: 80 - minLength: 1 - type: string - regionAffinity: - description: |- - regionAffinity holds the type of region, Datacenter or ComputeCluster. - When set to Datacenter, this means the region is a vCenter Datacenter as defined in topology. - When set to ComputeCluster, this means the region is a vCenter Cluster as defined in topology. - properties: - type: - description: |- - type determines the vSphere object type for a region within this failure domain. - Available types are Datacenter and ComputeCluster. - When set to Datacenter, this means the vCenter Datacenter defined is the region. - When set to ComputeCluster, this means the vCenter cluster defined is the region. - enum: - - ComputeCluster - - Datacenter - type: string - required: - - type - type: object - server: - description: server is the fully-qualified domain name - or the IP address of the vCenter server. - maxLength: 255 - minLength: 1 - type: string - topology: - description: topology describes a given failure domain - using vSphere constructs - properties: - computeCluster: - description: |- - computeCluster the absolute path of the vCenter cluster - in which virtual machine will be located. - The absolute path is of the form //host/. - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/host/.*? - type: string - datacenter: - description: |- - datacenter is the name of vCenter datacenter in which virtual machines will be located. - The maximum length of the datacenter name is 80 characters. - maxLength: 80 - type: string - datastore: - description: |- - datastore is the absolute path of the datastore in which the - virtual machine is located. - The absolute path is of the form //datastore/ - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/datastore/.*? - type: string - folder: - description: |- - folder is the absolute path of the folder where - virtual machines are located. The absolute path - is of the form //vm/. - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/vm/.*? - type: string - networks: - description: |- - networks is the list of port group network names within this failure domain. - If feature gate VSphereMultiNetworks is enabled, up to 10 network adapters may be defined. - 10 is the maximum number of virtual network devices which may be attached to a VM as defined by: - https://configmax.esp.vmware.com/guest?vmwareproduct=vSphere&release=vSphere%208.0&categories=1-0 - The available networks (port groups) can be listed using - `govc ls 'network/*'` - Networks should be in the form of an absolute path: - //network/. - items: - type: string - minItems: 1 - type: array - x-kubernetes-list-type: atomic - resourcePool: - description: |- - resourcePool is the absolute path of the resource pool where virtual machines will be - created. The absolute path is of the form //host//Resources/. - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/host/.*?/Resources.* - type: string - template: - description: |- - template is the full inventory path of the virtual machine or template - that will be cloned when creating new machines in this failure domain. - The maximum length of the path is 2048 characters. - - When omitted, the template will be calculated by the control plane - machineset operator based on the region and zone defined in - VSpherePlatformFailureDomainSpec. - For example, for zone=zonea, region=region1, and infrastructure name=test, - the template path would be calculated as //vm/test-rhcos-region1-zonea. - maxLength: 2048 - minLength: 1 - pattern: ^/.*?/vm/.*? - type: string - required: - - computeCluster - - datacenter - - datastore - - networks - type: object - zone: - description: |- - zone defines the name of a zone tag that will - be attached to a vCenter cluster. The tag - category in vCenter must be named openshift-zone. - maxLength: 80 - minLength: 1 - type: string - zoneAffinity: - description: |- - zoneAffinity holds the type of the zone and the hostGroup which - vmGroup and the hostGroup names in vCenter corresponds to - a vm-host group of type Virtual Machine and Host respectively. Is also - contains the vmHostRule which is an affinity vm-host rule in vCenter. - properties: - hostGroup: - description: |- - hostGroup holds the vmGroup and the hostGroup names in vCenter - corresponds to a vm-host group of type Virtual Machine and Host respectively. Is also - contains the vmHostRule which is an affinity vm-host rule in vCenter. - properties: - hostGroup: - description: |- - hostGroup is the name of the vm-host group of type host within vCenter for this failure domain. - hostGroup is limited to 80 characters. - This field is required when the VSphereFailureDomain ZoneType is HostGroup - maxLength: 80 - minLength: 1 - type: string - vmGroup: - description: |- - vmGroup is the name of the vm-host group of type virtual machine within vCenter for this failure domain. - vmGroup is limited to 80 characters. - This field is required when the VSphereFailureDomain ZoneType is HostGroup - maxLength: 80 - minLength: 1 - type: string - vmHostRule: - description: |- - vmHostRule is the name of the affinity vm-host rule within vCenter for this failure domain. - vmHostRule is limited to 80 characters. - This field is required when the VSphereFailureDomain ZoneType is HostGroup - maxLength: 80 - minLength: 1 - type: string - required: - - hostGroup - - vmGroup - - vmHostRule - type: object - type: - description: |- - type determines the vSphere object type for a zone within this failure domain. - Available types are ComputeCluster and HostGroup. - When set to ComputeCluster, this means the vCenter cluster defined is the zone. - When set to HostGroup, hostGroup must be configured with hostGroup, vmGroup and vmHostRule and - this means the zone is defined by the grouping of those fields. - enum: - - HostGroup - - ComputeCluster - type: string - required: - - type - type: object - x-kubernetes-validations: - - message: hostGroup is required when type is HostGroup, - and forbidden otherwise - rule: 'has(self.type) && self.type == ''HostGroup'' - ? has(self.hostGroup) : !has(self.hostGroup)' - required: - - name - - region - - server - - topology - - zone - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.ingressIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() : true' - machineNetworks: - description: |- - machineNetworks are IP networks used to connect all the OpenShift cluster - nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, - for example "10.0.0.0/8" or "fd00::/8". - items: - description: CIDR is an IP address range in CIDR notation - (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeNetworking: - description: |- - nodeNetworking contains the definition of internal and external network constraints for - assigning the node's networking. - If this field is omitted, networking defaults to the legacy - address selection behavior which is to only support a single address and - return the first one found. - properties: - external: - description: external represents the network configuration - of the node that is externally routable. - properties: - excludeNetworkSubnetCidr: - description: |- - excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting - the IP address from the VirtualMachine's VM for use in the status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: atomic - network: - description: |- - network VirtualMachine's VM Network names that will be used to when searching - for status.addresses fields. Note that if internal.networkSubnetCIDR and - external.networkSubnetCIDR are not set, then the vNIC associated to this network must - only have a single IP address assigned to it. - The available networks (port groups) can be listed using - `govc ls 'network/*'` - type: string - networkSubnetCidr: - description: |- - networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs - that will be used in respective status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: set - type: object - internal: - description: internal represents the network configuration - of the node that is routable only within the cluster. - properties: - excludeNetworkSubnetCidr: - description: |- - excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting - the IP address from the VirtualMachine's VM for use in the status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: atomic - network: - description: |- - network VirtualMachine's VM Network names that will be used to when searching - for status.addresses fields. Note that if internal.networkSubnetCIDR and - external.networkSubnetCIDR are not set, then the vNIC associated to this network must - only have a single IP address assigned to it. - The available networks (port groups) can be listed using - `govc ls 'network/*'` - type: string - networkSubnetCidr: - description: |- - networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs - that will be used in respective status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: set - type: object - type: object - vcenters: - description: |- - vcenters holds the connection details for services to communicate with vCenter. - Currently, only a single vCenter is supported, but in tech preview 3 vCenters are supported. - Once the cluster has been installed, you are unable to change the current number of defined - vCenters except in the case where the cluster has been upgraded from a version of OpenShift - where the vsphere platform spec was not present. You may make modifications to the existing - vCenters that are defined in the vcenters list in order to match with any added or modified - failure domains. - items: - description: |- - VSpherePlatformVCenterSpec stores the vCenter connection fields. - This is used by the vSphere CCM. - properties: - datacenters: - description: |- - The vCenter Datacenters in which the RHCOS - vm guests are located. This field will - be used by the Cloud Controller Manager. - Each datacenter listed here should be used within - a topology. - items: - type: string - minItems: 1 - type: array - x-kubernetes-list-type: set - port: - description: |- - port is the TCP port that will be used to communicate to - the vCenter endpoint. - When omitted, this means the user has no opinion and - it is up to the platform to choose a sensible default, - which is subject to change over time. - format: int32 - maximum: 32767 - minimum: 1 - type: integer - server: - description: server is the fully-qualified domain name - or the IP address of the vCenter server. - maxLength: 255 - type: string - required: - - datacenters - - server - type: object - maxItems: 3 - minItems: 0 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: vcenters cannot be added or removed once set - rule: 'size(self) != size(oldSelf) ? size(oldSelf) == 0 - && size(self) < 2 : true' - type: object - x-kubernetes-validations: - - message: apiServerInternalIPs list is required once set - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' - - message: ingressIPs list is required once set - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' - - message: vcenters can have at most 1 item when configured post-install - rule: '!has(oldSelf.vcenters) && has(self.vcenters) ? size(self.vcenters) - < 2 : true' - type: object - x-kubernetes-validations: - - message: vcenters can have at most 1 item when configured post-install - rule: '!has(oldSelf.vsphere) && has(self.vsphere) ? size(self.vsphere.vcenters) - < 2 : true' - type: object - status: - description: status holds observed values from the cluster. They may not - be overridden. - properties: - apiServerInternalURI: - description: |- - apiServerInternalURL is a valid URI with scheme 'https', - address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components - like kubelets, to contact the Kubernetes API server using the - infrastructure provider rather than Kubernetes networking. - type: string - apiServerURL: - description: |- - apiServerURL is a valid URI with scheme 'https', address and - optionally a port (defaulting to 443). apiServerURL can be used by components like the web console - to tell users where to find the Kubernetes API. - type: string - controlPlaneTopology: - default: HighlyAvailable - description: |- - controlPlaneTopology expresses the expectations for operands that normally run on control nodes. - The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. - The 'SingleReplica' mode will be used in single-node deployments - and the operators should not configure the operand for highly-available operation - The 'External' mode indicates that the control plane is hosted externally to the cluster and that - its components are not visible within the cluster. - type: string - cpuPartitioning: - default: None - description: |- - cpuPartitioning expresses if CPU partitioning is a currently enabled feature in the cluster. - CPU Partitioning means that this cluster can support partitioning workloads to specific CPU Sets. - Valid values are "None" and "AllNodes". When omitted, the default value is "None". - The default value of "None" indicates that no nodes will be setup with CPU partitioning. - The "AllNodes" value indicates that all nodes have been setup with CPU partitioning, - and can then be further configured via the PerformanceProfile API. - enum: - - None - - AllNodes - type: string - etcdDiscoveryDomain: - description: |- - etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering - etcd servers and clients. - For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery - deprecated: as of 4.7, this field is no longer set or honored. It will be removed in a future release. - type: string - infrastructureName: - description: |- - infrastructureName uniquely identifies a cluster with a human friendly name. - Once set it should not be changed. Must be of max length 27 and must have only - alphanumeric or hyphen characters. - type: string - infrastructureTopology: - default: HighlyAvailable - description: |- - infrastructureTopology expresses the expectations for infrastructure services that do not run on control - plane nodes, usually indicated by a node selector for a `role` value - other than `master`. - The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. - The 'SingleReplica' mode will be used in single-node deployments - and the operators should not configure the operand for highly-available operation - NOTE: External topology mode is not applicable for this field. - enum: - - HighlyAvailable - - SingleReplica - type: string - platform: - description: |- - platform is the underlying infrastructure provider for the cluster. - - Deprecated: Use platformStatus.type instead. - enum: - - "" - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - - AlibabaCloud - - Nutanix - - External - type: string - platformStatus: - description: |- - platformStatus holds status information specific to the underlying - infrastructure provider. - properties: - alibabaCloud: - description: alibabaCloud contains settings specific to the Alibaba - Cloud infrastructure provider. - properties: - region: - description: region specifies the region for Alibaba Cloud - resources created for the cluster. - pattern: ^[0-9A-Za-z-]+$ - type: string - resourceGroupID: - description: resourceGroupID is the ID of the resource group - for the cluster. - pattern: ^(rg-[0-9A-Za-z]+)?$ - type: string - resourceTags: - description: resourceTags is a list of additional tags to - apply to Alibaba Cloud resources created for the cluster. - items: - description: AlibabaCloudResourceTag is the set of tags - to add to apply to resources. - properties: - key: - description: key is the key of the tag. - maxLength: 128 - minLength: 1 - type: string - value: - description: value is the value of the tag. - maxLength: 128 - minLength: 1 - type: string - required: - - key - - value - type: object - maxItems: 20 - type: array - x-kubernetes-list-map-keys: - - key - x-kubernetes-list-type: map - required: - - region - type: object - aws: - description: aws contains settings specific to the Amazon Web - Services infrastructure provider. - properties: - region: - description: region holds the default AWS region for new AWS - resources created by the cluster. - type: string - resourceTags: - description: |- - resourceTags is a list of additional tags to apply to AWS resources created for the cluster. - See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. - AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags - available for the user. - items: - description: AWSResourceTag is a tag to apply to AWS resources - created for the cluster. - properties: - key: - description: |- - key sets the key of the AWS resource tag key-value pair. Key is required when defining an AWS resource tag. - Key should consist of between 1 and 128 characters, and may - contain only the set of alphanumeric characters, space (' '), '_', '.', '/', '=', '+', '-', ':', and '@'. - maxLength: 128 - minLength: 1 - type: string - x-kubernetes-validations: - - message: invalid AWS resource tag key. The string - can contain only the set of alphanumeric characters, - space (' '), '_', '.', '/', '=', '+', '-', ':', - '@' - rule: self.matches('^[0-9A-Za-z_.:/=+-@ ]+$') - value: - description: |- - value sets the value of the AWS resource tag key-value pair. Value is required when defining an AWS resource tag. - Value should consist of between 1 and 256 characters, and may - contain only the set of alphanumeric characters, space (' '), '_', '.', '/', '=', '+', '-', ':', and '@'. - Some AWS service do not support empty values. Since tags are added to resources in many services, the - length of the tag value must meet the requirements of all services. - maxLength: 256 - minLength: 1 - type: string - x-kubernetes-validations: - - message: invalid AWS resource tag value. The string - can contain only the set of alphanumeric characters, - space (' '), '_', '.', '/', '=', '+', '-', ':', - '@' - rule: self.matches('^[0-9A-Za-z_.:/=+-@ ]+$') - required: - - key - - value - type: object - maxItems: 25 - type: array - x-kubernetes-list-type: atomic - serviceEndpoints: - description: |- - serviceEndpoints list contains custom endpoints which will override default - service endpoint of AWS Services. - There must be only one ServiceEndpoint for a service. - items: - description: |- - AWSServiceEndpoint store the configuration of a custom url to - override existing defaults of AWS Services. - properties: - name: - description: |- - name is the name of the AWS service. - The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html - This must be provided and cannot be empty. - pattern: ^[a-z0-9-]+$ - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - pattern: ^https:// - type: string - type: object - type: array - x-kubernetes-list-type: atomic - type: object - azure: - description: azure contains settings specific to the Azure infrastructure - provider. - properties: - armEndpoint: - description: armEndpoint specifies a URL to use for resource - management in non-soverign clouds such as Azure Stack. - type: string - cloudName: - description: |- - cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK - with the appropriate Azure API endpoints. - If empty, the value is equal to `AzurePublicCloud`. - enum: - - "" - - AzurePublicCloud - - AzureUSGovernmentCloud - - AzureChinaCloud - - AzureGermanCloud - - AzureStackCloud - type: string - networkResourceGroupName: - description: |- - networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. - If empty, the value is same as ResourceGroupName. - type: string - resourceGroupName: - description: resourceGroupName is the Resource Group for new - Azure resources created for the cluster. - type: string - resourceTags: - description: |- - resourceTags is a list of additional tags to apply to Azure resources created for the cluster. - See https://docs.microsoft.com/en-us/rest/api/resources/tags for information on tagging Azure resources. - Due to limitations on Automation, Content Delivery Network, DNS Azure resources, a maximum of 15 tags - may be applied. OpenShift reserves 5 tags for internal use, allowing 10 tags for user configuration. - items: - description: AzureResourceTag is a tag to apply to Azure - resources created for the cluster. - properties: - key: - description: |- - key is the key part of the tag. A tag key can have a maximum of 128 characters and cannot be empty. Key - must begin with a letter, end with a letter, number or underscore, and must contain only alphanumeric - characters and the following special characters `_ . -`. - maxLength: 128 - minLength: 1 - pattern: ^[a-zA-Z]([0-9A-Za-z_.-]*[0-9A-Za-z_])?$ - type: string - value: - description: |- - value is the value part of the tag. A tag value can have a maximum of 256 characters and cannot be empty. Value - must contain only alphanumeric characters and the following special characters `_ + , - . / : ; < = > ? @`. - maxLength: 256 - minLength: 1 - pattern: ^[0-9A-Za-z_.=+-@]+$ - type: string - required: - - key - - value - type: object - maxItems: 10 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: resourceTags are immutable and may only be configured - during installation - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) - type: object - x-kubernetes-validations: - - message: resourceTags may only be configured during installation - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) - || has(oldSelf.resourceTags) && has(self.resourceTags)' - baremetal: - description: baremetal contains settings specific to the BareMetal - platform. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer used - by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on BareMetal platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - machineNetworks: - description: machineNetworks are IP networks used to connect - all the OpenShift cluster nodes. - items: - description: CIDR is an IP address range in CIDR notation - (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeDNSIP: - description: |- - nodeDNSIP is the IP address for the internal DNS used by the - nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` - provides name resolution for the nodes themselves. There is no DNS-as-a-service for - BareMetal deployments. In order to minimize necessary changes to the - datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames - to the nodes in the cluster. - type: string - type: object - equinixMetal: - description: equinixMetal contains settings specific to the Equinix - Metal infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - type: string - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - type: string - type: object - external: - description: external contains settings specific to the generic - External infrastructure provider. - properties: - cloudControllerManager: - description: |- - cloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI). - When omitted, new nodes will be not tainted - and no extra initialization from the cloud controller manager is expected. - properties: - state: - description: |- - state determines whether or not an external Cloud Controller Manager is expected to - be installed within the cluster. - https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager - - Valid values are "External", "None" and omitted. - When set to "External", new nodes will be tainted as uninitialized when created, - preventing them from running workloads until they are initialized by the cloud controller manager. - When omitted or set to "None", new nodes will be not tainted - and no extra initialization from the cloud controller manager is expected. - enum: - - "" - - External - - None - type: string - x-kubernetes-validations: - - message: state is immutable once set - rule: self == oldSelf - type: object - x-kubernetes-validations: - - message: state may not be added or removed once set - rule: (has(self.state) == has(oldSelf.state)) || (!has(oldSelf.state) - && self.state != "External") - type: object - x-kubernetes-validations: - - message: cloudControllerManager may not be added or removed - once set - rule: has(self.cloudControllerManager) == has(oldSelf.cloudControllerManager) - gcp: - description: gcp contains settings specific to the Google Cloud - Platform infrastructure provider. - properties: - projectID: - description: resourceGroupName is the Project ID for new GCP - resources created for the cluster. - type: string - region: - description: region holds the region for new GCP resources - created for the cluster. - type: string - resourceLabels: - description: |- - resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. - See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. - GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, - allowing 32 labels for user configuration. - items: - description: GCPResourceLabel is a label to apply to GCP - resources created for the cluster. - properties: - key: - description: |- - key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. - Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, - and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` - and `openshift-io`. - maxLength: 63 - minLength: 1 - pattern: ^[a-z][0-9a-z_-]{0,62}$ - type: string - x-kubernetes-validations: - - message: label keys must not start with either `openshift-io` - or `kubernetes-io` - rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' - value: - description: |- - value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. - Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. - maxLength: 63 - minLength: 1 - pattern: ^[0-9a-z_-]{1,63}$ - type: string - required: - - key - - value - type: object - maxItems: 32 - type: array - x-kubernetes-list-map-keys: - - key - x-kubernetes-list-type: map - x-kubernetes-validations: - - message: resourceLabels are immutable and may only be configured - during installation - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) - resourceTags: - description: |- - resourceTags is a list of additional tags to apply to GCP resources created for the cluster. - See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on - tagging GCP resources. GCP supports a maximum of 50 tags per resource. - items: - description: GCPResourceTag is a tag to apply to GCP resources - created for the cluster. - properties: - key: - description: |- - key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. - Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase - alphanumeric characters, and the following special characters `._-`. - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ - type: string - parentID: - description: |- - parentID is the ID of the hierarchical resource where the tags are defined, - e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: - https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, - https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. - An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. - A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, - and hyphens, and must start with a letter, and cannot end with a hyphen. - maxLength: 32 - minLength: 1 - pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) - type: string - value: - description: |- - value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. - Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase - alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ - type: string - required: - - key - - parentID - - value - type: object - maxItems: 50 - type: array - x-kubernetes-list-map-keys: - - key - x-kubernetes-list-type: map - x-kubernetes-validations: - - message: resourceTags are immutable and may only be configured - during installation - rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) - type: object - x-kubernetes-validations: - - message: resourceLabels may only be configured during installation - rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) - || has(oldSelf.resourceLabels) && has(self.resourceLabels)' - - message: resourceTags may only be configured during installation - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) - || has(oldSelf.resourceTags) && has(self.resourceTags)' - ibmcloud: - description: ibmcloud contains settings specific to the IBMCloud - infrastructure provider. - properties: - cisInstanceCRN: - description: |- - cisInstanceCRN is the CRN of the Cloud Internet Services instance managing - the DNS zone for the cluster's base domain - type: string - dnsInstanceCRN: - description: |- - dnsInstanceCRN is the CRN of the DNS Services instance managing the DNS zone - for the cluster's base domain - type: string - location: - description: location is where the cluster has been deployed - type: string - providerType: - description: providerType indicates the type of cluster that - was created - type: string - resourceGroupName: - description: resourceGroupName is the Resource Group for new - IBMCloud resources created for the cluster. - type: string - serviceEndpoints: - description: |- - serviceEndpoints is a list of custom endpoints which will override the default - service endpoints of an IBM service. These endpoints are used by components - within the cluster when trying to reach the IBM Cloud Services that have been - overriden. The CCCMO reads in the IBMCloudPlatformSpec and validates each - endpoint is resolvable. Once validated, the cloud config and IBMCloudPlatformStatus - are updated to reflect the same custom endpoints. - items: - description: |- - IBMCloudServiceEndpoint stores the configuration of a custom url to - override existing defaults of IBM Cloud Services. - properties: - name: - description: |- - name is the name of the IBM Cloud service. - Possible values are: CIS, COS, COSConfig, DNSServices, GlobalCatalog, GlobalSearch, GlobalTagging, HyperProtect, IAM, KeyProtect, ResourceController, ResourceManager, or VPC. - For example, the IBM Cloud Private IAM service could be configured with the - service `name` of `IAM` and `url` of `https://private.iam.cloud.ibm.com` - Whereas the IBM Cloud Private VPC service for US South (Dallas) could be configured - with the service `name` of `VPC` and `url` of `https://us.south.private.iaas.cloud.ibm.com` - enum: - - CIS - - COS - - COSConfig - - DNSServices - - GlobalCatalog - - GlobalSearch - - GlobalTagging - - HyperProtect - - IAM - - KeyProtect - - ResourceController - - ResourceManager - - VPC - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. The path must follow the pattern - /v[0,9]+ or /api/v[0,9]+ - maxLength: 300 - type: string - x-kubernetes-validations: - - message: url must be a valid absolute URL - rule: isURL(self) - required: - - name - - url - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - type: object - kubevirt: - description: kubevirt contains settings specific to the kubevirt - infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - type: string - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - type: string - type: object - nutanix: - description: nutanix contains settings specific to the Nutanix - infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer used - by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on Nutanix platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - type: object - openstack: - description: openstack contains settings specific to the OpenStack - infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - cloudName: - description: |- - cloudName is the name of the desired OpenStack cloud in the - client configuration file (`clouds.yaml`). - type: string - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer used - by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on OpenStack platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - machineNetworks: - description: machineNetworks are IP networks used to connect - all the OpenShift cluster nodes. - items: - description: CIDR is an IP address range in CIDR notation - (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeDNSIP: - description: |- - nodeDNSIP is the IP address for the internal DNS used by the - nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` - provides name resolution for the nodes themselves. There is no DNS-as-a-service for - OpenStack deployments. In order to minimize necessary changes to the - datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames - to the nodes in the cluster. - type: string - type: object - ovirt: - description: ovirt contains settings specific to the oVirt infrastructure - provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer used - by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on Ovirt platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - nodeDNSIP: - description: 'deprecated: as of 4.6, this field is no longer - set or honored. It will be removed in a future release.' - type: string - type: object - powervs: - description: powervs contains settings specific to the Power Systems - Virtual Servers infrastructure provider. - properties: - cisInstanceCRN: - description: |- - cisInstanceCRN is the CRN of the Cloud Internet Services instance managing - the DNS zone for the cluster's base domain - type: string - dnsInstanceCRN: - description: |- - dnsInstanceCRN is the CRN of the DNS Services instance managing the DNS zone - for the cluster's base domain - type: string - region: - description: region holds the default Power VS region for - new Power VS resources created by the cluster. - type: string - resourceGroup: - description: |- - resourceGroup is the resource group name for new IBMCloud resources created for a cluster. - The resource group specified here will be used by cluster-image-registry-operator to set up a COS Instance in IBMCloud for the cluster registry. - More about resource groups can be found here: https://cloud.ibm.com/docs/account?topic=account-rgs. - When omitted, the image registry operator won't be able to configure storage, - which results in the image registry cluster operator not being in an available state. - maxLength: 40 - pattern: ^[a-zA-Z0-9-_ ]+$ - type: string - x-kubernetes-validations: - - message: resourceGroup is immutable once set - rule: oldSelf == '' || self == oldSelf - serviceEndpoints: - description: |- - serviceEndpoints is a list of custom endpoints which will override the default - service endpoints of a Power VS service. - items: - description: |- - PowervsServiceEndpoint stores the configuration of a custom url to - override existing defaults of PowerVS Services. - properties: - name: - description: |- - name is the name of the Power VS service. - Few of the services are - IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api - ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller - Power Cloud - https://cloud.ibm.com/apidocs/power-cloud - enum: - - CIS - - COS - - COSConfig - - DNSServices - - GlobalCatalog - - GlobalSearch - - GlobalTagging - - HyperProtect - - IAM - - KeyProtect - - Power - - ResourceController - - ResourceManager - - VPC - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - format: uri - pattern: ^https:// - type: string - required: - - name - - url - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - zone: - description: |- - zone holds the default zone for the new Power VS resources created by the cluster. - Note: Currently only single-zone OCP clusters are supported - type: string - type: object - x-kubernetes-validations: - - message: cannot unset resourceGroup once set - rule: '!has(oldSelf.resourceGroup) || has(self.resourceGroup)' - type: - description: |- - type is the underlying infrastructure provider for the cluster. This - value controls whether infrastructure automation such as service load - balancers, dynamic volume provisioning, machine creation and deletion, and - other integrations are enabled. If None, no infrastructure automation is - enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", - "OpenStack", "VSphere", "oVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". - Individual components may not support all platforms, and must handle - unrecognized platforms as None if they do not support that platform. - - This value will be synced with to the `status.platform` and `status.platformStatus.type`. - Currently this value cannot be changed once set. - enum: - - "" - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - - AlibabaCloud - - Nutanix - - External - type: string - vsphere: - description: vsphere contains settings specific to the VSphere - infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 address - and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer used - by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on VSphere platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - machineNetworks: - description: machineNetworks are IP networks used to connect - all the OpenShift cluster nodes. - items: - description: CIDR is an IP address range in CIDR notation - (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeDNSIP: - description: |- - nodeDNSIP is the IP address for the internal DNS used by the - nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` - provides name resolution for the nodes themselves. There is no DNS-as-a-service for - vSphere deployments. In order to minimize necessary changes to the - datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames - to the nodes in the cluster. - type: string - type: object - type: object - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml index 29d1c8964bb..81ce23f73cd 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter+DualReplica.yaml @@ -1489,7 +1489,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml index fd2ac516dc2..3173a042f70 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/HighlyAvailableArbiter.yaml @@ -1487,7 +1487,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/NutanixMultiSubnets.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/NutanixMultiSubnets.yaml index 5bf4f5cabf4..5872ee8d544 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/NutanixMultiSubnets.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/NutanixMultiSubnets.yaml @@ -1487,7 +1487,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereHostVMGroupZonal.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereHostVMGroupZonal.yaml index ff188967358..c1d70e8cc69 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereHostVMGroupZonal.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereHostVMGroupZonal.yaml @@ -1493,7 +1493,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereMultiNetworks.yaml b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereMultiNetworks.yaml index a60c3ee9aad..c935909f1ac 100644 --- a/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereMultiNetworks.yaml +++ b/config/v1/zz_generated.featuregated-crd-manifests/infrastructures.config.openshift.io/VSphereMultiNetworks.yaml @@ -1483,7 +1483,113 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply to GCP + resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either `openshift-io` + or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to GCP resources + created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only be configured + during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/features.md b/features.md index d4122e7566f..4de4ff14f9d 100644 --- a/features.md +++ b/features.md @@ -74,7 +74,6 @@ | CPMSMachineNamePrefix| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | ChunkSizeMiB| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | ConsolePluginContentSecurityPolicy| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | -| GCPLabelsTags| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | GatewayAPI| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | GatewayAPIController| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | | HardwareSpeed| Enabled | Enabled | Enabled | Enabled | Enabled | Enabled | diff --git a/features/features.go b/features/features.go index 2c9645f9abb..ee73a8535e5 100644 --- a/features/features.go +++ b/features/features.go @@ -179,14 +179,6 @@ var ( enableIn(configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). mustRegister() - FeatureGateGCPLabelsTags = newFeatureGate("GCPLabelsTags"). - reportProblemsToJiraComponent("Installer"). - contactPerson("bhb"). - productScope(ocpSpecific). - enhancementPR(legacyFeatureGateWithoutEnhancement). - enableIn(configv1.Default, configv1.DevPreviewNoUpgrade, configv1.TechPreviewNoUpgrade). - mustRegister() - FeatureGateAlibabaPlatform = newFeatureGate("AlibabaPlatform"). reportProblemsToJiraComponent("cloud-provider"). contactPerson("jspeed"). diff --git a/features/legacyfeaturegates.go b/features/legacyfeaturegates.go index 67572c31ca4..ae3f1ecf0f7 100644 --- a/features/legacyfeaturegates.go +++ b/features/legacyfeaturegates.go @@ -39,8 +39,6 @@ var legacyFeatureGates = sets.New( // never add to this list, if you think you have an exception ask @deads2k "GCPClusterHostedDNS", // never add to this list, if you think you have an exception ask @deads2k - "GCPLabelsTags", - // never add to this list, if you think you have an exception ask @deads2k "GatewayAPI", // never add to this list, if you think you have an exception ask @deads2k "HardwareSpeed", diff --git a/machineconfiguration/v1/tests/controllerconfigs.machineconfiguration.openshift.io/GCPLabelsTags.yaml b/machineconfiguration/v1/tests/controllerconfigs.machineconfiguration.openshift.io/GCPLabelsTags.yaml index 859c14ca6c7..2fe8165cda3 100644 --- a/machineconfiguration/v1/tests/controllerconfigs.machineconfiguration.openshift.io/GCPLabelsTags.yaml +++ b/machineconfiguration/v1/tests/controllerconfigs.machineconfiguration.openshift.io/GCPLabelsTags.yaml @@ -1,8 +1,6 @@ apiVersion: apiextensions.k8s.io/v1 # Hack because controller-gen complains if we don't have this name: "Shamefully missing" crdName: controllerconfigs.machineconfiguration.openshift.io -featureGates: -- GCPLabelsTags tests: onCreate: - name: Should be able to create a minimal ControllerConfig diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml index beb838caf60..c290c60eba5 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests.yaml @@ -33,7 +33,6 @@ controllerconfigs.machineconfiguration.openshift.io: - DyanmicServiceEndpointIBMCloud - GCPClusterHostedDNS - GCPCustomAPIEndpoints - - GCPLabelsTags - HighlyAvailableArbiter - HighlyAvailableArbiter+DualReplica - NutanixMultiSubnets diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AAA_ungated.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AAA_ungated.yaml index c692a640c71..095f164ce81 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AAA_ungated.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AAA_ungated.yaml @@ -1786,7 +1786,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AWSClusterHostedDNS.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AWSClusterHostedDNS.yaml index 20e14ebb02e..17e904a9d67 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AWSClusterHostedDNS.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/AWSClusterHostedDNS.yaml @@ -1884,7 +1884,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DualReplica.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DualReplica.yaml index 89125626810..769de591b18 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DualReplica.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DualReplica.yaml @@ -1785,7 +1785,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DyanmicServiceEndpointIBMCloud.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DyanmicServiceEndpointIBMCloud.yaml index 5961835f211..c48d3483051 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DyanmicServiceEndpointIBMCloud.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/DyanmicServiceEndpointIBMCloud.yaml @@ -1843,7 +1843,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPClusterHostedDNS.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPClusterHostedDNS.yaml index 94241065120..99536ebc072 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPClusterHostedDNS.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPClusterHostedDNS.yaml @@ -1884,7 +1884,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPCustomAPIEndpoints.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPCustomAPIEndpoints.yaml index 81a0876fae1..f7d09fbeaa4 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPCustomAPIEndpoints.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPCustomAPIEndpoints.yaml @@ -1780,6 +1780,108 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) serviceEndpoints: description: |- serviceEndpoints specifies endpoints that override the default endpoints @@ -1846,6 +1948,15 @@ spec: GCP service name rule: self.all(x, self.exists_one(y, x.name == y.name)) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPLabelsTags.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPLabelsTags.yaml deleted file mode 100644 index ba1a33ecf6f..00000000000 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/GCPLabelsTags.yaml +++ /dev/null @@ -1,2760 +0,0 @@ -apiVersion: apiextensions.k8s.io/v1 -kind: CustomResourceDefinition -metadata: - annotations: - api-approved.openshift.io: https://github.com/openshift/api/pull/1453 - api.openshift.io/filename-cvo-runlevel: "0000_80" - api.openshift.io/filename-operator: machine-config - api.openshift.io/filename-ordering: "01" - feature-gate.release.openshift.io/GCPLabelsTags: "true" - labels: - openshift.io/operator-managed: "" - name: controllerconfigs.machineconfiguration.openshift.io -spec: - group: machineconfiguration.openshift.io - names: - kind: ControllerConfig - listKind: ControllerConfigList - plural: controllerconfigs - singular: controllerconfig - scope: Cluster - versions: - - name: v1 - schema: - openAPIV3Schema: - description: |- - ControllerConfig describes configuration for MachineConfigController. - This is currently only used to drive the MachineConfig objects generated by the TemplateController. - - 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 contains the desired controller config configuration. - properties: - additionalTrustBundle: - description: |- - additionalTrustBundle is a certificate bundle that will be added to the nodes - trusted certificate store. - format: byte - nullable: true - type: string - baseOSContainerImage: - description: baseOSContainerImage is the new-format container image - for operating system updates. - type: string - baseOSExtensionsContainerImage: - description: baseOSExtensionsContainerImage is the matching extensions - container for the new-format container - type: string - cloudProviderCAData: - description: cloudProviderCAData specifies the cloud provider CA data - format: byte - nullable: true - type: string - cloudProviderConfig: - description: cloudProviderConfig is the configuration for the given - cloud provider - type: string - clusterDNSIP: - description: clusterDNSIP is the cluster DNS IP address - type: string - dns: - description: dns holds the cluster dns details - nullable: true - 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: - description: |- - metadata is the standard object's metadata. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - type: object - spec: - description: spec holds user settable values for configuration - properties: - baseDomain: - description: |- - baseDomain is the base domain of the cluster. All managed DNS records will - be sub-domains of this base. - - For example, given the base domain `openshift.example.com`, an API server - DNS record may be created for `cluster-api.openshift.example.com`. - - Once set, this field cannot be changed. - type: string - platform: - description: |- - platform holds configuration specific to the underlying - infrastructure provider for DNS. - When omitted, this means the user has no opinion and the platform is left - to choose reasonable defaults. These defaults are subject to change over time. - properties: - aws: - description: aws contains DNS configuration specific to - the Amazon Web Services cloud provider. - properties: - privateZoneIAMRole: - description: |- - privateZoneIAMRole contains the ARN of an IAM role that should be assumed when performing - operations on the cluster's private hosted zone specified in the cluster DNS config. - When left empty, no role should be assumed. - pattern: ^arn:(aws|aws-cn|aws-us-gov):iam::[0-9]{12}:role\/.*$ - type: string - type: object - type: - description: |- - type is the underlying infrastructure provider for the cluster. - Allowed values: "", "AWS". - - Individual components may not support all platforms, - and must handle unrecognized platforms with best-effort defaults. - enum: - - "" - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - - AlibabaCloud - - Nutanix - - External - type: string - x-kubernetes-validations: - - message: allowed values are '' and 'AWS' - rule: self in ['','AWS'] - required: - - type - type: object - x-kubernetes-validations: - - message: aws configuration is required when platform is - AWS, and forbidden otherwise - rule: 'has(self.type) && self.type == ''AWS'' ? has(self.aws) - : !has(self.aws)' - privateZone: - description: |- - privateZone is the location where all the DNS records that are only available internally - to the cluster exist. - - If this field is nil, no private records should be created. - - Once set, this field cannot be changed. - properties: - id: - description: |- - id is the identifier that can be used to find the DNS hosted zone. - - on AWS zone can be fetched using `ID` as id in [1] - on Azure zone can be fetched using `ID` as a pre-determined name in [2], - on GCP zone can be fetched using `ID` as a pre-determined name in [3]. - - [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options - [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show - [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get - type: string - tags: - additionalProperties: - type: string - description: |- - tags can be used to query the DNS hosted zone. - - on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, - - [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options - type: object - type: object - publicZone: - description: |- - publicZone is the location where all the DNS records that are publicly accessible to - the internet exist. - - If this field is nil, no public records should be created. - - Once set, this field cannot be changed. - properties: - id: - description: |- - id is the identifier that can be used to find the DNS hosted zone. - - on AWS zone can be fetched using `ID` as id in [1] - on Azure zone can be fetched using `ID` as a pre-determined name in [2], - on GCP zone can be fetched using `ID` as a pre-determined name in [3]. - - [1]: https://docs.aws.amazon.com/cli/latest/reference/route53/get-hosted-zone.html#options - [2]: https://docs.microsoft.com/en-us/cli/azure/network/dns/zone?view=azure-cli-latest#az-network-dns-zone-show - [3]: https://cloud.google.com/dns/docs/reference/v1/managedZones/get - type: string - tags: - additionalProperties: - type: string - description: |- - tags can be used to query the DNS hosted zone. - - on AWS, resourcegroupstaggingapi [1] can be used to fetch a zone using `Tags` as tag-filters, - - [1]: https://docs.aws.amazon.com/cli/latest/reference/resourcegroupstaggingapi/get-resources.html#options - type: object - type: object - type: object - status: - description: status holds observed values from the cluster. They - may not be overridden. - type: object - required: - - spec - type: object - x-kubernetes-embedded-resource: true - etcdDiscoveryDomain: - description: etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain - instead - type: string - imageRegistryBundleData: - description: imageRegistryBundleData is the ImageRegistryData - items: - description: ImageRegistryBundle contains information for writing - image registry certificates - properties: - data: - description: data holds the contents of the bundle that will - be written to the file location - format: byte - type: string - file: - description: file holds the name of the file where the bundle - will be written to disk - type: string - required: - - data - - file - type: object - type: array - x-kubernetes-list-type: atomic - imageRegistryBundleUserData: - description: imageRegistryBundleUserData is Image Registry Data provided - by the user - items: - description: ImageRegistryBundle contains information for writing - image registry certificates - properties: - data: - description: data holds the contents of the bundle that will - be written to the file location - format: byte - type: string - file: - description: file holds the name of the file where the bundle - will be written to disk - type: string - required: - - data - - file - type: object - type: array - x-kubernetes-list-type: atomic - images: - additionalProperties: - type: string - description: images is map of images that are used by the controller - to render templates under ./templates/ - type: object - infra: - description: infra holds the infrastructure details - nullable: true - 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: - description: |- - metadata is the standard object's metadata. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#metadata - type: object - spec: - description: spec holds user settable values for configuration - properties: - cloudConfig: - description: |- - cloudConfig is a reference to a ConfigMap containing the cloud provider configuration file. - This configuration file is used to configure the Kubernetes cloud provider integration - when using the built-in cloud provider integration or the external cloud controller manager. - The namespace for this config map is openshift-config. - - cloudConfig should only be consumed by the kube_cloud_config controller. - The controller is responsible for using the user configuration in the spec - for various platforms and combining that with the user provided ConfigMap in this field - to create a stitched kube cloud config. - The controller generates a ConfigMap `kube-cloud-config` in `openshift-config-managed` namespace - with the kube cloud config is stored in `cloud.conf` key. - All the clients are expected to use the generated ConfigMap only. - properties: - key: - description: key allows pointing to a specific key/value - inside of the configmap. This is useful for logical - file references. - type: string - name: - type: string - type: object - platformSpec: - description: |- - platformSpec holds desired information specific to the underlying - infrastructure provider. - properties: - alibabaCloud: - description: alibabaCloud contains settings specific to - the Alibaba Cloud infrastructure provider. - type: object - aws: - description: aws contains settings specific to the Amazon - Web Services infrastructure provider. - properties: - serviceEndpoints: - description: |- - serviceEndpoints list contains custom endpoints which will override default - service endpoint of AWS Services. - There must be only one ServiceEndpoint for a service. - items: - description: |- - AWSServiceEndpoint store the configuration of a custom url to - override existing defaults of AWS Services. - properties: - name: - description: |- - name is the name of the AWS service. - The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html - This must be provided and cannot be empty. - pattern: ^[a-z0-9-]+$ - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - pattern: ^https:// - type: string - type: object - type: array - x-kubernetes-list-type: atomic - type: object - azure: - description: azure contains settings specific to the Azure - infrastructure provider. - type: object - baremetal: - description: baremetal contains settings specific to the - BareMetal platform. - properties: - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.apiServerInternalIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() - : true' - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.ingressIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() - : true' - machineNetworks: - description: |- - machineNetworks are IP networks used to connect all the OpenShift cluster - nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, - for example "10.0.0.0/8" or "fd00::/8". - items: - description: CIDR is an IP address range in CIDR - notation (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - type: object - x-kubernetes-validations: - - message: apiServerInternalIPs list is required once - set - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' - - message: ingressIPs list is required once set - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' - equinixMetal: - description: equinixMetal contains settings specific to - the Equinix Metal infrastructure provider. - type: object - external: - description: |- - ExternalPlatformType represents generic infrastructure provider. - Platform-specific components should be supplemented separately. - properties: - platformName: - default: Unknown - description: |- - platformName holds the arbitrary string representing the infrastructure provider name, expected to be set at the installation time. - This field is solely for informational and reporting purposes and is not expected to be used for decision-making. - type: string - x-kubernetes-validations: - - message: platform name cannot be changed once set - rule: oldSelf == 'Unknown' || self == oldSelf - type: object - gcp: - description: gcp contains settings specific to the Google - Cloud Platform infrastructure provider. - type: object - ibmcloud: - description: ibmcloud contains settings specific to the - IBMCloud infrastructure provider. - type: object - kubevirt: - description: kubevirt contains settings specific to the - kubevirt infrastructure provider. - type: object - nutanix: - description: nutanix contains settings specific to the - Nutanix infrastructure provider. - properties: - failureDomains: - description: |- - failureDomains configures failure domains information for the Nutanix platform. - When set, the failure domains defined here may be used to spread Machines across - prism element clusters to improve fault tolerance of the cluster. - items: - description: NutanixFailureDomain configures failure - domain information for the Nutanix platform. - properties: - cluster: - description: |- - cluster is to identify the cluster (the Prism Element under management of the Prism Central), - in which the Machine's VM will be created. The cluster identifier (uuid or name) can be obtained - from the Prism Central console or using the prism_central API. - properties: - name: - description: name is the resource name in - the PC. It cannot be empty if the type - is Name. - type: string - type: - description: type is the identifier type - to use for this resource. - enum: - - UUID - - Name - type: string - uuid: - description: uuid is the UUID of the resource - in the PC. It cannot be empty if the type - is UUID. - type: string - required: - - type - type: object - x-kubernetes-validations: - - message: uuid configuration is required when - type is UUID, and forbidden otherwise - rule: 'has(self.type) && self.type == ''UUID'' - ? has(self.uuid) : !has(self.uuid)' - - message: name configuration is required when - type is Name, and forbidden otherwise - rule: 'has(self.type) && self.type == ''Name'' - ? has(self.name) : !has(self.name)' - name: - description: |- - name defines the unique name of a failure domain. - Name is required and must be at most 64 characters in length. - It must consist of only lower case alphanumeric characters and hyphens (-). - It must start and end with an alphanumeric character. - This value is arbitrary and is used to identify the failure domain within the platform. - maxLength: 64 - minLength: 1 - pattern: '[a-z0-9]([-a-z0-9]*[a-z0-9])?' - type: string - subnets: - description: |- - subnets holds a list of identifiers (one or more) of the cluster's network subnets - If the feature gate NutanixMultiSubnets is enabled, up to 32 subnets may be configured. - for the Machine's VM to connect to. The subnet identifiers (uuid or name) can be - obtained from the Prism Central console or using the prism_central API. - items: - description: NutanixResourceIdentifier holds - the identity of a Nutanix PC resource (cluster, - image, subnet, etc.) - properties: - name: - description: name is the resource name - in the PC. It cannot be empty if the - type is Name. - type: string - type: - description: type is the identifier type - to use for this resource. - enum: - - UUID - - Name - type: string - uuid: - description: uuid is the UUID of the resource - in the PC. It cannot be empty if the - type is UUID. - type: string - required: - - type - type: object - x-kubernetes-validations: - - message: uuid configuration is required - when type is UUID, and forbidden otherwise - rule: 'has(self.type) && self.type == ''UUID'' - ? has(self.uuid) : !has(self.uuid)' - - message: name configuration is required - when type is Name, and forbidden otherwise - rule: 'has(self.type) && self.type == ''Name'' - ? has(self.name) : !has(self.name)' - minItems: 1 - type: array - x-kubernetes-list-type: atomic - required: - - cluster - - name - - subnets - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - prismCentral: - description: |- - prismCentral holds the endpoint address and port to access the Nutanix Prism Central. - When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. - Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the - proxy spec.noProxy list. - properties: - address: - description: address is the endpoint address (DNS - name or IP address) of the Nutanix Prism Central - or Element (cluster) - maxLength: 256 - type: string - port: - description: port is the port number to access - the Nutanix Prism Central or Element (cluster) - format: int32 - maximum: 65535 - minimum: 1 - type: integer - required: - - address - - port - type: object - prismElements: - description: |- - prismElements holds one or more endpoint address and port data to access the Nutanix - Prism Elements (clusters) of the Nutanix Prism Central. Currently we only support one - Prism Element (cluster) for an OpenShift cluster, where all the Nutanix resources (VMs, subnets, volumes, etc.) - used in the OpenShift cluster are located. In the future, we may support Nutanix resources (VMs, etc.) - spread over multiple Prism Elements (clusters) of the Prism Central. - items: - description: NutanixPrismElementEndpoint holds the - name and endpoint data for a Prism Element (cluster) - properties: - endpoint: - description: |- - endpoint holds the endpoint address and port data of the Prism Element (cluster). - When a cluster-wide proxy is installed, by default, this endpoint will be accessed via the proxy. - Should you wish for communication with this endpoint not to be proxied, please add the endpoint to the - proxy spec.noProxy list. - properties: - address: - description: address is the endpoint address - (DNS name or IP address) of the Nutanix - Prism Central or Element (cluster) - maxLength: 256 - type: string - port: - description: port is the port number to - access the Nutanix Prism Central or Element - (cluster) - format: int32 - maximum: 65535 - minimum: 1 - type: integer - required: - - address - - port - type: object - name: - description: |- - name is the name of the Prism Element (cluster). This value will correspond with - the cluster field configured on other resources (eg Machines, PVCs, etc). - maxLength: 256 - type: string - required: - - endpoint - - name - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - required: - - prismCentral - - prismElements - type: object - openstack: - description: openstack contains settings specific to the - OpenStack infrastructure provider. - properties: - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.apiServerInternalIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() - : true' - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.ingressIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() - : true' - machineNetworks: - description: |- - machineNetworks are IP networks used to connect all the OpenShift cluster - nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, - for example "10.0.0.0/8" or "fd00::/8". - items: - description: CIDR is an IP address range in CIDR - notation (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - type: object - x-kubernetes-validations: - - message: apiServerInternalIPs list is required once - set - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' - - message: ingressIPs list is required once set - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' - ovirt: - description: ovirt contains settings specific to the oVirt - infrastructure provider. - type: object - powervs: - description: powervs contains settings specific to the - IBM Power Systems Virtual Servers infrastructure provider. - properties: - serviceEndpoints: - description: |- - serviceEndpoints is a list of custom endpoints which will override the default - service endpoints of a Power VS service. - items: - description: |- - PowervsServiceEndpoint stores the configuration of a custom url to - override existing defaults of PowerVS Services. - properties: - name: - description: |- - name is the name of the Power VS service. - Few of the services are - IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api - ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller - Power Cloud - https://cloud.ibm.com/apidocs/power-cloud - enum: - - CIS - - COS - - COSConfig - - DNSServices - - GlobalCatalog - - GlobalSearch - - GlobalTagging - - HyperProtect - - IAM - - KeyProtect - - Power - - ResourceController - - ResourceManager - - VPC - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - format: uri - pattern: ^https:// - type: string - required: - - name - - url - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - type: object - type: - description: |- - type is the underlying infrastructure provider for the cluster. This - value controls whether infrastructure automation such as service load - balancers, dynamic volume provisioning, machine creation and deletion, and - other integrations are enabled. If None, no infrastructure automation is - enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", - "OpenStack", "VSphere", "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", - "AlibabaCloud", "Nutanix" and "None". Individual components may not support all platforms, - and must handle unrecognized platforms as None if they do not support that platform. - enum: - - "" - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - - AlibabaCloud - - Nutanix - - External - type: string - vsphere: - description: vsphere contains settings specific to the - VSphere infrastructure provider. - properties: - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.apiServerInternalIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() - : true' - failureDomains: - description: |- - failureDomains contains the definition of region, zone and the vCenter topology. - If this is omitted failure domains (regions and zones) will not be used. - items: - description: VSpherePlatformFailureDomainSpec holds - the region and zone failure domain and the vCenter - topology of that failure domain. - properties: - name: - description: |- - name defines the arbitrary but unique name - of a failure domain. - maxLength: 256 - minLength: 1 - type: string - region: - description: |- - region defines the name of a region tag that will - be attached to a vCenter datacenter. The tag - category in vCenter must be named openshift-region. - maxLength: 80 - minLength: 1 - type: string - regionAffinity: - description: |- - regionAffinity holds the type of region, Datacenter or ComputeCluster. - When set to Datacenter, this means the region is a vCenter Datacenter as defined in topology. - When set to ComputeCluster, this means the region is a vCenter Cluster as defined in topology. - properties: - type: - description: |- - type determines the vSphere object type for a region within this failure domain. - Available types are Datacenter and ComputeCluster. - When set to Datacenter, this means the vCenter Datacenter defined is the region. - When set to ComputeCluster, this means the vCenter cluster defined is the region. - enum: - - ComputeCluster - - Datacenter - type: string - required: - - type - type: object - server: - description: server is the fully-qualified domain - name or the IP address of the vCenter server. - maxLength: 255 - minLength: 1 - type: string - topology: - description: topology describes a given failure - domain using vSphere constructs - properties: - computeCluster: - description: |- - computeCluster the absolute path of the vCenter cluster - in which virtual machine will be located. - The absolute path is of the form //host/. - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/host/.*? - type: string - datacenter: - description: |- - datacenter is the name of vCenter datacenter in which virtual machines will be located. - The maximum length of the datacenter name is 80 characters. - maxLength: 80 - type: string - datastore: - description: |- - datastore is the absolute path of the datastore in which the - virtual machine is located. - The absolute path is of the form //datastore/ - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/datastore/.*? - type: string - folder: - description: |- - folder is the absolute path of the folder where - virtual machines are located. The absolute path - is of the form //vm/. - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/vm/.*? - type: string - networks: - description: |- - networks is the list of port group network names within this failure domain. - If feature gate VSphereMultiNetworks is enabled, up to 10 network adapters may be defined. - 10 is the maximum number of virtual network devices which may be attached to a VM as defined by: - https://configmax.esp.vmware.com/guest?vmwareproduct=vSphere&release=vSphere%208.0&categories=1-0 - The available networks (port groups) can be listed using - `govc ls 'network/*'` - Networks should be in the form of an absolute path: - //network/. - items: - type: string - minItems: 1 - type: array - x-kubernetes-list-type: atomic - resourcePool: - description: |- - resourcePool is the absolute path of the resource pool where virtual machines will be - created. The absolute path is of the form //host//Resources/. - The maximum length of the path is 2048 characters. - maxLength: 2048 - pattern: ^/.*?/host/.*?/Resources.* - type: string - template: - description: |- - template is the full inventory path of the virtual machine or template - that will be cloned when creating new machines in this failure domain. - The maximum length of the path is 2048 characters. - - When omitted, the template will be calculated by the control plane - machineset operator based on the region and zone defined in - VSpherePlatformFailureDomainSpec. - For example, for zone=zonea, region=region1, and infrastructure name=test, - the template path would be calculated as //vm/test-rhcos-region1-zonea. - maxLength: 2048 - minLength: 1 - pattern: ^/.*?/vm/.*? - type: string - required: - - computeCluster - - datacenter - - datastore - - networks - type: object - zone: - description: |- - zone defines the name of a zone tag that will - be attached to a vCenter cluster. The tag - category in vCenter must be named openshift-zone. - maxLength: 80 - minLength: 1 - type: string - zoneAffinity: - description: |- - zoneAffinity holds the type of the zone and the hostGroup which - vmGroup and the hostGroup names in vCenter corresponds to - a vm-host group of type Virtual Machine and Host respectively. Is also - contains the vmHostRule which is an affinity vm-host rule in vCenter. - properties: - hostGroup: - description: |- - hostGroup holds the vmGroup and the hostGroup names in vCenter - corresponds to a vm-host group of type Virtual Machine and Host respectively. Is also - contains the vmHostRule which is an affinity vm-host rule in vCenter. - properties: - hostGroup: - description: |- - hostGroup is the name of the vm-host group of type host within vCenter for this failure domain. - hostGroup is limited to 80 characters. - This field is required when the VSphereFailureDomain ZoneType is HostGroup - maxLength: 80 - minLength: 1 - type: string - vmGroup: - description: |- - vmGroup is the name of the vm-host group of type virtual machine within vCenter for this failure domain. - vmGroup is limited to 80 characters. - This field is required when the VSphereFailureDomain ZoneType is HostGroup - maxLength: 80 - minLength: 1 - type: string - vmHostRule: - description: |- - vmHostRule is the name of the affinity vm-host rule within vCenter for this failure domain. - vmHostRule is limited to 80 characters. - This field is required when the VSphereFailureDomain ZoneType is HostGroup - maxLength: 80 - minLength: 1 - type: string - required: - - hostGroup - - vmGroup - - vmHostRule - type: object - type: - description: |- - type determines the vSphere object type for a zone within this failure domain. - Available types are ComputeCluster and HostGroup. - When set to ComputeCluster, this means the vCenter cluster defined is the zone. - When set to HostGroup, hostGroup must be configured with hostGroup, vmGroup and vmHostRule and - this means the zone is defined by the grouping of those fields. - enum: - - HostGroup - - ComputeCluster - type: string - required: - - type - type: object - x-kubernetes-validations: - - message: hostGroup is required when type is - HostGroup, and forbidden otherwise - rule: 'has(self.type) && self.type == ''HostGroup'' - ? has(self.hostGroup) : !has(self.hostGroup)' - required: - - name - - region - - server - - topology - - zone - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. - In dual stack clusters this list contains two IP addresses, one from IPv4 - family and one from IPv6. - In single stack clusters a single IP address is expected. - When omitted, values from the status.ingressIPs will be used. - Once set, the list cannot be completely removed (but its second entry can). - items: - description: IP is an IP address (for example, "10.0.0.0" - or "fd00::"). - maxLength: 39 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid IP address - rule: isIP(self) - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'size(self) == 2 && isIP(self[0]) && isIP(self[1]) - ? ip(self[0]).family() != ip(self[1]).family() - : true' - machineNetworks: - description: |- - machineNetworks are IP networks used to connect all the OpenShift cluster - nodes. Each network is provided in the CIDR format and should be IPv4 or IPv6, - for example "10.0.0.0/8" or "fd00::/8". - items: - description: CIDR is an IP address range in CIDR - notation (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeNetworking: - description: |- - nodeNetworking contains the definition of internal and external network constraints for - assigning the node's networking. - If this field is omitted, networking defaults to the legacy - address selection behavior which is to only support a single address and - return the first one found. - properties: - external: - description: external represents the network configuration - of the node that is externally routable. - properties: - excludeNetworkSubnetCidr: - description: |- - excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting - the IP address from the VirtualMachine's VM for use in the status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: atomic - network: - description: |- - network VirtualMachine's VM Network names that will be used to when searching - for status.addresses fields. Note that if internal.networkSubnetCIDR and - external.networkSubnetCIDR are not set, then the vNIC associated to this network must - only have a single IP address assigned to it. - The available networks (port groups) can be listed using - `govc ls 'network/*'` - type: string - networkSubnetCidr: - description: |- - networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs - that will be used in respective status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: set - type: object - internal: - description: internal represents the network configuration - of the node that is routable only within the - cluster. - properties: - excludeNetworkSubnetCidr: - description: |- - excludeNetworkSubnetCidr IP addresses in subnet ranges will be excluded when selecting - the IP address from the VirtualMachine's VM for use in the status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: atomic - network: - description: |- - network VirtualMachine's VM Network names that will be used to when searching - for status.addresses fields. Note that if internal.networkSubnetCIDR and - external.networkSubnetCIDR are not set, then the vNIC associated to this network must - only have a single IP address assigned to it. - The available networks (port groups) can be listed using - `govc ls 'network/*'` - type: string - networkSubnetCidr: - description: |- - networkSubnetCidr IP address on VirtualMachine's network interfaces included in the fields' CIDRs - that will be used in respective status.addresses fields. - items: - type: string - type: array - x-kubernetes-list-type: set - type: object - type: object - vcenters: - description: |- - vcenters holds the connection details for services to communicate with vCenter. - Currently, only a single vCenter is supported, but in tech preview 3 vCenters are supported. - Once the cluster has been installed, you are unable to change the current number of defined - vCenters except in the case where the cluster has been upgraded from a version of OpenShift - where the vsphere platform spec was not present. You may make modifications to the existing - vCenters that are defined in the vcenters list in order to match with any added or modified - failure domains. - items: - description: |- - VSpherePlatformVCenterSpec stores the vCenter connection fields. - This is used by the vSphere CCM. - properties: - datacenters: - description: |- - The vCenter Datacenters in which the RHCOS - vm guests are located. This field will - be used by the Cloud Controller Manager. - Each datacenter listed here should be used within - a topology. - items: - type: string - minItems: 1 - type: array - x-kubernetes-list-type: set - port: - description: |- - port is the TCP port that will be used to communicate to - the vCenter endpoint. - When omitted, this means the user has no opinion and - it is up to the platform to choose a sensible default, - which is subject to change over time. - format: int32 - maximum: 32767 - minimum: 1 - type: integer - server: - description: server is the fully-qualified domain - name or the IP address of the vCenter server. - maxLength: 255 - type: string - required: - - datacenters - - server - type: object - maxItems: 3 - minItems: 0 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: vcenters cannot be added or removed once - set - rule: 'size(self) != size(oldSelf) ? size(oldSelf) - == 0 && size(self) < 2 : true' - type: object - x-kubernetes-validations: - - message: apiServerInternalIPs list is required once - set - rule: '!has(oldSelf.apiServerInternalIPs) || has(self.apiServerInternalIPs)' - - message: ingressIPs list is required once set - rule: '!has(oldSelf.ingressIPs) || has(self.ingressIPs)' - - message: vcenters can have at most 1 item when configured - post-install - rule: '!has(oldSelf.vcenters) && has(self.vcenters) - ? size(self.vcenters) < 2 : true' - type: object - x-kubernetes-validations: - - message: vcenters can have at most 1 item when configured - post-install - rule: '!has(oldSelf.vsphere) && has(self.vsphere) ? size(self.vsphere.vcenters) - < 2 : true' - type: object - status: - description: status holds observed values from the cluster. They - may not be overridden. - properties: - apiServerInternalURI: - description: |- - apiServerInternalURL is a valid URI with scheme 'https', - address and optionally a port (defaulting to 443). apiServerInternalURL can be used by components - like kubelets, to contact the Kubernetes API server using the - infrastructure provider rather than Kubernetes networking. - type: string - apiServerURL: - description: |- - apiServerURL is a valid URI with scheme 'https', address and - optionally a port (defaulting to 443). apiServerURL can be used by components like the web console - to tell users where to find the Kubernetes API. - type: string - controlPlaneTopology: - default: HighlyAvailable - description: |- - controlPlaneTopology expresses the expectations for operands that normally run on control nodes. - The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. - The 'SingleReplica' mode will be used in single-node deployments - and the operators should not configure the operand for highly-available operation - The 'External' mode indicates that the control plane is hosted externally to the cluster and that - its components are not visible within the cluster. - type: string - cpuPartitioning: - default: None - description: |- - cpuPartitioning expresses if CPU partitioning is a currently enabled feature in the cluster. - CPU Partitioning means that this cluster can support partitioning workloads to specific CPU Sets. - Valid values are "None" and "AllNodes". When omitted, the default value is "None". - The default value of "None" indicates that no nodes will be setup with CPU partitioning. - The "AllNodes" value indicates that all nodes have been setup with CPU partitioning, - and can then be further configured via the PerformanceProfile API. - enum: - - None - - AllNodes - type: string - etcdDiscoveryDomain: - description: |- - etcdDiscoveryDomain is the domain used to fetch the SRV records for discovering - etcd servers and clients. - For more info: https://github.com/etcd-io/etcd/blob/329be66e8b3f9e2e6af83c123ff89297e49ebd15/Documentation/op-guide/clustering.md#dns-discovery - deprecated: as of 4.7, this field is no longer set or honored. It will be removed in a future release. - type: string - infrastructureName: - description: |- - infrastructureName uniquely identifies a cluster with a human friendly name. - Once set it should not be changed. Must be of max length 27 and must have only - alphanumeric or hyphen characters. - type: string - infrastructureTopology: - default: HighlyAvailable - description: |- - infrastructureTopology expresses the expectations for infrastructure services that do not run on control - plane nodes, usually indicated by a node selector for a `role` value - other than `master`. - The default is 'HighlyAvailable', which represents the behavior operators have in a "normal" cluster. - The 'SingleReplica' mode will be used in single-node deployments - and the operators should not configure the operand for highly-available operation - NOTE: External topology mode is not applicable for this field. - enum: - - HighlyAvailable - - SingleReplica - type: string - platform: - description: |- - platform is the underlying infrastructure provider for the cluster. - - Deprecated: Use platformStatus.type instead. - enum: - - "" - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - - AlibabaCloud - - Nutanix - - External - type: string - platformStatus: - description: |- - platformStatus holds status information specific to the underlying - infrastructure provider. - properties: - alibabaCloud: - description: alibabaCloud contains settings specific to - the Alibaba Cloud infrastructure provider. - properties: - region: - description: region specifies the region for Alibaba - Cloud resources created for the cluster. - pattern: ^[0-9A-Za-z-]+$ - type: string - resourceGroupID: - description: resourceGroupID is the ID of the resource - group for the cluster. - pattern: ^(rg-[0-9A-Za-z]+)?$ - type: string - resourceTags: - description: resourceTags is a list of additional - tags to apply to Alibaba Cloud resources created - for the cluster. - items: - description: AlibabaCloudResourceTag is the set - of tags to add to apply to resources. - properties: - key: - description: key is the key of the tag. - maxLength: 128 - minLength: 1 - type: string - value: - description: value is the value of the tag. - maxLength: 128 - minLength: 1 - type: string - required: - - key - - value - type: object - maxItems: 20 - type: array - x-kubernetes-list-map-keys: - - key - x-kubernetes-list-type: map - required: - - region - type: object - aws: - description: aws contains settings specific to the Amazon - Web Services infrastructure provider. - properties: - region: - description: region holds the default AWS region for - new AWS resources created by the cluster. - type: string - resourceTags: - description: |- - resourceTags is a list of additional tags to apply to AWS resources created for the cluster. - See https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html for information on tagging AWS resources. - AWS supports a maximum of 50 tags per resource. OpenShift reserves 25 tags for its use, leaving 25 tags - available for the user. - items: - description: AWSResourceTag is a tag to apply to - AWS resources created for the cluster. - properties: - key: - description: |- - key sets the key of the AWS resource tag key-value pair. Key is required when defining an AWS resource tag. - Key should consist of between 1 and 128 characters, and may - contain only the set of alphanumeric characters, space (' '), '_', '.', '/', '=', '+', '-', ':', and '@'. - maxLength: 128 - minLength: 1 - type: string - x-kubernetes-validations: - - message: invalid AWS resource tag key. The - string can contain only the set of alphanumeric - characters, space (' '), '_', '.', '/', - '=', '+', '-', ':', '@' - rule: self.matches('^[0-9A-Za-z_.:/=+-@ ]+$') - value: - description: |- - value sets the value of the AWS resource tag key-value pair. Value is required when defining an AWS resource tag. - Value should consist of between 1 and 256 characters, and may - contain only the set of alphanumeric characters, space (' '), '_', '.', '/', '=', '+', '-', ':', and '@'. - Some AWS service do not support empty values. Since tags are added to resources in many services, the - length of the tag value must meet the requirements of all services. - maxLength: 256 - minLength: 1 - type: string - x-kubernetes-validations: - - message: invalid AWS resource tag value. The - string can contain only the set of alphanumeric - characters, space (' '), '_', '.', '/', - '=', '+', '-', ':', '@' - rule: self.matches('^[0-9A-Za-z_.:/=+-@ ]+$') - required: - - key - - value - type: object - maxItems: 25 - type: array - x-kubernetes-list-type: atomic - serviceEndpoints: - description: |- - serviceEndpoints list contains custom endpoints which will override default - service endpoint of AWS Services. - There must be only one ServiceEndpoint for a service. - items: - description: |- - AWSServiceEndpoint store the configuration of a custom url to - override existing defaults of AWS Services. - properties: - name: - description: |- - name is the name of the AWS service. - The list of all the service names can be found at https://docs.aws.amazon.com/general/latest/gr/aws-service-information.html - This must be provided and cannot be empty. - pattern: ^[a-z0-9-]+$ - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - pattern: ^https:// - type: string - type: object - type: array - x-kubernetes-list-type: atomic - type: object - azure: - description: azure contains settings specific to the Azure - infrastructure provider. - properties: - armEndpoint: - description: armEndpoint specifies a URL to use for - resource management in non-soverign clouds such - as Azure Stack. - type: string - cloudName: - description: |- - cloudName is the name of the Azure cloud environment which can be used to configure the Azure SDK - with the appropriate Azure API endpoints. - If empty, the value is equal to `AzurePublicCloud`. - enum: - - "" - - AzurePublicCloud - - AzureUSGovernmentCloud - - AzureChinaCloud - - AzureGermanCloud - - AzureStackCloud - type: string - networkResourceGroupName: - description: |- - networkResourceGroupName is the Resource Group for network resources like the Virtual Network and Subnets used by the cluster. - If empty, the value is same as ResourceGroupName. - type: string - resourceGroupName: - description: resourceGroupName is the Resource Group - for new Azure resources created for the cluster. - type: string - resourceTags: - description: |- - resourceTags is a list of additional tags to apply to Azure resources created for the cluster. - See https://docs.microsoft.com/en-us/rest/api/resources/tags for information on tagging Azure resources. - Due to limitations on Automation, Content Delivery Network, DNS Azure resources, a maximum of 15 tags - may be applied. OpenShift reserves 5 tags for internal use, allowing 10 tags for user configuration. - items: - description: AzureResourceTag is a tag to apply - to Azure resources created for the cluster. - properties: - key: - description: |- - key is the key part of the tag. A tag key can have a maximum of 128 characters and cannot be empty. Key - must begin with a letter, end with a letter, number or underscore, and must contain only alphanumeric - characters and the following special characters `_ . -`. - maxLength: 128 - minLength: 1 - pattern: ^[a-zA-Z]([0-9A-Za-z_.-]*[0-9A-Za-z_])?$ - type: string - value: - description: |- - value is the value part of the tag. A tag value can have a maximum of 256 characters and cannot be empty. Value - must contain only alphanumeric characters and the following special characters `_ + , - . / : ; < = > ? @`. - maxLength: 256 - minLength: 1 - pattern: ^[0-9A-Za-z_.=+-@]+$ - type: string - required: - - key - - value - type: object - maxItems: 10 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: resourceTags are immutable and may only - be configured during installation - rule: self.all(x, x in oldSelf) && oldSelf.all(x, - x in self) - type: object - x-kubernetes-validations: - - message: resourceTags may only be configured during - installation - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) - || has(oldSelf.resourceTags) && has(self.resourceTags)' - baremetal: - description: baremetal contains settings specific to the - BareMetal platform. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer - used by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on BareMetal platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - machineNetworks: - description: machineNetworks are IP networks used - to connect all the OpenShift cluster nodes. - items: - description: CIDR is an IP address range in CIDR - notation (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeDNSIP: - description: |- - nodeDNSIP is the IP address for the internal DNS used by the - nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` - provides name resolution for the nodes themselves. There is no DNS-as-a-service for - BareMetal deployments. In order to minimize necessary changes to the - datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames - to the nodes in the cluster. - type: string - type: object - equinixMetal: - description: equinixMetal contains settings specific to - the Equinix Metal infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - type: string - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - type: string - type: object - external: - description: external contains settings specific to the - generic External infrastructure provider. - properties: - cloudControllerManager: - description: |- - cloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI). - When omitted, new nodes will be not tainted - and no extra initialization from the cloud controller manager is expected. - properties: - state: - description: |- - state determines whether or not an external Cloud Controller Manager is expected to - be installed within the cluster. - https://kubernetes.io/docs/tasks/administer-cluster/running-cloud-controller/#running-cloud-controller-manager - - Valid values are "External", "None" and omitted. - When set to "External", new nodes will be tainted as uninitialized when created, - preventing them from running workloads until they are initialized by the cloud controller manager. - When omitted or set to "None", new nodes will be not tainted - and no extra initialization from the cloud controller manager is expected. - enum: - - "" - - External - - None - type: string - x-kubernetes-validations: - - message: state is immutable once set - rule: self == oldSelf - type: object - x-kubernetes-validations: - - message: state may not be added or removed once - set - rule: (has(self.state) == has(oldSelf.state)) || - (!has(oldSelf.state) && self.state != "External") - type: object - x-kubernetes-validations: - - message: cloudControllerManager may not be added or - removed once set - rule: has(self.cloudControllerManager) == has(oldSelf.cloudControllerManager) - gcp: - description: gcp contains settings specific to the Google - Cloud Platform infrastructure provider. - properties: - projectID: - description: resourceGroupName is the Project ID for - new GCP resources created for the cluster. - type: string - region: - description: region holds the region for new GCP resources - created for the cluster. - type: string - resourceLabels: - description: |- - resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. - See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. - GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, - allowing 32 labels for user configuration. - items: - description: GCPResourceLabel is a label to apply - to GCP resources created for the cluster. - properties: - key: - description: |- - key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. - Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, - and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` - and `openshift-io`. - maxLength: 63 - minLength: 1 - pattern: ^[a-z][0-9a-z_-]{0,62}$ - type: string - x-kubernetes-validations: - - message: label keys must not start with either - `openshift-io` or `kubernetes-io` - rule: '!self.startsWith(''openshift-io'') - && !self.startsWith(''kubernetes-io'')' - value: - description: |- - value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. - Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. - maxLength: 63 - minLength: 1 - pattern: ^[0-9a-z_-]{1,63}$ - type: string - required: - - key - - value - type: object - maxItems: 32 - type: array - x-kubernetes-list-map-keys: - - key - x-kubernetes-list-type: map - x-kubernetes-validations: - - message: resourceLabels are immutable and may only - be configured during installation - rule: self.all(x, x in oldSelf) && oldSelf.all(x, - x in self) - resourceTags: - description: |- - resourceTags is a list of additional tags to apply to GCP resources created for the cluster. - See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on - tagging GCP resources. GCP supports a maximum of 50 tags per resource. - items: - description: GCPResourceTag is a tag to apply to - GCP resources created for the cluster. - properties: - key: - description: |- - key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. - Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase - alphanumeric characters, and the following special characters `._-`. - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ - type: string - parentID: - description: |- - parentID is the ID of the hierarchical resource where the tags are defined, - e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: - https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, - https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. - An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. - A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, - and hyphens, and must start with a letter, and cannot end with a hyphen. - maxLength: 32 - minLength: 1 - pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) - type: string - value: - description: |- - value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. - Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase - alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. - maxLength: 63 - minLength: 1 - pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ - type: string - required: - - key - - parentID - - value - type: object - maxItems: 50 - type: array - x-kubernetes-list-map-keys: - - key - x-kubernetes-list-type: map - x-kubernetes-validations: - - message: resourceTags are immutable and may only - be configured during installation - rule: self.all(x, x in oldSelf) && oldSelf.all(x, - x in self) - type: object - x-kubernetes-validations: - - message: resourceLabels may only be configured during - installation - rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) - || has(oldSelf.resourceLabels) && has(self.resourceLabels)' - - message: resourceTags may only be configured during - installation - rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) - || has(oldSelf.resourceTags) && has(self.resourceTags)' - ibmcloud: - description: ibmcloud contains settings specific to the - IBMCloud infrastructure provider. - properties: - cisInstanceCRN: - description: |- - cisInstanceCRN is the CRN of the Cloud Internet Services instance managing - the DNS zone for the cluster's base domain - type: string - dnsInstanceCRN: - description: |- - dnsInstanceCRN is the CRN of the DNS Services instance managing the DNS zone - for the cluster's base domain - type: string - location: - description: location is where the cluster has been - deployed - type: string - providerType: - description: providerType indicates the type of cluster - that was created - type: string - resourceGroupName: - description: resourceGroupName is the Resource Group - for new IBMCloud resources created for the cluster. - type: string - serviceEndpoints: - description: |- - serviceEndpoints is a list of custom endpoints which will override the default - service endpoints of an IBM service. These endpoints are used by components - within the cluster when trying to reach the IBM Cloud Services that have been - overriden. The CCCMO reads in the IBMCloudPlatformSpec and validates each - endpoint is resolvable. Once validated, the cloud config and IBMCloudPlatformStatus - are updated to reflect the same custom endpoints. - items: - description: |- - IBMCloudServiceEndpoint stores the configuration of a custom url to - override existing defaults of IBM Cloud Services. - properties: - name: - description: |- - name is the name of the IBM Cloud service. - Possible values are: CIS, COS, COSConfig, DNSServices, GlobalCatalog, GlobalSearch, GlobalTagging, HyperProtect, IAM, KeyProtect, ResourceController, ResourceManager, or VPC. - For example, the IBM Cloud Private IAM service could be configured with the - service `name` of `IAM` and `url` of `https://private.iam.cloud.ibm.com` - Whereas the IBM Cloud Private VPC service for US South (Dallas) could be configured - with the service `name` of `VPC` and `url` of `https://us.south.private.iaas.cloud.ibm.com` - enum: - - CIS - - COS - - COSConfig - - DNSServices - - GlobalCatalog - - GlobalSearch - - GlobalTagging - - HyperProtect - - IAM - - KeyProtect - - ResourceController - - ResourceManager - - VPC - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. The path must follow the pattern - /v[0,9]+ or /api/v[0,9]+ - maxLength: 300 - type: string - x-kubernetes-validations: - - message: url must be a valid absolute URL - rule: isURL(self) - required: - - name - - url - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - type: object - kubevirt: - description: kubevirt contains settings specific to the - kubevirt infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - type: string - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - type: string - type: object - nutanix: - description: nutanix contains settings specific to the - Nutanix infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer - used by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on Nutanix platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - type: object - openstack: - description: openstack contains settings specific to the - OpenStack infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - cloudName: - description: |- - cloudName is the name of the desired OpenStack cloud in the - client configuration file (`clouds.yaml`). - type: string - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer - used by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on OpenStack platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - machineNetworks: - description: machineNetworks are IP networks used - to connect all the OpenShift cluster nodes. - items: - description: CIDR is an IP address range in CIDR - notation (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeDNSIP: - description: |- - nodeDNSIP is the IP address for the internal DNS used by the - nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` - provides name resolution for the nodes themselves. There is no DNS-as-a-service for - OpenStack deployments. In order to minimize necessary changes to the - datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames - to the nodes in the cluster. - type: string - type: object - ovirt: - description: ovirt contains settings specific to the oVirt - infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: set - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer - used by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on Ovirt platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - nodeDNSIP: - description: 'deprecated: as of 4.6, this field is - no longer set or honored. It will be removed in - a future release.' - type: string - type: object - powervs: - description: powervs contains settings specific to the - Power Systems Virtual Servers infrastructure provider. - properties: - cisInstanceCRN: - description: |- - cisInstanceCRN is the CRN of the Cloud Internet Services instance managing - the DNS zone for the cluster's base domain - type: string - dnsInstanceCRN: - description: |- - dnsInstanceCRN is the CRN of the DNS Services instance managing the DNS zone - for the cluster's base domain - type: string - region: - description: region holds the default Power VS region - for new Power VS resources created by the cluster. - type: string - resourceGroup: - description: |- - resourceGroup is the resource group name for new IBMCloud resources created for a cluster. - The resource group specified here will be used by cluster-image-registry-operator to set up a COS Instance in IBMCloud for the cluster registry. - More about resource groups can be found here: https://cloud.ibm.com/docs/account?topic=account-rgs. - When omitted, the image registry operator won't be able to configure storage, - which results in the image registry cluster operator not being in an available state. - maxLength: 40 - pattern: ^[a-zA-Z0-9-_ ]+$ - type: string - x-kubernetes-validations: - - message: resourceGroup is immutable once set - rule: oldSelf == '' || self == oldSelf - serviceEndpoints: - description: |- - serviceEndpoints is a list of custom endpoints which will override the default - service endpoints of a Power VS service. - items: - description: |- - PowervsServiceEndpoint stores the configuration of a custom url to - override existing defaults of PowerVS Services. - properties: - name: - description: |- - name is the name of the Power VS service. - Few of the services are - IAM - https://cloud.ibm.com/apidocs/iam-identity-token-api - ResourceController - https://cloud.ibm.com/apidocs/resource-controller/resource-controller - Power Cloud - https://cloud.ibm.com/apidocs/power-cloud - enum: - - CIS - - COS - - COSConfig - - DNSServices - - GlobalCatalog - - GlobalSearch - - GlobalTagging - - HyperProtect - - IAM - - KeyProtect - - Power - - ResourceController - - ResourceManager - - VPC - type: string - url: - description: |- - url is fully qualified URI with scheme https, that overrides the default generated - endpoint for a client. - This must be provided and cannot be empty. - format: uri - pattern: ^https:// - type: string - required: - - name - - url - type: object - type: array - x-kubernetes-list-map-keys: - - name - x-kubernetes-list-type: map - zone: - description: |- - zone holds the default zone for the new Power VS resources created by the cluster. - Note: Currently only single-zone OCP clusters are supported - type: string - type: object - x-kubernetes-validations: - - message: cannot unset resourceGroup once set - rule: '!has(oldSelf.resourceGroup) || has(self.resourceGroup)' - type: - description: |- - type is the underlying infrastructure provider for the cluster. This - value controls whether infrastructure automation such as service load - balancers, dynamic volume provisioning, machine creation and deletion, and - other integrations are enabled. If None, no infrastructure automation is - enabled. Allowed values are "AWS", "Azure", "BareMetal", "GCP", "Libvirt", - "OpenStack", "VSphere", "oVirt", "EquinixMetal", "PowerVS", "AlibabaCloud", "Nutanix" and "None". - Individual components may not support all platforms, and must handle - unrecognized platforms as None if they do not support that platform. - - This value will be synced with to the `status.platform` and `status.platformStatus.type`. - Currently this value cannot be changed once set. - enum: - - "" - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - - AlibabaCloud - - Nutanix - - External - type: string - vsphere: - description: vsphere contains settings specific to the - VSphere infrastructure provider. - properties: - apiServerInternalIP: - description: |- - apiServerInternalIP is an IP address to contact the Kubernetes API server that can be used - by components inside the cluster, like kubelets using the infrastructure rather - than Kubernetes networking. It is the IP that the Infrastructure.status.apiServerInternalURI - points to. It is the IP for a self-hosted load balancer in front of the API servers. - - Deprecated: Use APIServerInternalIPs instead. - type: string - apiServerInternalIPs: - description: |- - apiServerInternalIPs are the IP addresses to contact the Kubernetes API - server that can be used by components inside the cluster, like kubelets - using the infrastructure rather than Kubernetes networking. These are the - IPs for a self-hosted load balancer in front of the API servers. In dual - stack clusters this list contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: apiServerInternalIPs must contain at most - one IPv4 address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - ingressIP: - description: |- - ingressIP is an external IP which routes to the default ingress controller. - The IP is a suitable target of a wildcard DNS record used to resolve default route host names. - - Deprecated: Use IngressIPs instead. - type: string - ingressIPs: - description: |- - ingressIPs are the external IPs which route to the default ingress - controller. The IPs are suitable targets of a wildcard DNS record used to - resolve default route host names. In dual stack clusters this list - contains two IPs otherwise only one. - format: ip - items: - type: string - maxItems: 2 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - message: ingressIPs must contain at most one IPv4 - address and at most one IPv6 address - rule: 'self == oldSelf || (size(self) == 2 && isIP(self[0]) - && isIP(self[1]) ? ip(self[0]).family() != ip(self[1]).family() - : true)' - loadBalancer: - default: - type: OpenShiftManagedDefault - description: loadBalancer defines how the load balancer - used by the cluster is configured. - properties: - type: - default: OpenShiftManagedDefault - description: |- - type defines the type of load balancer used by the cluster on VSphere platform - which can be a user-managed or openshift-managed load balancer - that is to be used for the OpenShift API and Ingress endpoints. - When set to OpenShiftManagedDefault the static pods in charge of API and Ingress traffic load-balancing - defined in the machine config operator will be deployed. - When set to UserManaged these static pods will not be deployed and it is expected that - the load balancer is configured out of band by the deployer. - When omitted, this means no opinion and the platform is left to choose a reasonable default. - The default value is OpenShiftManagedDefault. - enum: - - OpenShiftManagedDefault - - UserManaged - type: string - x-kubernetes-validations: - - message: type is immutable once set - rule: oldSelf == '' || self == oldSelf - type: object - machineNetworks: - description: machineNetworks are IP networks used - to connect all the OpenShift cluster nodes. - items: - description: CIDR is an IP address range in CIDR - notation (for example, "10.0.0.0/8" or "fd00::/8"). - maxLength: 43 - minLength: 1 - type: string - x-kubernetes-validations: - - message: value must be a valid CIDR network address - rule: isCIDR(self) - maxItems: 32 - type: array - x-kubernetes-list-type: atomic - x-kubernetes-validations: - - rule: self.all(x, self.exists_one(y, x == y)) - nodeDNSIP: - description: |- - nodeDNSIP is the IP address for the internal DNS used by the - nodes. Unlike the one managed by the DNS operator, `NodeDNSIP` - provides name resolution for the nodes themselves. There is no DNS-as-a-service for - vSphere deployments. In order to minimize necessary changes to the - datacenter DNS, a DNS service is hosted as a static pod to serve those hostnames - to the nodes in the cluster. - type: string - type: object - type: object - type: object - required: - - spec - type: object - x-kubernetes-embedded-resource: true - internalRegistryPullSecret: - description: |- - internalRegistryPullSecret is the pull secret for the internal registry, used by - rpm-ostree to pull images from the internal registry if present - format: byte - nullable: true - type: string - ipFamilies: - description: ipFamilies indicates the IP families in use by the cluster - network - type: string - kubeAPIServerServingCAData: - description: kubeAPIServerServingCAData managed Kubelet to API Server - Cert... Rotated automatically - format: byte - type: string - network: - description: network contains additional network related information - nullable: true - properties: - mtuMigration: - description: mtuMigration contains the MTU migration configuration. - nullable: true - properties: - machine: - description: machine contains MTU migration configuration - for the machine's uplink. - properties: - from: - description: from is the MTU to migrate from. - format: int32 - minimum: 0 - type: integer - to: - description: to is the MTU to migrate to. - format: int32 - minimum: 0 - type: integer - type: object - network: - description: network contains MTU migration configuration - for the default network. - properties: - from: - description: from is the MTU to migrate from. - format: int32 - minimum: 0 - type: integer - to: - description: to is the MTU to migrate to. - format: int32 - minimum: 0 - type: integer - type: object - type: object - required: - - mtuMigration - type: object - networkType: - description: |- - networkType holds the type of network the cluster is using - XXX: this is temporary and will be dropped as soon as possible in favor of a better support - to start network related services the proper way. - Nobody is also changing this once the cluster is up and running the first time, so, disallow - regeneration if this changes. - type: string - osImageURL: - description: osImageURL is the old-format container image that contains - the OS update payload. - type: string - platform: - description: platform is deprecated, use Infra.Status.PlatformStatus.Type - instead - type: string - proxy: - description: proxy holds the current proxy configuration for the nodes - nullable: true - properties: - httpProxy: - description: httpProxy is the URL of the proxy for HTTP requests. - type: string - httpsProxy: - description: httpsProxy is the URL of the proxy for HTTPS requests. - type: string - noProxy: - description: noProxy is a comma-separated list of hostnames and/or - CIDRs for which the proxy should not be used. - type: string - type: object - pullSecret: - description: |- - pullSecret is the default pull secret that needs to be installed - on all machines. - properties: - apiVersion: - description: API version of the referent. - type: string - fieldPath: - description: |- - If referring to a piece of an object instead of an entire object, this string - should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within a pod, this would take on a value like: - "spec.containers{name}" (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" (container with - index 2 in this pod). This syntax is chosen only to have some well-defined way of - referencing a part of an object. - type: string - 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 - namespace: - description: |- - Namespace of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ - type: string - resourceVersion: - description: |- - Specific resourceVersion to which this reference is made, if any. - More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency - type: string - uid: - description: |- - UID of the referent. - More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids - type: string - type: object - x-kubernetes-map-type: atomic - releaseImage: - description: releaseImage is the image used when installing the cluster - type: string - rootCAData: - description: rootCAData specifies the root CA data - format: byte - type: string - required: - - additionalTrustBundle - - baseOSContainerImage - - cloudProviderCAData - - cloudProviderConfig - - clusterDNSIP - - dns - - images - - infra - - ipFamilies - - kubeAPIServerServingCAData - - network - - proxy - - releaseImage - - rootCAData - type: object - status: - description: status contains observed information about the controller - config. - properties: - conditions: - description: conditions represents the latest available observations - of current state. - items: - description: ControllerConfigStatusCondition contains condition - information for ControllerConfigStatus - properties: - lastTransitionTime: - description: lastTransitionTime is the time of the last update - to the current status object. - format: date-time - nullable: true - type: string - message: - description: |- - message provides additional information about the current condition. - This is only to be consumed by humans. - type: string - reason: - description: reason is the reason for the condition's last transition. Reasons - are PascalCase - type: string - status: - description: status of the condition, one of True, False, Unknown. - type: string - type: - description: type specifies the state of the operator's reconciliation - functionality. - type: string - required: - - lastTransitionTime - - status - - type - type: object - type: array - x-kubernetes-list-map-keys: - - type - x-kubernetes-list-type: map - controllerCertificates: - description: controllerCertificates represents the latest available - observations of the automatically rotating certificates in the MCO. - items: - description: ControllerCertificate contains info about a specific - cert. - properties: - bundleFile: - description: bundleFile is the larger bundle a cert comes from - type: string - notAfter: - description: notAfter is the upper boundary for validity - format: date-time - type: string - notBefore: - description: notBefore is the lower boundary for validity - format: date-time - type: string - signer: - description: signer is the cert Issuer - type: string - subject: - description: subject is the cert subject - type: string - required: - - bundleFile - - signer - - subject - type: object - type: array - x-kubernetes-list-type: atomic - observedGeneration: - description: observedGeneration represents the generation observed - by the controller. - format: int64 - type: integer - type: object - required: - - spec - type: object - served: true - storage: true - subresources: - status: {} diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter+DualReplica.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter+DualReplica.yaml index 3954b904512..c8fcbc726ee 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter+DualReplica.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter+DualReplica.yaml @@ -1787,7 +1787,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter.yaml index f73376e6bb4..2115e36b529 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/HighlyAvailableArbiter.yaml @@ -1785,7 +1785,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/NutanixMultiSubnets.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/NutanixMultiSubnets.yaml index a39c161e0a2..f64a9220312 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/NutanixMultiSubnets.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/NutanixMultiSubnets.yaml @@ -1786,7 +1786,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/VSphereMultiNetworks.yaml b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/VSphereMultiNetworks.yaml index f4b45729afb..af8758f0059 100644 --- a/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/VSphereMultiNetworks.yaml +++ b/machineconfiguration/v1/zz_generated.featuregated-crd-manifests/controllerconfigs.machineconfiguration.openshift.io/VSphereMultiNetworks.yaml @@ -1781,7 +1781,118 @@ spec: description: region holds the region for new GCP resources created for the cluster. type: string + resourceLabels: + description: |- + resourceLabels is a list of additional labels to apply to GCP resources created for the cluster. + See https://cloud.google.com/compute/docs/labeling-resources for information on labeling GCP resources. + GCP supports a maximum of 64 labels per resource. OpenShift reserves 32 labels for internal use, + allowing 32 labels for user configuration. + items: + description: GCPResourceLabel is a label to apply + to GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the label. A label key can have a maximum of 63 characters and cannot be empty. + Label key must begin with a lowercase letter, and must contain only lowercase letters, numeric characters, + and the following special characters `_-`. Label key must not have the reserved prefixes `kubernetes-io` + and `openshift-io`. + maxLength: 63 + minLength: 1 + pattern: ^[a-z][0-9a-z_-]{0,62}$ + type: string + x-kubernetes-validations: + - message: label keys must not start with either + `openshift-io` or `kubernetes-io` + rule: '!self.startsWith(''openshift-io'') + && !self.startsWith(''kubernetes-io'')' + value: + description: |- + value is the value part of the label. A label value can have a maximum of 63 characters and cannot be empty. + Value must contain only lowercase letters, numeric characters, and the following special characters `_-`. + maxLength: 63 + minLength: 1 + pattern: ^[0-9a-z_-]{1,63}$ + type: string + required: + - key + - value + type: object + maxItems: 32 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceLabels are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) + resourceTags: + description: |- + resourceTags is a list of additional tags to apply to GCP resources created for the cluster. + See https://cloud.google.com/resource-manager/docs/tags/tags-overview for information on + tagging GCP resources. GCP supports a maximum of 50 tags per resource. + items: + description: GCPResourceTag is a tag to apply to + GCP resources created for the cluster. + properties: + key: + description: |- + key is the key part of the tag. A tag key can have a maximum of 63 characters and cannot be empty. + Tag key must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `._-`. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.-]{0,61}[a-zA-Z0-9])?$ + type: string + parentID: + description: |- + parentID is the ID of the hierarchical resource where the tags are defined, + e.g. at the Organization or the Project level. To find the Organization or Project ID refer to the following pages: + https://cloud.google.com/resource-manager/docs/creating-managing-organization#retrieving_your_organization_id, + https://cloud.google.com/resource-manager/docs/creating-managing-projects#identifying_projects. + An OrganizationID must consist of decimal numbers, and cannot have leading zeroes. + A ProjectID must be 6 to 30 characters in length, can only contain lowercase letters, numbers, + and hyphens, and must start with a letter, and cannot end with a hyphen. + maxLength: 32 + minLength: 1 + pattern: (^[1-9][0-9]{0,31}$)|(^[a-z][a-z0-9-]{4,28}[a-z0-9]$) + type: string + value: + description: |- + value is the value part of the tag. A tag value can have a maximum of 63 characters and cannot be empty. + Tag value must begin and end with an alphanumeric character, and must contain only uppercase, lowercase + alphanumeric characters, and the following special characters `_-.@%=+:,*#&(){}[]` and spaces. + maxLength: 63 + minLength: 1 + pattern: ^[a-zA-Z0-9]([0-9A-Za-z_.@%=+:,*#&()\[\]{}\-\s]{0,61}[a-zA-Z0-9])?$ + type: string + required: + - key + - parentID + - value + type: object + maxItems: 50 + type: array + x-kubernetes-list-map-keys: + - key + x-kubernetes-list-type: map + x-kubernetes-validations: + - message: resourceTags are immutable and may only + be configured during installation + rule: self.all(x, x in oldSelf) && oldSelf.all(x, + x in self) type: object + x-kubernetes-validations: + - message: resourceLabels may only be configured during + installation + rule: '!has(oldSelf.resourceLabels) && !has(self.resourceLabels) + || has(oldSelf.resourceLabels) && has(self.resourceLabels)' + - message: resourceTags may only be configured during + installation + rule: '!has(oldSelf.resourceTags) && !has(self.resourceTags) + || has(oldSelf.resourceTags) && has(self.resourceTags)' ibmcloud: description: ibmcloud contains settings specific to the IBMCloud infrastructure provider. diff --git a/payload-command/render/legacyfeaturegates.go b/payload-command/render/legacyfeaturegates.go index 55e63969061..7131a1b0828 100644 --- a/payload-command/render/legacyfeaturegates.go +++ b/payload-command/render/legacyfeaturegates.go @@ -41,8 +41,6 @@ var legacyFeatureGates = sets.New( // never add to this list, if you think you have an exception ask @deads2k "GCPClusterHostedDNS", // never add to this list, if you think you have an exception ask @deads2k - "GCPLabelsTags", - // never add to this list, if you think you have an exception ask @deads2k "GatewayAPI", // never add to this list, if you think you have an exception ask @deads2k "HardwareSpeed", diff --git a/payload-command/render/renderassets/rendered_manifests_test.go b/payload-command/render/renderassets/rendered_manifests_test.go index c008b2c1258..3ca8b68f7cd 100644 --- a/payload-command/render/renderassets/rendered_manifests_test.go +++ b/payload-command/render/renderassets/rendered_manifests_test.go @@ -97,7 +97,6 @@ status: - name: DNSNameResolver - name: DynamicResourceAllocation - name: EventedPLEG - - name: GCPLabelsTags - name: GatewayAPI - name: InsightsConfigAPI - name: MachineAPIOperatorDisableMachineHealthCheckController diff --git a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml index fa0392cba72..9ae2ec54c10 100644 --- a/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml +++ b/payload-manifests/featuregates/featureGate-Hypershift-Default.yaml @@ -237,9 +237,6 @@ { "name": "ExternalOIDC" }, - { - "name": "GCPLabelsTags" - }, { "name": "GatewayAPI" }, diff --git a/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml index 8f98efc1c1b..d9c3df5f5d0 100644 --- a/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-Hypershift-DevPreviewNoUpgrade.yaml @@ -143,9 +143,6 @@ { "name": "GCPCustomAPIEndpoints" }, - { - "name": "GCPLabelsTags" - }, { "name": "GatewayAPI" }, diff --git a/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml index 8949f94ba1f..9d407d3f412 100644 --- a/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-Hypershift-TechPreviewNoUpgrade.yaml @@ -149,9 +149,6 @@ { "name": "GCPCustomAPIEndpoints" }, - { - "name": "GCPLabelsTags" - }, { "name": "GatewayAPI" }, diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml index a3e5339d442..c21c29650ad 100644 --- a/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml +++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-Default.yaml @@ -234,9 +234,6 @@ { "name": "ConsolePluginContentSecurityPolicy" }, - { - "name": "GCPLabelsTags" - }, { "name": "GatewayAPI" }, diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml index ed197c63d5d..96bb2b5c809 100644 --- a/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-DevPreviewNoUpgrade.yaml @@ -128,9 +128,6 @@ { "name": "GCPCustomAPIEndpoints" }, - { - "name": "GCPLabelsTags" - }, { "name": "GatewayAPI" }, diff --git a/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml b/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml index b23bb5df08e..5e9e78b5459 100644 --- a/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml +++ b/payload-manifests/featuregates/featureGate-SelfManagedHA-TechPreviewNoUpgrade.yaml @@ -134,9 +134,6 @@ { "name": "GCPCustomAPIEndpoints" }, - { - "name": "GCPLabelsTags" - }, { "name": "GatewayAPI" },