diff --git a/OWNERS_ALIASES b/OWNERS_ALIASES index 62ad3a2785..4f5ca50d57 100644 --- a/OWNERS_ALIASES +++ b/OWNERS_ALIASES @@ -59,3 +59,11 @@ aliases: - Prashanth684 - clnperez - mkumatag + nutanix-approvers: + - thunderboltsid + - yannickstruyf3 + - yanhua121 + nutanix-reviewers: + - thunderboltsid + - yannickstruyf3 + - yanhua121 diff --git a/manifests/controllerconfig.crd.yaml b/manifests/controllerconfig.crd.yaml index 351deda58c..e1cea11ff1 100644 --- a/manifests/controllerconfig.crd.yaml +++ b/manifests/controllerconfig.crd.yaml @@ -19,282 +19,423 @@ spec: kind: ControllerConfig # list of versions supported by this CustomResourceDefinition versions: - - name: v1 - # Each version can be enabled/disabled by Served flag. - served: true - # One and only one version must be marked as the storage version. - storage: true - subresources: - status: {} - schema: - openAPIV3Schema: - description: ControllerConfig describes configuration for MachineConfigController. - This is currently only used to drive the MachineConfig objects generated - by the TemplateController. - 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: ControllerConfigSpec is the spec for ControllerConfig resource. - properties: - additionalTrustBundle: - description: additionalTrustBundle is a certificate bundle that will - be added to the nodes trusted certificate store. - format: byte - nullable: true - type: string - cloudProviderCAData: - description: cloudProvider 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: - 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. - \n For example, given the base domain `openshift.example.com`, - an API server DNS record may be created for `cluster-api.openshift.example.com`. - \n Once set, this field cannot be changed." - type: string - privateZone: - description: "privateZone is the location where all the DNS - records that are only available internally to the cluster - exist. \n If this field is nil, no private records should - be created. \n Once set, this field cannot be changed." - properties: - id: - description: "id is the identifier that can be used to - find the DNS hosted zone. \n 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]. \n [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: + - name: v1 + # Each version can be enabled/disabled by Served flag. + served: true + # One and only one version must be marked as the storage version. + storage: true + subresources: + status: {} + schema: + openAPIV3Schema: + description: + ControllerConfig describes configuration for MachineConfigController. + This is currently only used to drive the MachineConfig objects generated + by the TemplateController. + 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: ControllerConfigSpec is the spec for ControllerConfig resource. + properties: + additionalTrustBundle: + description: + additionalTrustBundle is a certificate bundle that will + be added to the nodes trusted certificate store. + format: byte + nullable: true + type: string + cloudProviderCAData: + description: cloudProvider 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: + 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. + \n For example, given the base domain `openshift.example.com`, + an API server DNS record may be created for `cluster-api.openshift.example.com`. + \n Once set, this field cannot be changed." + type: string + privateZone: + description: + "privateZone is the location where all the DNS + records that are only available internally to the cluster + exist. \n If this field is nil, no private records should + be created. \n Once set, this field cannot be changed." + properties: + id: + description: + "id is the identifier that can be used to + find the DNS hosted zone. \n 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]. \n [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 - description: "tags can be used to query the DNS hosted - zone. \n on AWS, resourcegroupstaggingapi [1] can be - used to fetch a zone using `Tags` as tag-filters, \n - [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. - \n If this field is nil, no public records should be created. - \n Once set, this field cannot be changed." - properties: - id: - description: "id is the identifier that can be used to - find the DNS hosted zone. \n 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]. \n [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: + tags: + additionalProperties: + type: string + description: + "tags can be used to query the DNS hosted + zone. \n on AWS, resourcegroupstaggingapi [1] can be + used to fetch a zone using `Tags` as tag-filters, \n + [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. + \n If this field is nil, no public records should be created. + \n Once set, this field cannot be changed." + properties: + id: + description: + "id is the identifier that can be used to + find the DNS hosted zone. \n 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]. \n [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 - description: "tags can be used to query the DNS hosted - zone. \n on AWS, resourcegroupstaggingapi [1] can be - used to fetch a zone using `Tags` as tag-filters, \n - [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 - etcdDiscoveryDomain: - description: etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain - instead - type: string - images: - additionalProperties: + tags: + additionalProperties: + type: string + description: + "tags can be used to query the DNS hosted + zone. \n on AWS, resourcegroupstaggingapi [1] can be + used to fetch a zone using `Tags` as tag-filters, \n + [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 + etcdDiscoveryDomain: + description: + etcdDiscoveryDomain is deprecated, use Infra.Status.EtcdDiscoveryDomain + instead 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' + images: + additionalProperties: 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. \n 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 - AlibabaCloud 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 - 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. - type: object - equinixMetal: - description: EquinixMetal contains settings specific to - the Equinix Metal infrastructure provider. - 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 - openstack: - description: OpenStack contains settings specific to the - OpenStack infrastructure provider. - type: object - 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. - 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 "AlibabaCloud", "AWS", - "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", - "oVirt", "KubeVirt", "EquinixMetal", "PowerVS" and "None". - Individual components may not support all platforms, and must handle - unrecognized platforms as None if they do not support - that platform. - enum: + 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: + 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. \n 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 + AlibabaCloud 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 + 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. + type: object + equinixMetal: + description: + EquinixMetal contains settings specific to + the Equinix Metal infrastructure provider. + 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. + type: object + openstack: + description: + OpenStack contains settings specific to the + OpenStack infrastructure provider. + type: object + 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. + 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 "AlibabaCloud", "AWS", + "Azure", "BareMetal", "GCP", "Libvirt", "OpenStack", "VSphere", + "oVirt", "KubeVirt", "EquinixMetal", "PowerVS", "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: + - "" + - AlibabaCloud + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - Nutanix + type: string + vsphere: + description: + VSphere contains settings specific to the + VSphere infrastructure provider. + type: object + type: object + 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. + enum: + - HighlyAvailable + - SingleReplica + - External + 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 + enum: + - HighlyAvailable + - SingleReplica + - External + type: string + platform: + description: + "platform is the underlying infrastructure provider + for the cluster. \n Deprecated: Use platformStatus.type + instead." + enum: - "" - AlibabaCloud - AWS @@ -310,659 +451,667 @@ spec: - KubeVirt - EquinixMetal - PowerVS - type: string - vsphere: - description: VSphere contains settings specific to the - VSphere infrastructure provider. - type: object - type: object - 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. - enum: - - HighlyAvailable - - SingleReplica - - External - 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 - enum: - - HighlyAvailable - - SingleReplica - - External - type: string - platform: - description: "platform is the underlying infrastructure provider - for the cluster. \n Deprecated: Use platformStatus.type - instead." - enum: - - "" - - AlibabaCloud - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - 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. - type: object - required: - - region - - resourceGroupID - properties: - region: - description: region specifies the region for Alibaba Cloud resources created for the cluster. - type: string - pattern: ^[0-9A-Za-z-]+$ - resourceGroupID: - description: resourceGroupID is the ID of the resource group for the cluster. - type: string - pattern: ^rg-[0-9A-Za-z]+$ - resourceTags: - description: resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. - type: array - maxItems: 20 - items: - description: AlibabaCloudResourceTag is the set of tags to add to apply to resources. - type: object - required: + - Nutanix + 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. + type: object + required: + - region + - resourceGroupID + properties: + region: + description: region specifies the region for Alibaba Cloud resources created for the cluster. + type: string + pattern: ^[0-9A-Za-z-]+$ + resourceGroupID: + description: resourceGroupID is the ID of the resource group for the cluster. + type: string + pattern: ^rg-[0-9A-Za-z]+$ + resourceTags: + description: resourceTags is a list of additional tags to apply to Alibaba Cloud resources created for the cluster. + type: array + maxItems: 20 + items: + description: AlibabaCloudResourceTag is the set of tags to add to apply to resources. + type: object + required: + - key + - value + properties: + key: + description: key is the key of the tag. + type: string + maxLength: 128 + minLength: 1 + value: + description: value is the value of the tag. + type: string + maxLength: 128 + minLength: 1 + x-kubernetes-list-map-keys: - key - - value - properties: - key: - description: key is the key of the tag. - type: string - maxLength: 128 - minLength: 1 - value: - description: value is the value of the tag. - type: string - maxLength: 128 - minLength: 1 - x-kubernetes-list-map-keys: - - key - x-kubernetes-list-type: map - 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 is the key of the tag - maxLength: 128 - minLength: 1 - pattern: ^[0-9A-Za-z_.:/=+-@]+$ - type: string - value: - description: value is the value of the tag. - 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 - pattern: ^[0-9A-Za-z_.:/=+-@]+$ - type: string - required: - - key - - value - type: object - maxItems: 25 - type: array - 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 - 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: + x-kubernetes-list-type: map + 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 is the key of the tag + maxLength: 128 + minLength: 1 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + type: string + value: + description: + value is the value of the tag. + 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 + pattern: ^[0-9A-Za-z_.:/=+-@]+$ + type: string + required: + - key + - value + type: object + maxItems: 25 + type: array + 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 + 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 + type: object + 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. + 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 + 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 + 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 + type: object + 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 + 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 + 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. + 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 + 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. + type: string + 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. + type: string + 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. + 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 + 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 + region: + description: + region holds the default Power VS region + for new Power VS resources created by the cluster. + type: string + 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. + 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. + format: uri + pattern: ^https:// + type: string + required: + - name + - url + type: object + type: array + 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 + 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 \"AlibabaCloud\", + \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", + \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\", \"Nutanix\", + and \"None\". Individual components may not support all platforms, + and must handle unrecognized platforms as None if they + do not support that platform. \n This value will be + synced with to the `status.platform` and `status.platformStatus.type`. + Currently this value cannot be changed once set." + 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 - type: object - 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. - 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 - 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 - 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 - type: object - 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 - 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 - 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 - 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. - type: string - 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. - type: string - 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. - 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 - 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 - region: - description: region holds the default Power VS region - for new Power VS resources created by the cluster. - type: string - 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. - 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. - format: uri - pattern: ^https:// - type: string - required: - - name - - url - type: object - type: array - 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 - 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 \"AlibabaCloud\", - \"AWS\", \"Azure\", \"BareMetal\", \"GCP\", \"Libvirt\", - \"OpenStack\", \"VSphere\", \"oVirt\", \"EquinixMetal\", \"PowerVS\" - and \"None\". Individual components may not support all platforms, - and must handle unrecognized platforms as None if they - do not support that platform. \n This value will be - synced with to the `status.platform` and `status.platformStatus.type`. - Currently this value cannot be changed once set." - enum: - - "" - - AlibabaCloud - - AWS - - Azure - - BareMetal - - GCP - - Libvirt - - OpenStack - - None - - VSphere - - oVirt - - IBMCloud - - KubeVirt - - EquinixMetal - - PowerVS - 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. - 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 - 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 - 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 - 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 location of the container image that - contains the OS update payload. Its value is taken from the data.osImageURL - field on the machine-config-osimageurl ConfigMap. - 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. TODO: this design is not final and this field is - subject to change in the future.' - 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 - 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 - - cloudProviderCAData - - cloudProviderConfig - - clusterDNSIP - - dns - - images - - infra - - ipFamilies - - kubeAPIServerServingCAData - - osImageURL - - proxy - - releaseImage - - rootCAData - type: object - status: - description: ControllerConfigStatus is the status for ControllerConfig - properties: - conditions: - description: conditions represents the latest available observations - of current state. - items: - description: ControllerConfigStatusCondition contains condition - information for ControllerConfigStatus + - AlibabaCloud + - AWS + - Azure + - BareMetal + - GCP + - Libvirt + - OpenStack + - None + - VSphere + - oVirt + - IBMCloud + - KubeVirt + - EquinixMetal + - PowerVS + - Nutanix + 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. + 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 + 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 + 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 + 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 location of the container image that + contains the OS update payload. Its value is taken from the data.osImageURL + field on the machine-config-osimageurl ConfigMap. + 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: - lastTransitionTime: - description: lastTransitionTime is the time of the last update - to the current status object. - format: date-time - nullable: true + httpProxy: + description: httpProxy is the URL of the proxy for HTTP requests. type: string - message: - description: message provides additional information about the - current condition. This is only to be consumed by humans. + httpsProxy: + description: httpsProxy is the URL of the proxy for HTTPS requests. type: string - reason: - description: reason is the reason for the condition's last transition. Reasons - are PascalCase + noProxy: + description: + noProxy is a comma-separated list of hostnames and/or + CIDRs for which the proxy should not be used. type: string - status: - description: status of the condition, one of True, False, Unknown. + 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 - type: - description: type specifies the state of the operator's reconciliation - functionality. + 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. TODO: this design is not final and this field is + subject to change in the future.' + 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 - required: - - lastTransitionTime - - status - - type type: object - type: array - observedGeneration: - description: observedGeneration represents the generation observed - by the controller. - format: int64 - type: integer - type: object - required: - - spec - type: object + 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 + - cloudProviderCAData + - cloudProviderConfig + - clusterDNSIP + - dns + - images + - infra + - ipFamilies + - kubeAPIServerServingCAData + - osImageURL + - proxy + - releaseImage + - rootCAData + type: object + status: + description: ControllerConfigStatus is the status for ControllerConfig + 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 + observedGeneration: + description: + observedGeneration represents the generation observed + by the controller. + format: int64 + type: integer + type: object + required: + - spec + type: object diff --git a/pkg/controller/template/render.go b/pkg/controller/template/render.go index 4427cab505..1c9b567d99 100644 --- a/pkg/controller/template/render.go +++ b/pkg/controller/template/render.go @@ -147,7 +147,7 @@ func platformStringFromControllerConfigSpec(ic *mcfgv1.ControllerConfigSpec) (st return "", fmt.Errorf("cannot generate MachineConfigs when no platformStatus.type is set") case platformBase: return "", fmt.Errorf("platform _base unsupported") - case configv1.AWSPlatformType, configv1.AlibabaCloudPlatformType, configv1.AzurePlatformType, configv1.BareMetalPlatformType, configv1.GCPPlatformType, configv1.OpenStackPlatformType, configv1.LibvirtPlatformType, configv1.OvirtPlatformType, configv1.VSpherePlatformType, configv1.KubevirtPlatformType, configv1.PowerVSPlatformType, configv1.NonePlatformType: + case configv1.AWSPlatformType, configv1.AlibabaCloudPlatformType, configv1.AzurePlatformType, configv1.BareMetalPlatformType, configv1.GCPPlatformType, configv1.OpenStackPlatformType, configv1.LibvirtPlatformType, configv1.OvirtPlatformType, configv1.VSpherePlatformType, configv1.KubevirtPlatformType, configv1.PowerVSPlatformType, configv1.NonePlatformType, configv1.NutanixPlatformType: return strings.ToLower(string(ic.Infra.Status.PlatformStatus.Type)), nil default: // platformNone is used for a non-empty, but currently unsupported platform. @@ -408,6 +408,8 @@ func onPremPlatformShortName(cfg RenderConfig) interface{} { return "vsphere" case configv1.KubevirtPlatformType: return "kubevirt" + case configv1.NutanixPlatformType: + return "nutanix" default: return "" } @@ -447,6 +449,8 @@ func onPremPlatformIngressIP(cfg RenderConfig) (interface{}, error) { // VSphere UPI doesn't populate VSphere field. So it's not an error, // and there is also no data return nil, nil + case configv1.NutanixPlatformType: + return cfg.Infra.Status.PlatformStatus.Nutanix.IngressIP, nil default: return nil, fmt.Errorf("invalid platform for Ingress IP") } @@ -473,6 +477,8 @@ func onPremPlatformAPIServerInternalIP(cfg RenderConfig) (interface{}, error) { return nil, nil case configv1.KubevirtPlatformType: return cfg.Infra.Status.PlatformStatus.Kubevirt.APIServerInternalIP, nil + case configv1.NutanixPlatformType: + return cfg.Infra.Status.PlatformStatus.Nutanix.APIServerInternalIP, nil default: return nil, fmt.Errorf("invalid platform for API Server Internal IP") } @@ -499,7 +505,7 @@ func existsDir(path string) (bool, error) { func onPremPlatform(platformString configv1.PlatformType) bool { switch platformString { - case configv1.BareMetalPlatformType, configv1.OvirtPlatformType, configv1.OpenStackPlatformType, configv1.VSpherePlatformType, configv1.KubevirtPlatformType: + case configv1.BareMetalPlatformType, configv1.OvirtPlatformType, configv1.OpenStackPlatformType, configv1.VSpherePlatformType, configv1.KubevirtPlatformType, configv1.NutanixPlatformType: return true default: return false diff --git a/pkg/operator/bootstrap.go b/pkg/operator/bootstrap.go index 09f5f6a19c..8f2de71470 100644 --- a/pkg/operator/bootstrap.go +++ b/pkg/operator/bootstrap.go @@ -317,6 +317,26 @@ func appendManifestsByPlatform(manifests []manifest, infra configv1.Infrastructu ) } + if infra.Status.PlatformStatus.Nutanix != nil { + manifests = append(manifests, + manifest{ + name: "manifests/on-prem/coredns.yaml", + filename: "nutanix/manifests/coredns.yaml", + }, + manifest{ + name: "manifests/on-prem/coredns-corefile.tmpl", + filename: "nutanix/static-pod-resources/coredns/Corefile.tmpl", + }, + manifest{ + name: "manifests/on-prem/keepalived.yaml", + filename: "nutanix/manifests/keepalived.yaml", + }, + manifest{ + name: "manifests/on-prem/keepalived.conf.tmpl", + filename: "nutanix/static-pod-resources/keepalived/keepalived.conf.tmpl", + }, + ) + } return manifests } diff --git a/pkg/operator/render.go b/pkg/operator/render.go index cc8b33a8d1..94fe6a84ca 100644 --- a/pkg/operator/render.go +++ b/pkg/operator/render.go @@ -194,6 +194,8 @@ func onPremPlatformShortName(cfg mcfgv1.ControllerConfigSpec) interface{} { return "vsphere" case configv1.KubevirtPlatformType: return "kubevirt" + case configv1.NutanixPlatformType: + return "nutanix" default: return "" } @@ -228,6 +230,8 @@ func onPremPlatformIngressIP(cfg mcfgv1.ControllerConfigSpec) (interface{}, erro return cfg.Infra.Status.PlatformStatus.VSphere.IngressIP, nil case configv1.KubevirtPlatformType: return cfg.Infra.Status.PlatformStatus.Kubevirt.IngressIP, nil + case configv1.NutanixPlatformType: + return cfg.Infra.Status.PlatformStatus.Nutanix.IngressIP, nil default: return nil, fmt.Errorf("invalid platform for Ingress IP") } @@ -249,6 +253,8 @@ func onPremPlatformAPIServerInternalIP(cfg mcfgv1.ControllerConfigSpec) (interfa return cfg.Infra.Status.PlatformStatus.VSphere.APIServerInternalIP, nil case configv1.KubevirtPlatformType: return cfg.Infra.Status.PlatformStatus.Kubevirt.APIServerInternalIP, nil + case configv1.NutanixPlatformType: + return cfg.Infra.Status.PlatformStatus.Nutanix.APIServerInternalIP, nil default: return nil, fmt.Errorf("invalid platform for API Server Internal IP") } diff --git a/pkg/operator/status.go b/pkg/operator/status.go index bb8bef4fbd..62e4acfe51 100644 --- a/pkg/operator/status.go +++ b/pkg/operator/status.go @@ -80,6 +80,7 @@ func (optr *Operator) syncRelatedObjects() error { {Resource: "namespaces", Name: "openshift-openstack-infra"}, {Resource: "namespaces", Name: "openshift-ovirt-infra"}, {Resource: "namespaces", Name: "openshift-vsphere-infra"}, + {Resource: "namespaces", Name: "openshift-nutanix-infra"}, } if !equality.Semantic.DeepEqual(coCopy.Status.RelatedObjects, co.Status.RelatedObjects) {