diff --git a/config/v1/0000_10_config-operator_01_infrastructure-Default.crd.yaml b/config/v1/0000_10_config-operator_01_infrastructure-Default.crd.yaml index 28773b7df68..fe57bddfc69 100644 --- a/config/v1/0000_10_config-operator_01_infrastructure-Default.crd.yaml +++ b/config/v1/0000_10_config-operator_01_infrastructure-Default.crd.yaml @@ -81,6 +81,28 @@ spec: 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. + type: object + properties: + cloudControllerManager: + description: CloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI) + type: object + 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 \n 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." + type: string + enum: + - "" + - External + - None + platformName: + 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 + default: Unknown + x-kubernetes-validations: + - rule: oldSelf == 'Unknown' || self == oldSelf + message: platform name cannot be changed once set gcp: description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. type: object @@ -200,6 +222,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External vsphere: description: VSphere contains settings specific to the VSphere infrastructure provider. type: object @@ -254,6 +277,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External platformStatus: description: platformStatus holds status information specific to the underlying infrastructure provider. type: object @@ -401,6 +425,9 @@ spec: 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 + external: + description: External contains settings specific to the generic External infrastructure provider. + type: object gcp: description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. type: object @@ -576,6 +603,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External vsphere: description: VSphere contains settings specific to the VSphere infrastructure provider. type: object diff --git a/config/v1/0000_10_config-operator_01_infrastructure-TechPreviewNoUpgrade.crd.yaml b/config/v1/0000_10_config-operator_01_infrastructure-TechPreviewNoUpgrade.crd.yaml index b1dc45140ac..01eeb092898 100644 --- a/config/v1/0000_10_config-operator_01_infrastructure-TechPreviewNoUpgrade.crd.yaml +++ b/config/v1/0000_10_config-operator_01_infrastructure-TechPreviewNoUpgrade.crd.yaml @@ -76,6 +76,28 @@ spec: 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: + cloudControllerManager: + description: CloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI) + 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 \n 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 + type: object + 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 @@ -194,6 +216,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External type: string vsphere: description: VSphere contains settings specific to the VSphere infrastructure provider. @@ -401,6 +424,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External type: string platformStatus: description: platformStatus holds status information specific to the underlying infrastructure provider. @@ -548,6 +572,9 @@ spec: 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. + type: object gcp: description: GCP contains settings specific to the Google Cloud Platform infrastructure provider. properties: @@ -722,6 +749,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External type: string vsphere: description: VSphere contains settings specific to the VSphere infrastructure provider. diff --git a/config/v1/0000_10_config-operator_01_ingress.crd.yaml b/config/v1/0000_10_config-operator_01_ingress.crd.yaml index 427f0b1c138..0d7dec19e54 100644 --- a/config/v1/0000_10_config-operator_01_ingress.crd.yaml +++ b/config/v1/0000_10_config-operator_01_ingress.crd.yaml @@ -121,6 +121,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External requiredHSTSPolicies: description: "requiredHSTSPolicies specifies HSTS policies that are required to be set on newly created or updated routes matching the domainPattern/s and namespaceSelector/s that are specified in the policy. Each requiredHSTSPolicy must have at least a domainPattern and a maxAge to validate a route HSTS Policy route annotation, and affect route admission. \n A candidate route is checked for HSTS Policies if it has the HSTS Policy route annotation: \"haproxy.router.openshift.io/hsts_header\" E.g. haproxy.router.openshift.io/hsts_header: max-age=31536000;preload;includeSubDomains \n - For each candidate route, if it matches a requiredHSTSPolicy domainPattern and optional namespaceSelector, then the maxAge, preloadPolicy, and includeSubdomainsPolicy must be valid to be admitted. Otherwise, the route is rejected. - The first match, by domainPattern and optional namespaceSelector, in the ordering of the RequiredHSTSPolicies determines the route's admission status. - If the candidate route doesn't match any requiredHSTSPolicy domainPattern and optional namespaceSelector, then it may use any HSTS Policy annotation. \n The HSTS policy configuration may be changed after routes have already been created. An update to a previously admitted route may then fail if the updated route does not conform to the updated HSTS policy configuration. However, changing the HSTS policy configuration will not cause a route that is already admitted to stop working. \n Note that if there are no RequiredHSTSPolicies, any HSTS Policy annotation on the route is valid." type: array diff --git a/config/v1/stable.infrastructure.testsuite.yaml b/config/v1/stable.infrastructure.testsuite.yaml index e609e56ab08..bbafe4c4787 100644 --- a/config/v1/stable.infrastructure.testsuite.yaml +++ b/config/v1/stable.infrastructure.testsuite.yaml @@ -12,3 +12,47 @@ tests: apiVersion: config.openshift.io/v1 kind: Infrastructure spec: {} + onUpdate: + - name: Should be able to change External platformName from unknown to something else + initial: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: External + external: + platformName: Unknown + updated: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: External + external: + platformName: M&PCloud + expected: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: External + external: + platformName: M&PCloud + - name: Should not be able to change External platformName once it was set + initial: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: External + external: + platformName: M&PCloud + updated: | + apiVersion: config.openshift.io/v1 + kind: Infrastructure + spec: + platformSpec: + type: External + external: + platformName: SomeOtherCoolplatformName + expectedError: " spec.platformSpec.external.platformName: Invalid value: \"string\": platform name cannot be changed once set" diff --git a/config/v1/types_infrastructure.go b/config/v1/types_infrastructure.go index 149e46ac3ac..f1f1697a70b 100644 --- a/config/v1/types_infrastructure.go +++ b/config/v1/types_infrastructure.go @@ -124,7 +124,7 @@ const ( ) // PlatformType is a specific supported infrastructure provider. -// +kubebuilder:validation:Enum="";AWS;Azure;BareMetal;GCP;Libvirt;OpenStack;None;VSphere;oVirt;IBMCloud;KubeVirt;EquinixMetal;PowerVS;AlibabaCloud;Nutanix +// +kubebuilder:validation:Enum="";AWS;Azure;BareMetal;GCP;Libvirt;OpenStack;None;VSphere;oVirt;IBMCloud;KubeVirt;EquinixMetal;PowerVS;AlibabaCloud;Nutanix;External type PlatformType string const ( @@ -172,6 +172,9 @@ const ( // NutanixPlatformType represents Nutanix infrastructure. NutanixPlatformType PlatformType = "Nutanix" + + // ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately. + ExternalPlatformType PlatformType = "External" ) // IBMCloudProviderType is a specific supported IBM Cloud provider cluster type @@ -189,6 +192,50 @@ const ( IBMCloudProviderTypeUPI IBMCloudProviderType = "UPI" ) +// CloudControllerManagerState defines whether Cloud Controller Manager presence is expected or not +type CloudControllerManagerState string + +const ( + // Cloud Controller Manager is enabled and expected to be installed. + // This value indicates that new nodes should be tainted as uninitialized when created, + // preventing them from running workloads until they are initialized by the cloud controller manager. + CloudControllerManagerExternal CloudControllerManagerState = "External" + + // Cloud Controller Manager is disabled and not expected to be installed. + // This value indicates that new nodes should not be tainted + // and no extra node initialization is expected from the cloud controller manager. + CloudControllerManagerNone CloudControllerManagerState = "None" +) + +// CloudControllerManagerSpec holds Cloud Controller Manager (a.k.a. CCM or CPI) related settings +type CloudControllerManagerSpec struct { + // 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 + // + // 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. + // +kubebuilder:validation:Enum="";External;None + // +optional + State CloudControllerManagerState `json:"state"` +} + +// ExternalPlatformSpec holds the desired state for the generic External infrastructure provider. +type ExternalPlatformSpec struct { + // 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. + // +kubebuilder:default:="Unknown" + // +default="Unknown" + // +kubebuilder:validation:XValidation:rule="oldSelf == 'Unknown' || self == oldSelf",message="platform name cannot be changed once set" + // +optional + PlatformName string `json:"platformName,omitempty"` + // CloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI) + // +optional + CloudControllerManager CloudControllerManagerSpec `json:"cloudControllerManager"` +} + // PlatformSpec holds the desired state specific to the underlying infrastructure provider // of the current cluster. Since these are used at spec-level for the underlying cluster, it // is supposed that only one of the spec structs is set. @@ -256,8 +303,16 @@ type PlatformSpec struct { // Nutanix contains settings specific to the Nutanix infrastructure provider. // +optional Nutanix *NutanixPlatformSpec `json:"nutanix,omitempty"` + + // ExternalPlatformType represents generic infrastructure provider. + // Platform-specific components should be supplemented separately. + // +optional + External *ExternalPlatformSpec `json:"external,omitempty"` } +// ExternalPlatformStatus holds the current status of the generic External infrastructure provider. +type ExternalPlatformStatus struct{} + // PlatformStatus holds the current status specific to the underlying infrastructure provider // of the current cluster. Since these are used at status-level for the underlying cluster, it // is supposed that only one of the status structs is set. @@ -326,6 +381,10 @@ type PlatformStatus struct { // Nutanix contains settings specific to the Nutanix infrastructure provider. // +optional Nutanix *NutanixPlatformStatus `json:"nutanix,omitempty"` + + // External contains settings specific to the generic External infrastructure provider. + // +optional + External *ExternalPlatformStatus `json:"external,omitempty"` } // AWSServiceEndpoint store the configuration of a custom url to diff --git a/config/v1/zz_generated.deepcopy.go b/config/v1/zz_generated.deepcopy.go index 59e92ad7a11..a9babbc7f23 100644 --- a/config/v1/zz_generated.deepcopy.go +++ b/config/v1/zz_generated.deepcopy.go @@ -817,6 +817,22 @@ func (in *ClientConnectionOverrides) DeepCopy() *ClientConnectionOverrides { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *CloudControllerManagerSpec) DeepCopyInto(out *CloudControllerManagerSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new CloudControllerManagerSpec. +func (in *CloudControllerManagerSpec) DeepCopy() *CloudControllerManagerSpec { + if in == nil { + return nil + } + out := new(CloudControllerManagerSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ClusterCondition) DeepCopyInto(out *ClusterCondition) { *out = *in @@ -1775,6 +1791,39 @@ func (in *ExternalIPPolicy) DeepCopy() *ExternalIPPolicy { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalPlatformSpec) DeepCopyInto(out *ExternalPlatformSpec) { + *out = *in + out.CloudControllerManager = in.CloudControllerManager + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalPlatformSpec. +func (in *ExternalPlatformSpec) DeepCopy() *ExternalPlatformSpec { + if in == nil { + return nil + } + out := new(ExternalPlatformSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *ExternalPlatformStatus) DeepCopyInto(out *ExternalPlatformStatus) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ExternalPlatformStatus. +func (in *ExternalPlatformStatus) DeepCopy() *ExternalPlatformStatus { + if in == nil { + return nil + } + out := new(ExternalPlatformStatus) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *FeatureGate) DeepCopyInto(out *FeatureGate) { *out = *in @@ -4036,6 +4085,11 @@ func (in *PlatformSpec) DeepCopyInto(out *PlatformSpec) { *out = new(NutanixPlatformSpec) (*in).DeepCopyInto(*out) } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(ExternalPlatformSpec) + **out = **in + } return } @@ -4117,6 +4171,11 @@ func (in *PlatformStatus) DeepCopyInto(out *PlatformStatus) { *out = new(NutanixPlatformStatus) (*in).DeepCopyInto(*out) } + if in.External != nil { + in, out := &in.External, &out.External + *out = new(ExternalPlatformStatus) + **out = **in + } return } diff --git a/config/v1/zz_generated.swagger_doc_generated.go b/config/v1/zz_generated.swagger_doc_generated.go index c5a5ae79c7b..a7911be703c 100644 --- a/config/v1/zz_generated.swagger_doc_generated.go +++ b/config/v1/zz_generated.swagger_doc_generated.go @@ -1090,6 +1090,15 @@ func (BareMetalPlatformStatus) SwaggerDoc() map[string]string { return map_BareMetalPlatformStatus } +var map_CloudControllerManagerSpec = map[string]string{ + "": "CloudControllerManagerSpec holds Cloud Controller Manager (a.k.a. CCM or CPI) related settings", + "state": "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\n\nWhen 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.", +} + +func (CloudControllerManagerSpec) SwaggerDoc() map[string]string { + return map_CloudControllerManagerSpec +} + var map_EquinixMetalPlatformSpec = map[string]string{ "": "EquinixMetalPlatformSpec holds the desired state of the Equinix Metal infrastructure provider. This only includes fields that can be modified in the cluster.", } @@ -1108,6 +1117,24 @@ func (EquinixMetalPlatformStatus) SwaggerDoc() map[string]string { return map_EquinixMetalPlatformStatus } +var map_ExternalPlatformSpec = map[string]string{ + "": "ExternalPlatformSpec holds the desired state for the generic External infrastructure provider.", + "platformName": "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.", + "cloudControllerManager": "CloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI)", +} + +func (ExternalPlatformSpec) SwaggerDoc() map[string]string { + return map_ExternalPlatformSpec +} + +var map_ExternalPlatformStatus = map[string]string{ + "": "ExternalPlatformStatus holds the current status of the generic External infrastructure provider.", +} + +func (ExternalPlatformStatus) SwaggerDoc() map[string]string { + return map_ExternalPlatformStatus +} + var map_GCPPlatformSpec = map[string]string{ "": "GCPPlatformSpec holds the desired state of the Google Cloud Platform infrastructure provider. This only includes fields that can be modified in the cluster.", } @@ -1310,6 +1337,7 @@ var map_PlatformSpec = map[string]string{ "powervs": "PowerVS contains settings specific to the IBM Power Systems Virtual Servers infrastructure provider.", "alibabaCloud": "AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider.", "nutanix": "Nutanix contains settings specific to the Nutanix infrastructure provider.", + "external": "ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately.", } func (PlatformSpec) SwaggerDoc() map[string]string { @@ -1332,6 +1360,7 @@ var map_PlatformStatus = map[string]string{ "powervs": "PowerVS contains settings specific to the Power Systems Virtual Servers infrastructure provider.", "alibabaCloud": "AlibabaCloud contains settings specific to the Alibaba Cloud infrastructure provider.", "nutanix": "Nutanix contains settings specific to the Nutanix infrastructure provider.", + "external": "External contains settings specific to the generic External infrastructure provider.", } func (PlatformStatus) SwaggerDoc() map[string]string { diff --git a/machine/v1/0000_10_controlplanemachineset.crd.yaml b/machine/v1/0000_10_controlplanemachineset.crd.yaml index b46d6784fce..1a83a5129d6 100644 --- a/machine/v1/0000_10_controlplanemachineset.crd.yaml +++ b/machine/v1/0000_10_controlplanemachineset.crd.yaml @@ -263,6 +263,7 @@ spec: - PowerVS - AlibabaCloud - Nutanix + - External x-kubernetes-validations: - rule: 'has(self.platform) && self.platform == ''AWS'' ? has(self.aws) : !has(self.aws)' message: aws configuration is required when platform is AWS, and forbidden otherwise diff --git a/openapi/generated_openapi/zz_generated.openapi.go b/openapi/generated_openapi/zz_generated.openapi.go index 48d6cdd4079..7373a6de145 100644 --- a/openapi/generated_openapi/zz_generated.openapi.go +++ b/openapi/generated_openapi/zz_generated.openapi.go @@ -178,6 +178,7 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/openshift/api/config/v1.BuildSpec": schema_openshift_api_config_v1_BuildSpec(ref), "github.com/openshift/api/config/v1.CertInfo": schema_openshift_api_config_v1_CertInfo(ref), "github.com/openshift/api/config/v1.ClientConnectionOverrides": schema_openshift_api_config_v1_ClientConnectionOverrides(ref), + "github.com/openshift/api/config/v1.CloudControllerManagerSpec": schema_openshift_api_config_v1_CloudControllerManagerSpec(ref), "github.com/openshift/api/config/v1.ClusterCondition": schema_openshift_api_config_v1_ClusterCondition(ref), "github.com/openshift/api/config/v1.ClusterNetworkEntry": schema_openshift_api_config_v1_ClusterNetworkEntry(ref), "github.com/openshift/api/config/v1.ClusterOperator": schema_openshift_api_config_v1_ClusterOperator(ref), @@ -219,6 +220,8 @@ func GetOpenAPIDefinitions(ref common.ReferenceCallback) map[string]common.OpenA "github.com/openshift/api/config/v1.EtcdStorageConfig": schema_openshift_api_config_v1_EtcdStorageConfig(ref), "github.com/openshift/api/config/v1.ExternalIPConfig": schema_openshift_api_config_v1_ExternalIPConfig(ref), "github.com/openshift/api/config/v1.ExternalIPPolicy": schema_openshift_api_config_v1_ExternalIPPolicy(ref), + "github.com/openshift/api/config/v1.ExternalPlatformSpec": schema_openshift_api_config_v1_ExternalPlatformSpec(ref), + "github.com/openshift/api/config/v1.ExternalPlatformStatus": schema_openshift_api_config_v1_ExternalPlatformStatus(ref), "github.com/openshift/api/config/v1.FeatureGate": schema_openshift_api_config_v1_FeatureGate(ref), "github.com/openshift/api/config/v1.FeatureGateEnabledDisabled": schema_openshift_api_config_v1_FeatureGateEnabledDisabled(ref), "github.com/openshift/api/config/v1.FeatureGateList": schema_openshift_api_config_v1_FeatureGateList(ref), @@ -9395,6 +9398,27 @@ func schema_openshift_api_config_v1_ClientConnectionOverrides(ref common.Referen } } +func schema_openshift_api_config_v1_CloudControllerManagerSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "CloudControllerManagerSpec holds Cloud Controller Manager (a.k.a. CCM or CPI) related settings", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "state": { + SchemaProps: spec.SchemaProps{ + 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\n\nWhen 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.", + Default: "", + Type: []string{"string"}, + Format: "", + }, + }, + }, + }, + }, + } +} + func schema_openshift_api_config_v1_ClusterCondition(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -11151,6 +11175,47 @@ func schema_openshift_api_config_v1_ExternalIPPolicy(ref common.ReferenceCallbac } } +func schema_openshift_api_config_v1_ExternalPlatformSpec(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalPlatformSpec holds the desired state for the generic External infrastructure provider.", + Type: []string{"object"}, + Properties: map[string]spec.Schema{ + "platformName": { + SchemaProps: spec.SchemaProps{ + 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.", + Default: "Unknown", + Type: []string{"string"}, + Format: "", + }, + }, + "cloudControllerManager": { + SchemaProps: spec.SchemaProps{ + Description: "CloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI)", + Default: map[string]interface{}{}, + Ref: ref("github.com/openshift/api/config/v1.CloudControllerManagerSpec"), + }, + }, + }, + }, + }, + Dependencies: []string{ + "github.com/openshift/api/config/v1.CloudControllerManagerSpec"}, + } +} + +func schema_openshift_api_config_v1_ExternalPlatformStatus(ref common.ReferenceCallback) common.OpenAPIDefinition { + return common.OpenAPIDefinition{ + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "ExternalPlatformStatus holds the current status of the generic External infrastructure provider.", + Type: []string{"object"}, + }, + }, + } +} + func schema_openshift_api_config_v1_FeatureGate(ref common.ReferenceCallback) common.OpenAPIDefinition { return common.OpenAPIDefinition{ Schema: spec.Schema{ @@ -15259,12 +15324,18 @@ func schema_openshift_api_config_v1_PlatformSpec(ref common.ReferenceCallback) c Ref: ref("github.com/openshift/api/config/v1.NutanixPlatformSpec"), }, }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately.", + Ref: ref("github.com/openshift/api/config/v1.ExternalPlatformSpec"), + }, + }, }, Required: []string{"type"}, }, }, Dependencies: []string{ - "github.com/openshift/api/config/v1.AWSPlatformSpec", "github.com/openshift/api/config/v1.AlibabaCloudPlatformSpec", "github.com/openshift/api/config/v1.AzurePlatformSpec", "github.com/openshift/api/config/v1.BareMetalPlatformSpec", "github.com/openshift/api/config/v1.EquinixMetalPlatformSpec", "github.com/openshift/api/config/v1.GCPPlatformSpec", "github.com/openshift/api/config/v1.IBMCloudPlatformSpec", "github.com/openshift/api/config/v1.KubevirtPlatformSpec", "github.com/openshift/api/config/v1.NutanixPlatformSpec", "github.com/openshift/api/config/v1.OpenStackPlatformSpec", "github.com/openshift/api/config/v1.OvirtPlatformSpec", "github.com/openshift/api/config/v1.PowerVSPlatformSpec", "github.com/openshift/api/config/v1.VSpherePlatformSpec"}, + "github.com/openshift/api/config/v1.AWSPlatformSpec", "github.com/openshift/api/config/v1.AlibabaCloudPlatformSpec", "github.com/openshift/api/config/v1.AzurePlatformSpec", "github.com/openshift/api/config/v1.BareMetalPlatformSpec", "github.com/openshift/api/config/v1.EquinixMetalPlatformSpec", "github.com/openshift/api/config/v1.ExternalPlatformSpec", "github.com/openshift/api/config/v1.GCPPlatformSpec", "github.com/openshift/api/config/v1.IBMCloudPlatformSpec", "github.com/openshift/api/config/v1.KubevirtPlatformSpec", "github.com/openshift/api/config/v1.NutanixPlatformSpec", "github.com/openshift/api/config/v1.OpenStackPlatformSpec", "github.com/openshift/api/config/v1.OvirtPlatformSpec", "github.com/openshift/api/config/v1.PowerVSPlatformSpec", "github.com/openshift/api/config/v1.VSpherePlatformSpec"}, } } @@ -15361,12 +15432,18 @@ func schema_openshift_api_config_v1_PlatformStatus(ref common.ReferenceCallback) Ref: ref("github.com/openshift/api/config/v1.NutanixPlatformStatus"), }, }, + "external": { + SchemaProps: spec.SchemaProps{ + Description: "External contains settings specific to the generic External infrastructure provider.", + Ref: ref("github.com/openshift/api/config/v1.ExternalPlatformStatus"), + }, + }, }, Required: []string{"type"}, }, }, Dependencies: []string{ - "github.com/openshift/api/config/v1.AWSPlatformStatus", "github.com/openshift/api/config/v1.AlibabaCloudPlatformStatus", "github.com/openshift/api/config/v1.AzurePlatformStatus", "github.com/openshift/api/config/v1.BareMetalPlatformStatus", "github.com/openshift/api/config/v1.EquinixMetalPlatformStatus", "github.com/openshift/api/config/v1.GCPPlatformStatus", "github.com/openshift/api/config/v1.IBMCloudPlatformStatus", "github.com/openshift/api/config/v1.KubevirtPlatformStatus", "github.com/openshift/api/config/v1.NutanixPlatformStatus", "github.com/openshift/api/config/v1.OpenStackPlatformStatus", "github.com/openshift/api/config/v1.OvirtPlatformStatus", "github.com/openshift/api/config/v1.PowerVSPlatformStatus", "github.com/openshift/api/config/v1.VSpherePlatformStatus"}, + "github.com/openshift/api/config/v1.AWSPlatformStatus", "github.com/openshift/api/config/v1.AlibabaCloudPlatformStatus", "github.com/openshift/api/config/v1.AzurePlatformStatus", "github.com/openshift/api/config/v1.BareMetalPlatformStatus", "github.com/openshift/api/config/v1.EquinixMetalPlatformStatus", "github.com/openshift/api/config/v1.ExternalPlatformStatus", "github.com/openshift/api/config/v1.GCPPlatformStatus", "github.com/openshift/api/config/v1.IBMCloudPlatformStatus", "github.com/openshift/api/config/v1.KubevirtPlatformStatus", "github.com/openshift/api/config/v1.NutanixPlatformStatus", "github.com/openshift/api/config/v1.OpenStackPlatformStatus", "github.com/openshift/api/config/v1.OvirtPlatformStatus", "github.com/openshift/api/config/v1.PowerVSPlatformStatus", "github.com/openshift/api/config/v1.VSpherePlatformStatus"}, } } diff --git a/openapi/openapi.json b/openapi/openapi.json index 020b179ea91..e479a7cc45a 100644 --- a/openapi/openapi.json +++ b/openapi/openapi.json @@ -4812,6 +4812,17 @@ } } }, + "com.github.openshift.api.config.v1.CloudControllerManagerSpec": { + "description": "CloudControllerManagerSpec holds Cloud Controller Manager (a.k.a. CCM or CPI) related settings", + "type": "object", + "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\n\nWhen 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.", + "type": "string", + "default": "" + } + } + }, "com.github.openshift.api.config.v1.ClusterCondition": { "description": "ClusterCondition is a union of typed cluster conditions. The 'type' property determines which of the type-specific properties are relevant. When evaluated on a cluster, the condition may match, not match, or fail to evaluate.", "type": "object", @@ -5840,6 +5851,26 @@ } } }, + "com.github.openshift.api.config.v1.ExternalPlatformSpec": { + "description": "ExternalPlatformSpec holds the desired state for the generic External infrastructure provider.", + "type": "object", + "properties": { + "cloudControllerManager": { + "description": "CloudControllerManager contains settings specific to the external Cloud Controller Manager (a.k.a. CCM or CPI)", + "default": {}, + "$ref": "#/definitions/com.github.openshift.api.config.v1.CloudControllerManagerSpec" + }, + "platformName": { + "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", + "default": "Unknown" + } + } + }, + "com.github.openshift.api.config.v1.ExternalPlatformStatus": { + "description": "ExternalPlatformStatus holds the current status of the generic External infrastructure provider.", + "type": "object" + }, "com.github.openshift.api.config.v1.FeatureGate": { "description": "Feature holds cluster-wide information about feature gates. The canonical name is `cluster`\n\nCompatibility level 1: Stable within a major release for a minimum of 12 months or 3 minor releases (whichever is longer).", "type": "object", @@ -8230,6 +8261,10 @@ "description": "EquinixMetal contains settings specific to the Equinix Metal infrastructure provider.", "$ref": "#/definitions/com.github.openshift.api.config.v1.EquinixMetalPlatformSpec" }, + "external": { + "description": "ExternalPlatformType represents generic infrastructure provider. Platform-specific components should be supplemented separately.", + "$ref": "#/definitions/com.github.openshift.api.config.v1.ExternalPlatformSpec" + }, "gcp": { "description": "GCP contains settings specific to the Google Cloud Platform infrastructure provider.", "$ref": "#/definitions/com.github.openshift.api.config.v1.GCPPlatformSpec" @@ -8296,6 +8331,10 @@ "description": "EquinixMetal contains settings specific to the Equinix Metal infrastructure provider.", "$ref": "#/definitions/com.github.openshift.api.config.v1.EquinixMetalPlatformStatus" }, + "external": { + "description": "External contains settings specific to the generic External infrastructure provider.", + "$ref": "#/definitions/com.github.openshift.api.config.v1.ExternalPlatformStatus" + }, "gcp": { "description": "GCP contains settings specific to the Google Cloud Platform infrastructure provider.", "$ref": "#/definitions/com.github.openshift.api.config.v1.GCPPlatformStatus"