From a65b4f4a470f8f157ed2693d4f702087f7a45a9d Mon Sep 17 00:00:00 2001 From: Enrique Llorente Date: Thu, 27 Nov 2025 15:57:10 +0100 Subject: [PATCH] wip Signed-off-by: Enrique Llorente --- api/hypershift/v1beta1/kubevirt.go | 7 + .../v1beta1/zz_generated.deepcopy.go | 5 + .../AAA_ungated.yaml | 7 + .../OpenStack.yaml | 7 + .../v1beta1/kubevirtnodepoolplatform.go | 9 + ...ure.cluster.x-k8s.io_kubevirtmachines.yaml | 5 + ...ter.x-k8s.io_kubevirtmachinetemplates.yaml | 5 + .../awsendpointservices.crd.yaml | 194 + ...ertificatesigningrequestapprovals.crd.yaml | 53 + .../controlplanecomponents.crd.yaml | 171 + cmd/install/assets/hypershift-operator/doc.go | 1 + ...teserviceconnects-CustomNoUpgrade.crd.yaml | 192 + ...viceconnects-TechPreviewNoUpgrade.crd.yaml | 192 + .../hostedclusters-CustomNoUpgrade.crd.yaml | 8230 +++++++++++++++++ .../hostedclusters-Default.crd.yaml | 7215 +++++++++++++++ ...stedclusters-TechPreviewNoUpgrade.crd.yaml | 7908 ++++++++++++++++ ...stedcontrolplanes-CustomNoUpgrade.crd.yaml | 8097 ++++++++++++++++ .../hostedcontrolplanes-Default.crd.yaml | 7082 ++++++++++++++ ...ontrolplanes-TechPreviewNoUpgrade.crd.yaml | 7775 ++++++++++++++++ .../nodepools-CustomNoUpgrade.crd.yaml | 1801 ++++ .../nodepools-Default.crd.yaml | 1615 ++++ .../nodepools-TechPreviewNoUpgrade.crd.yaml | 1801 ++++ .../nodepools-CustomNoUpgrade.crd.yaml | 7 + .../nodepools-Default.crd.yaml | 7 + .../nodepools-TechPreviewNoUpgrade.crd.yaml | 7 + docs/content/reference/api.md | 14 + go.mod | 2 + go.sum | 4 +- .../controllers/nodepool/kubevirt/kubevirt.go | 41 +- .../api/hypershift/v1beta1/kubevirt.go | 7 + .../v1beta1/zz_generated.deepcopy.go | 5 + vendor/modules.txt | 3 +- .../api/v1alpha1/kubevirtmachine_types.go | 5 + .../api/v1alpha1/zz_generated.deepcopy.go | 5 + 34 files changed, 52459 insertions(+), 20 deletions(-) create mode 100644 cmd/install/assets/hypershift-operator/awsendpointservices.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/certificatesigningrequestapprovals.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/controlplanecomponents.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/doc.go create mode 100644 cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-CustomNoUpgrade.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-TechPreviewNoUpgrade.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/hostedclusters-CustomNoUpgrade.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/hostedclusters-Default.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/hostedclusters-TechPreviewNoUpgrade.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/hostedcontrolplanes-CustomNoUpgrade.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/hostedcontrolplanes-Default.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/hostedcontrolplanes-TechPreviewNoUpgrade.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/nodepools-CustomNoUpgrade.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/nodepools-Default.crd.yaml create mode 100644 cmd/install/assets/hypershift-operator/nodepools-TechPreviewNoUpgrade.crd.yaml diff --git a/api/hypershift/v1beta1/kubevirt.go b/api/hypershift/v1beta1/kubevirt.go index cc83e14d45b..90fa6284f29 100644 --- a/api/hypershift/v1beta1/kubevirt.go +++ b/api/hypershift/v1beta1/kubevirt.go @@ -191,6 +191,13 @@ type KubevirtNodePoolPlatform struct { // +optional // +kubebuilder:validation:MaxItems=10 KubevirtHostDevices []KubevirtHostDevice `json:"hostDevices,omitempty"` + + // networkData is inline cloud-init network data configuration for VMs in this NodePool. + // When specified, cloud-init volume changes from ConfigDrive to NoCloud. + // This allows for static network configuration of VMs. + // +kubebuilder:validation:MaxLength=2048 + // +optional + NetworkData *string `json:"networkData,omitempty"` } // KubevirtNetwork specifies the configuration for a virtual machine diff --git a/api/hypershift/v1beta1/zz_generated.deepcopy.go b/api/hypershift/v1beta1/zz_generated.deepcopy.go index 7681b2a70ae..a4693d4844a 100644 --- a/api/hypershift/v1beta1/zz_generated.deepcopy.go +++ b/api/hypershift/v1beta1/zz_generated.deepcopy.go @@ -2503,6 +2503,11 @@ func (in *KubevirtNodePoolPlatform) DeepCopyInto(out *KubevirtNodePoolPlatform) *out = make([]KubevirtHostDevice, len(*in)) copy(*out, *in) } + if in.NetworkData != nil { + in, out := &in.NetworkData, &out.NetworkData + *out = new(string) + **out = **in + } } // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new KubevirtNodePoolPlatform. diff --git a/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/AAA_ungated.yaml b/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/AAA_ungated.yaml index 827dabc92c9..73385236cec 100644 --- a/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/AAA_ungated.yaml +++ b/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/AAA_ungated.yaml @@ -1102,6 +1102,13 @@ spec: type: object maxItems: 10 type: array + networkData: + description: |- + networkData is inline cloud-init network data configuration for VMs in this NodePool. + When specified, cloud-init volume changes from ConfigDrive to NoCloud. + This allows for static network configuration of VMs. + maxLength: 2048 + type: string networkInterfaceMultiqueue: default: Enable description: |- diff --git a/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/OpenStack.yaml b/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/OpenStack.yaml index d81a25de166..3fa2427c71f 100644 --- a/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/OpenStack.yaml +++ b/api/hypershift/v1beta1/zz_generated.featuregated-crd-manifests/nodepools.hypershift.openshift.io/OpenStack.yaml @@ -1102,6 +1102,13 @@ spec: type: object maxItems: 10 type: array + networkData: + description: |- + networkData is inline cloud-init network data configuration for VMs in this NodePool. + When specified, cloud-init volume changes from ConfigDrive to NoCloud. + This allows for static network configuration of VMs. + maxLength: 2048 + type: string networkInterfaceMultiqueue: default: Enable description: |- diff --git a/client/applyconfiguration/hypershift/v1beta1/kubevirtnodepoolplatform.go b/client/applyconfiguration/hypershift/v1beta1/kubevirtnodepoolplatform.go index c9648d9b988..64e6ecc1e09 100644 --- a/client/applyconfiguration/hypershift/v1beta1/kubevirtnodepoolplatform.go +++ b/client/applyconfiguration/hypershift/v1beta1/kubevirtnodepoolplatform.go @@ -31,6 +31,7 @@ type KubevirtNodePoolPlatformApplyConfiguration struct { AttachDefaultNetwork *bool `json:"attachDefaultNetwork,omitempty"` NodeSelector map[string]string `json:"nodeSelector,omitempty"` KubevirtHostDevices []KubevirtHostDeviceApplyConfiguration `json:"hostDevices,omitempty"` + NetworkData *string `json:"networkData,omitempty"` } // KubevirtNodePoolPlatformApplyConfiguration constructs a declarative configuration of the KubevirtNodePoolPlatform type for use with @@ -110,3 +111,11 @@ func (b *KubevirtNodePoolPlatformApplyConfiguration) WithKubevirtHostDevices(val } return b } + +// WithNetworkData sets the NetworkData field in the declarative configuration to the given value +// and returns the receiver, so that objects can be built by chaining "With" function invocations. +// If called multiple times, the NetworkData field is set to the value of the last call. +func (b *KubevirtNodePoolPlatformApplyConfiguration) WithNetworkData(value string) *KubevirtNodePoolPlatformApplyConfiguration { + b.NetworkData = &value + return b +} diff --git a/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachines.yaml b/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachines.yaml index 2f1256d8d4b..689010dd158 100644 --- a/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachines.yaml +++ b/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachines.yaml @@ -94,6 +94,11 @@ spec: type: string type: object x-kubernetes-map-type: atomic + networkData: + description: |- + NetworkData contains inline cloud-init network data configuration. + When specified, the cloud-init volume will use NoCloud instead of ConfigDrive. + type: string providerID: description: ProviderID TBD what to use for Kubevirt type: string diff --git a/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachinetemplates.yaml b/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachinetemplates.yaml index 1fe9b1d9f00..a56e1846ab0 100644 --- a/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachinetemplates.yaml +++ b/cmd/install/assets/cluster-api-provider-kubevirt/infrastructure.cluster.x-k8s.io_kubevirtmachinetemplates.yaml @@ -96,6 +96,11 @@ spec: type: string type: object x-kubernetes-map-type: atomic + networkData: + description: |- + NetworkData contains inline cloud-init network data configuration. + When specified, the cloud-init volume will use NoCloud instead of ConfigDrive. + type: string providerID: description: ProviderID TBD what to use for Kubevirt type: string diff --git a/cmd/install/assets/hypershift-operator/awsendpointservices.crd.yaml b/cmd/install/assets/hypershift-operator/awsendpointservices.crd.yaml new file mode 100644 index 00000000000..8e0e39ac93b --- /dev/null +++ b/cmd/install/assets/hypershift-operator/awsendpointservices.crd.yaml @@ -0,0 +1,194 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + name: awsendpointservices.hypershift.openshift.io +spec: + group: hypershift.openshift.io + names: + kind: AWSEndpointService + listKind: AWSEndpointServiceList + plural: awsendpointservices + singular: awsendpointservice + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + description: AWSEndpointService specifies a request for an Endpoint Service + in AWS + 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 is the specification for the AWSEndpointService. + properties: + networkLoadBalancerName: + description: |- + networkLoadBalancerName is the name of the NLB for which an Endpoint Service should be configured + NetworkLoadBalancerName is the name of the network load balancer. + maxLength: 255 + type: string + resourceTags: + description: resourceTags is the list of tags to apply to the EndpointService + 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 + subnetIDs: + description: subnetIDs is the list of subnet IDs to which guest nodes + can attach + items: + maxLength: 63 + type: string + maxItems: 10 + type: array + required: + - networkLoadBalancerName + type: object + status: + description: status is the status of the AWSEndpointService. + properties: + conditions: + description: |- + conditions contains details for the current state of the Endpoint Service + request If there is an error processing the request e.g. the NLB doesn't + exist, then the Available condition will be false, reason AWSErrorReason, + and the error reported in the message. + + Current condition types are: "Available" + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + dnsNames: + description: dnsNames are the names for the records created in the + hypershift private zone + items: + maxLength: 253 + type: string + maxItems: 10 + type: array + dnsZoneID: + description: dnsZoneID is ID for the hypershift private zone + maxLength: 255 + type: string + endpointID: + description: endpointID is the ID of the Endpoint created in the guest + VPC + maxLength: 255 + type: string + endpointServiceName: + description: |- + endpointServiceName is the name of the Endpoint Service created in the + management VPC + maxLength: 255 + type: string + securityGroupID: + description: |- + securityGroupID is the ID for the VPC endpoint SecurityGroup + SecurityGroupID is the ID of the security group. + maxLength: 255 + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/cmd/install/assets/hypershift-operator/certificatesigningrequestapprovals.crd.yaml b/cmd/install/assets/hypershift-operator/certificatesigningrequestapprovals.crd.yaml new file mode 100644 index 00000000000..12d9e60c3ad --- /dev/null +++ b/cmd/install/assets/hypershift-operator/certificatesigningrequestapprovals.crd.yaml @@ -0,0 +1,53 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + name: certificatesigningrequestapprovals.hypershift.openshift.io +spec: + group: hypershift.openshift.io + names: + kind: CertificateSigningRequestApproval + listKind: CertificateSigningRequestApprovalList + plural: certificatesigningrequestapprovals + shortNames: + - csra + - csras + singular: certificatesigningrequestapproval + scope: Namespaced + versions: + - name: v1beta1 + schema: + openAPIV3Schema: + description: CertificateSigningRequestApproval defines the desired state of + CertificateSigningRequestApproval + 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 is the specification of the desired behavior of the + CertificateSigningRequestApproval. + type: object + status: + description: status is the most recently observed status of the CertificateSigningRequestApproval. + type: object + type: object + served: true + storage: true diff --git a/cmd/install/assets/hypershift-operator/controlplanecomponents.crd.yaml b/cmd/install/assets/hypershift-operator/controlplanecomponents.crd.yaml new file mode 100644 index 00000000000..f164c80c10d --- /dev/null +++ b/cmd/install/assets/hypershift-operator/controlplanecomponents.crd.yaml @@ -0,0 +1,171 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + name: controlplanecomponents.hypershift.openshift.io +spec: + group: hypershift.openshift.io + names: + kind: ControlPlaneComponent + listKind: ControlPlaneComponentList + plural: controlplanecomponents + shortNames: + - cpc + - cpcs + singular: controlplanecomponent + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Version + jsonPath: .status.version + name: Version + type: string + - description: Available + jsonPath: .status.conditions[?(@.type=="Available")].status + name: Available + type: string + - description: Progressing + jsonPath: .status.conditions[?(@.type=="Progressing")].status + name: Progressing + type: string + - description: Message + jsonPath: .status.conditions[?(@.type=="Available")].message + name: Message + type: string + - description: ProgressingMessage + jsonPath: .status.conditions[?(@.type=="Progressing")].message + name: ProgressingMessage + priority: 1 + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: ControlPlaneComponent specifies the state of a ControlPlane Component + 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 is the specification for the ControlPlaneComponent. + type: object + status: + description: status is the status of the ControlPlaneComponent. + properties: + conditions: + description: |- + conditions contains details for the current state of the ControlPlane Component. + If there is an error, then the Available condition will be false. + + Current condition types are: "Available" + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + resources: + description: resources is a list of the resources reconciled by this + component. + items: + description: ComponentResource defines a resource reconciled by + a ControlPlaneComponent. + properties: + group: + description: group is the API group for this resource type. + maxLength: 255 + type: string + kind: + description: kind is the name of the resource schema. + maxLength: 255 + type: string + name: + description: name is the name of this resource. + maxLength: 255 + type: string + required: + - group + - kind + - name + type: object + maxItems: 100 + type: array + version: + description: version reports the current version of this component. + maxLength: 255 + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/cmd/install/assets/hypershift-operator/doc.go b/cmd/install/assets/hypershift-operator/doc.go new file mode 100644 index 00000000000..a4a42ea8803 --- /dev/null +++ b/cmd/install/assets/hypershift-operator/doc.go @@ -0,0 +1 @@ +package hypershift_v1beta1_crdmanifests diff --git a/cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-CustomNoUpgrade.crd.yaml b/cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-CustomNoUpgrade.crd.yaml new file mode 100644 index 00000000000..74ba1c98b1f --- /dev/null +++ b/cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-CustomNoUpgrade.crd.yaml @@ -0,0 +1,192 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + release.openshift.io/feature-set: CustomNoUpgrade + name: gcpprivateserviceconnects.hypershift.openshift.io +spec: + group: hypershift.openshift.io + names: + kind: GCPPrivateServiceConnect + listKind: GCPPrivateServiceConnectList + plural: gcpprivateserviceconnects + shortNames: + - gcppsc + singular: gcpprivateserviceconnect + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Name of the Service Attachment + jsonPath: .status.serviceAttachmentName + name: Service Attachment + type: string + - description: IP address of the PSC endpoint + jsonPath: .status.endpointIP + name: Endpoint IP + type: string + - description: Overall PSC availability status + jsonPath: .status.conditions[?(@.type=="GCPPrivateServiceConnectAvailable")].status + name: Available + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: |- + GCPPrivateServiceConnect represents GCP Private Service Connect infrastructure. + This resource is feature-gated behind the GCPPlatform feature gate. + 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 is the specification for the GCPPrivateServiceConnect. + properties: + consumerAcceptList: + description: |- + consumerAcceptList specifies which customer projects can connect + Accepts both project IDs (e.g. "my-project-123") and project numbers (e.g. "123456789012") + items: + maxLength: 30 + pattern: ^([a-z][a-z0-9-]{4,28}[a-z0-9]|[0-9]{6,12})$ + type: string + maxItems: 50 + minItems: 1 + type: array + forwardingRuleName: + description: forwardingRuleName is the name of the Internal Load Balancer + forwarding rule + maxLength: 63 + minLength: 1 + pattern: ^[a-z]([-a-z0-9]*[a-z0-9])?$ + type: string + natSubnet: + description: |- + natSubnet is the subnet used for NAT by the Service Attachment + Auto-populated by the HyperShift Operator + maxLength: 63 + pattern: ^[a-z]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - consumerAcceptList + - forwardingRuleName + type: object + status: + description: status is the status of the GCPPrivateServiceConnect. + properties: + conditions: + description: |- + conditions represent the current state of PSC infrastructure + Current condition types are: "GCPPrivateServiceConnectAvailable", "GCPServiceAttachmentAvailable", "GCPEndpointAvailable", "GCPDNSAvailable" + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + dnsRecords: + description: dnsRecords lists the created DNS A records + items: + maxLength: 253 + type: string + maxItems: 10 + type: array + dnsZoneName: + description: dnsZoneName is the private DNS zone name + maxLength: 253 + type: string + endpointIP: + description: endpointIP is the reserved IP address for the PSC endpoint + maxLength: 15 + pattern: ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + type: string + serviceAttachmentName: + description: serviceAttachmentName is the name of the created Service + Attachment + maxLength: 63 + type: string + serviceAttachmentURI: + description: |- + serviceAttachmentURI is the URI customers use to connect + Format: projects/{project}/regions/{region}/serviceAttachments/{name} + maxLength: 2048 + pattern: ^projects/[a-z][a-z0-9-]{4,28}[a-z0-9]/regions/[a-z]+-[a-z0-9]+[0-9]/serviceAttachments/[a-z]([-a-z0-9]*[a-z0-9])?$ + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-TechPreviewNoUpgrade.crd.yaml b/cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-TechPreviewNoUpgrade.crd.yaml new file mode 100644 index 00000000000..6b581641bb0 --- /dev/null +++ b/cmd/install/assets/hypershift-operator/gcpprivateserviceconnects-TechPreviewNoUpgrade.crd.yaml @@ -0,0 +1,192 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + release.openshift.io/feature-set: TechPreviewNoUpgrade + name: gcpprivateserviceconnects.hypershift.openshift.io +spec: + group: hypershift.openshift.io + names: + kind: GCPPrivateServiceConnect + listKind: GCPPrivateServiceConnectList + plural: gcpprivateserviceconnects + shortNames: + - gcppsc + singular: gcpprivateserviceconnect + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Name of the Service Attachment + jsonPath: .status.serviceAttachmentName + name: Service Attachment + type: string + - description: IP address of the PSC endpoint + jsonPath: .status.endpointIP + name: Endpoint IP + type: string + - description: Overall PSC availability status + jsonPath: .status.conditions[?(@.type=="GCPPrivateServiceConnectAvailable")].status + name: Available + type: string + - jsonPath: .metadata.creationTimestamp + name: Age + type: date + name: v1beta1 + schema: + openAPIV3Schema: + description: |- + GCPPrivateServiceConnect represents GCP Private Service Connect infrastructure. + This resource is feature-gated behind the GCPPlatform feature gate. + 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 is the specification for the GCPPrivateServiceConnect. + properties: + consumerAcceptList: + description: |- + consumerAcceptList specifies which customer projects can connect + Accepts both project IDs (e.g. "my-project-123") and project numbers (e.g. "123456789012") + items: + maxLength: 30 + pattern: ^([a-z][a-z0-9-]{4,28}[a-z0-9]|[0-9]{6,12})$ + type: string + maxItems: 50 + minItems: 1 + type: array + forwardingRuleName: + description: forwardingRuleName is the name of the Internal Load Balancer + forwarding rule + maxLength: 63 + minLength: 1 + pattern: ^[a-z]([-a-z0-9]*[a-z0-9])?$ + type: string + natSubnet: + description: |- + natSubnet is the subnet used for NAT by the Service Attachment + Auto-populated by the HyperShift Operator + maxLength: 63 + pattern: ^[a-z]([-a-z0-9]*[a-z0-9])?$ + type: string + required: + - consumerAcceptList + - forwardingRuleName + type: object + status: + description: status is the status of the GCPPrivateServiceConnect. + properties: + conditions: + description: |- + conditions represent the current state of PSC infrastructure + Current condition types are: "GCPPrivateServiceConnectAvailable", "GCPServiceAttachmentAvailable", "GCPEndpointAvailable", "GCPDNSAvailable" + items: + description: Condition contains details for one aspect of the current + state of this API Resource. + properties: + lastTransitionTime: + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. + format: date-time + type: string + message: + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. + maxLength: 32768 + type: string + observedGeneration: + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. + format: int64 + minimum: 0 + type: integer + reason: + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. + maxLength: 1024 + minLength: 1 + pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ + type: string + status: + description: status of the condition, one of True, False, Unknown. + enum: + - "True" + - "False" + - Unknown + type: string + type: + description: type of condition in CamelCase or in foo.example.com/CamelCase. + maxLength: 316 + pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ + type: string + required: + - lastTransitionTime + - message + - reason + - status + - type + type: object + maxItems: 10 + type: array + x-kubernetes-list-map-keys: + - type + x-kubernetes-list-type: map + dnsRecords: + description: dnsRecords lists the created DNS A records + items: + maxLength: 253 + type: string + maxItems: 10 + type: array + dnsZoneName: + description: dnsZoneName is the private DNS zone name + maxLength: 253 + type: string + endpointIP: + description: endpointIP is the reserved IP address for the PSC endpoint + maxLength: 15 + pattern: ^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ + type: string + serviceAttachmentName: + description: serviceAttachmentName is the name of the created Service + Attachment + maxLength: 63 + type: string + serviceAttachmentURI: + description: |- + serviceAttachmentURI is the URI customers use to connect + Format: projects/{project}/regions/{region}/serviceAttachments/{name} + maxLength: 2048 + pattern: ^projects/[a-z][a-z0-9-]{4,28}[a-z0-9]/regions/[a-z]+-[a-z0-9]+[0-9]/serviceAttachments/[a-z]([-a-z0-9]*[a-z0-9])?$ + type: string + type: object + type: object + served: true + storage: true + subresources: + status: {} diff --git a/cmd/install/assets/hypershift-operator/hostedclusters-CustomNoUpgrade.crd.yaml b/cmd/install/assets/hypershift-operator/hostedclusters-CustomNoUpgrade.crd.yaml new file mode 100644 index 00000000000..ef0dde5874f --- /dev/null +++ b/cmd/install/assets/hypershift-operator/hostedclusters-CustomNoUpgrade.crd.yaml @@ -0,0 +1,8230 @@ +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + annotations: + api.openshift.io/merged-by-featuregates: "true" + include.release.openshift.io/ibm-cloud-managed: "true" + include.release.openshift.io/self-managed-high-availability: "true" + release.openshift.io/feature-set: CustomNoUpgrade + name: hostedclusters.hypershift.openshift.io +spec: + group: hypershift.openshift.io + names: + kind: HostedCluster + listKind: HostedClusterList + plural: hostedclusters + shortNames: + - hc + - hcs + singular: hostedcluster + scope: Namespaced + versions: + - additionalPrinterColumns: + - description: Version + jsonPath: .status.version.history[?(@.state=="Completed")].version + name: Version + type: string + - description: KubeConfig Secret + jsonPath: .status.kubeconfig.name + name: KubeConfig + type: string + - description: Progress + jsonPath: .status.version.history[?(@.state!="")].state + name: Progress + type: string + - description: Available + jsonPath: .status.conditions[?(@.type=="Available")].status + name: Available + type: string + - description: Progressing + jsonPath: .status.conditions[?(@.type=="Progressing")].status + name: Progressing + type: string + - description: Message + jsonPath: .status.conditions[?(@.type=="Available")].message + name: Message + type: string + name: v1beta1 + schema: + openAPIV3Schema: + description: |- + HostedCluster is the primary representation of a HyperShift cluster and encapsulates + the control plane and common data plane configuration. Creating a HostedCluster + results in a fully functional OpenShift control plane with no attached nodes. + To support workloads (e.g. pods), a HostedCluster may have one or more associated + NodePool resources. + 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 is the desired behavior of the HostedCluster. + properties: + additionalTrustBundle: + description: |- + additionalTrustBundle is a local reference to a ConfigMap that must have a "ca-bundle.crt" key + whose content must be a PEM-encoded X.509 certificate bundle that will be added to the hosted controlplane and nodes + If the reference is set but none of the above requirements are met, the HostedCluster will enter a degraded state. + This will be part of every payload generated by the controllers for any NodePool of the HostedCluster. + Changing this value will trigger a rollout for all existing NodePools in the cluster. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + auditWebhook: + description: |- + auditWebhook contains metadata for configuring an audit webhook endpoint + for a cluster to process cluster audit events. It references a secret that + contains the webhook information for the audit webhook endpoint. It is a + secret because if the endpoint has mTLS the kubeconfig will contain client + keys. The kubeconfig needs to be stored in the secret with a secret key + name that corresponds to the constant AuditWebhookKubeconfigKey. + properties: + name: + default: "" + description: |- + Name of the referent. + This field is effectively required, but due to backwards compatibility is + allowed to be empty. Instances of this type with an empty value here are + almost certainly wrong. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names + type: string + type: object + x-kubernetes-map-type: atomic + autoNode: + description: autoNode specifies the configuration for the autoNode + feature. + properties: + provisionerConfig: + description: provisionerConfig is the implementation used for + Node auto provisioning. + properties: + karpenter: + description: karpenter specifies the configuration for the + Karpenter provisioner. + properties: + aws: + description: aws specifies the AWS-specific configuration + for Karpenter. + properties: + roleARN: + description: roleARN specifies the ARN of the Karpenter + provisioner. + maxLength: 255 + type: string + required: + - roleARN + type: object + platform: + description: platform specifies the platform-specific + configuration for Karpenter. + maxLength: 100 + type: string + required: + - platform + type: object + name: + allOf: + - enum: + - Karpenter + - enum: + - Karpenter + description: name specifies the name of the provisioner to + use. + type: string + required: + - name + type: object + required: + - provisionerConfig + type: object + autoscaling: + description: |- + autoscaling specifies auto-scaling behavior that applies to all NodePools + associated with this HostedCluster. + properties: + balancingIgnoredLabels: + description: |- + balancingIgnoredLabels sets "--balancing-ignore-label