From 28e7959f3c0dc95226560c85cf31d8c5aed3159b Mon Sep 17 00:00:00 2001 From: Francesco Pantano Date: Sun, 30 Nov 2025 16:08:24 +0100 Subject: [PATCH] Add support for multiple Cinder Backups configuration This patch integrates CinderBackups support into OpenStackControlPlane CRD and adds the corresponding logic. It enables configuration of multiple Cinder Backup services and deprecates the existing interface [1]. [1] https://github.com/openstack-k8s-operators/cinder-operator/pull/575 Signed-off-by: Francesco Pantano --- ....openstack.org_openstackcontrolplanes.yaml | 64 ++++++++ .../v1beta1/openstackcontrolplane_webhook.go | 8 +- api/go.mod | 8 +- api/go.sum | 16 +- .../crds/cinder.openstack.org_cinderapis.yaml | 2 +- .../cinder.openstack.org_cinderbackups.yaml | 2 +- .../crds/cinder.openstack.org_cinders.yaml | 141 +++++++++++++++++- ...cinder.openstack.org_cinderschedulers.yaml | 2 +- .../cinder.openstack.org_cindervolumes.yaml | 2 +- bindata/crds/crds.yaml | 64 ++++++++ ....openstack.org_openstackcontrolplanes.yaml | 64 ++++++++ config/operator/manager_operator_images.yaml | 4 +- go.mod | 8 +- go.sum | 16 +- hack/export_operator_related_images.sh | 4 +- internal/openstack/cinder.go | 11 ++ 16 files changed, 378 insertions(+), 38 deletions(-) diff --git a/api/bases/core.openstack.org_openstackcontrolplanes.yaml b/api/bases/core.openstack.org_openstackcontrolplanes.yaml index 4d78d2fef..59c6fffcb 100644 --- a/api/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/api/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -877,6 +877,70 @@ spec: type: string type: object type: object + cinderBackups: + additionalProperties: + properties: + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + type: object + type: object cinderScheduler: properties: customServiceConfig: diff --git a/api/core/v1beta1/openstackcontrolplane_webhook.go b/api/core/v1beta1/openstackcontrolplane_webhook.go index 66208c5d9..38b7c05bc 100644 --- a/api/core/v1beta1/openstackcontrolplane_webhook.go +++ b/api/core/v1beta1/openstackcontrolplane_webhook.go @@ -316,7 +316,9 @@ func (r *OpenStackControlPlane) ValidateCreateServices(basePath *field.Path) (ad maps.Keys(r.Spec.Cinder.Template.CinderVolumes), cinderv1.GetCrMaxLengthCorrection(cinderName)) // omit issue with statefulset pod label "controller-revision-hash": "-" errors = append(errors, errs...) - errors = append(errors, r.Spec.Cinder.Template.ValidateCreate(basePath.Child("cinder").Child("template"), r.Namespace)...) + warns, errs := r.Spec.Cinder.Template.ValidateCreate(basePath.Child("cinder").Child("template"), r.Namespace) + errors = append(errors, errs...) + warnings = append(warnings, warns...) errors = append(errors, validateTLSOverrideSpec(&r.Spec.Cinder.APIOverride.Route, basePath.Child("cinder").Child("apiOverride").Child("route"))...) } @@ -501,7 +503,9 @@ func (r *OpenStackControlPlane) ValidateUpdateServices(old OpenStackControlPlane maps.Keys(r.Spec.Cinder.Template.CinderVolumes), cinderv1.GetCrMaxLengthCorrection(cinderName)) // omit issue with statefulset pod label "controller-revision-hash": "-" errors = append(errors, errs...) - errors = append(errors, r.Spec.Cinder.Template.ValidateUpdate(*old.Cinder.Template, basePath.Child("cinder").Child("template"), r.Namespace)...) + warns, errs := r.Spec.Cinder.Template.ValidateUpdate(*old.Cinder.Template, basePath.Child("cinder").Child("template"), r.Namespace) + errors = append(errors, errs...) + warnings = append(warnings, warns...) errors = append(errors, validateTLSOverrideSpec(&r.Spec.Cinder.APIOverride.Route, basePath.Child("cinder").Child("apiOverride").Child("route"))...) } diff --git a/api/go.mod b/api/go.mod index 63d543121..a066c0754 100644 --- a/api/go.mod +++ b/api/go.mod @@ -5,15 +5,15 @@ go 1.24.4 require ( github.com/cert-manager/cert-manager v1.16.5 github.com/go-playground/validator/v10 v10.28.0 - github.com/onsi/ginkgo/v2 v2.27.2 - github.com/onsi/gomega v1.38.2 + github.com/onsi/ginkgo/v2 v2.27.3 + github.com/onsi/gomega v1.38.3 github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20251125115107-f489fa5ceb3c - github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251204132059-3dda695e96ae + github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251215101145-f9d7fba7522e github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20251203145024-0f6b7a8e7dc5 github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20251203100349-4a406668b8c7 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20251125115646-26b110b9f3e7 github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20251125145341-8bc80a35f9c5 - github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251205192058-5cfbada0ab96 + github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251206161943-786269345f99 github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20251203164336-97b491f161c0 github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20251128160419-8b3a77972a77 github.com/openstack-k8s-operators/lib-common/modules/common v0.6.1-0.20251122131503-b76943960b6c diff --git a/api/go.sum b/api/go.sum index f23c009dc..b2afe9953 100644 --- a/api/go.sum +++ b/api/go.sum @@ -108,16 +108,16 @@ github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFd github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns= -github.com/onsi/ginkgo/v2 v2.27.2/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= -github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= -github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= +github.com/onsi/ginkgo/v2 v2.27.3 h1:ICsZJ8JoYafeXFFlFAG75a7CxMsJHwgKwtO+82SE9L8= +github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= +github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM= +github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e h1:E1OdwSpqWuDPCedyUt0GEdoAE+r5TXy7YS21yNEo+2U= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e/go.mod h1:Shkl4HanLwDiiBzakv+con/aMGnVE2MAGvoKp5oyYUo= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20251125115107-f489fa5ceb3c h1:cQRQbyBmYfS4Ubj/0hwj5IVs0AAZqMyhqA1i50r4oTI= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20251125115107-f489fa5ceb3c/go.mod h1:HURjuNEy1OrE7bn2snCYMzk148bHaD7u7JleEu9h5ws= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251204132059-3dda695e96ae h1:KNfIrxh4nfNvh6PC8pekXefNtQgvWuAGpUefqRW9XUU= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251204132059-3dda695e96ae/go.mod h1:IrtEtP+mjH2pHLQvk9ZzKebtjMW50HKG0IhooZgmmDw= +github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251215101145-f9d7fba7522e h1:7ycLZrIuoBkeWo2gX1Qm2cYRrBnpYAEpBNYG/qD+HGY= +github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251215101145-f9d7fba7522e/go.mod h1:9z03RzMVCjIHeL94YeDHFoFbU69NGMiFQFXNPS9QZ1E= github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20251203145024-0f6b7a8e7dc5 h1:iUSQ+Goc3KAjL+H41mf1Dqi+L8cxvTU3ooFESVSyDZw= github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20251203145024-0f6b7a8e7dc5/go.mod h1:n5EzCMhTH/Y0YmTMrOpLUyaE94N183c6kNI8oOWsHsk= github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20251203100349-4a406668b8c7 h1:ClmWHUH41VsMru9cD4IciyRJuw1bXXMBjt19JYRON/8= @@ -126,8 +126,8 @@ github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20251125115646-26b github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20251125115646-26b110b9f3e7/go.mod h1:ABIb9YiV6nmcGC4h49X8eJIeqmnG/6j77eIiYQGWrUc= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20251125145341-8bc80a35f9c5 h1:VxWuwuIbNmexcpL2JpLaWAj1aFR0v1BfehIKpbCwIfY= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20251125145341-8bc80a35f9c5/go.mod h1:NHffNXXDFrfJx/+htPjd8WvDRMPqddRJThBqujwlFc8= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251205192058-5cfbada0ab96 h1:hPgCcrbRHBPfngaEPe6coaCtcauMolI71lfcLdinrKI= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251205192058-5cfbada0ab96/go.mod h1:ZuglN7IqXfIo75WcJwe0NLHhu82Fs3k/5IXptqnO1H4= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251206161943-786269345f99 h1:J9SzxfFmQQEMpfoCtpKUd87LtQXLWGZORL+6nBdtP+w= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251206161943-786269345f99/go.mod h1:UgaMi5mHTvaGYLdPKwewSnYiSm75P+vowRqbqknHlbw= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20251203164336-97b491f161c0 h1:Dw3Fr0GW9mlrhbSe12ZEadPZA18HuGt3l1GT/EgeYSU= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20251203164336-97b491f161c0/go.mod h1:O0wyWPhcAxsdvbXikS9KFmE9EB2SLSC5oWdMw6PHUXI= github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20251128160419-8b3a77972a77 h1:XzVPjfzxDJwgW8sNGv9K577Ui2mb6Mp3sDItuDmTv9E= diff --git a/bindata/crds/cinder.openstack.org_cinderapis.yaml b/bindata/crds/cinder.openstack.org_cinderapis.yaml index 0af531621..3764c62fb 100644 --- a/bindata/crds/cinder.openstack.org_cinderapis.yaml +++ b/bindata/crds/cinder.openstack.org_cinderapis.yaml @@ -60,7 +60,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- diff --git a/bindata/crds/cinder.openstack.org_cinderbackups.yaml b/bindata/crds/cinder.openstack.org_cinderbackups.yaml index f540e9477..dcb786d94 100644 --- a/bindata/crds/cinder.openstack.org_cinderbackups.yaml +++ b/bindata/crds/cinder.openstack.org_cinderbackups.yaml @@ -60,7 +60,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- diff --git a/bindata/crds/cinder.openstack.org_cinders.yaml b/bindata/crds/cinder.openstack.org_cinders.yaml index d4cd73366..0cc855df2 100644 --- a/bindata/crds/cinder.openstack.org_cinders.yaml +++ b/bindata/crds/cinder.openstack.org_cinders.yaml @@ -65,7 +65,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- @@ -377,7 +377,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- @@ -488,6 +488,133 @@ spec: required: - containerImage type: object + cinderBackups: + additionalProperties: + description: CinderBackupTemplate defines the input parameters for + the Cinder Backup service + properties: + containerImage: + description: ContainerImage - Cinder Container Image URL (will + be set to environmental default if empty) + type: string + customServiceConfig: + description: |- + CustomServiceConfig - customize the service config using this parameter to change service defaults, + or overwrite rendered information using raw OpenStack config format. The content gets added to + the /etc//.conf.d directory as a custom config file. + type: string + customServiceConfigSecrets: + description: |- + CustomServiceConfigSecrets - customize the service config using this parameter to specify Secrets + that contain sensitive service config data. The content of each Secret gets added to the + /etc//.conf.d directory as a custom config file. + items: + type: string + type: array + networkAttachments: + description: NetworkAttachments is a list of NetworkAttachment + resource names to expose the services to the given network + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + description: |- + NodeSelector to target subset of worker nodes running this service. Setting here overrides + any global NodeSelector settings within the Cinder CR. + type: object + replicas: + default: 1 + description: Replicas - Cinder Backup Replicas + format: int32 + minimum: 0 + type: integer + resources: + description: |- + Resources - Compute Resources required by this service (Limits/Requests). + https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + properties: + claims: + description: |- + Claims lists the names of resources, defined in spec.resourceClaims, + that are used by this container. + + This is an alpha field and requires enabling the + DynamicResourceAllocation feature gate. + + This field is immutable. It can only be set for containers. + items: + description: ResourceClaim references one entry in PodSpec.ResourceClaims. + properties: + name: + description: |- + Name must match the name of one entry in pod.spec.resourceClaims of + the Pod where this field is used. It makes that resource available + inside a container. + type: string + request: + description: |- + Request is the name chosen for a request in the referenced claim. + If empty, everything from the claim is made available, otherwise + only the result of this request. + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: |- + Limits describes the maximum amount of compute resources allowed. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + description: |- + Requests describes the minimum amount of compute resources required. + If Requests is omitted for a container, it defaults to Limits if that is explicitly specified, + otherwise to an implementation-defined value. Requests cannot exceed Limits. + More info: https://kubernetes.io/docs/concepts/configuration/manage-resources-containers/ + type: object + type: object + topologyRef: + description: |- + TopologyRef to apply the Topology defined by the associated CR referenced + by name + properties: + name: + description: Name - The Topology CR name that the Service + references + type: string + namespace: + description: |- + Namespace - The Namespace to fetch the Topology CR referenced + NOTE: Namespace currently points by default to the same namespace where + the Service is deployed. Customizing the namespace is not supported and + webhooks prevent editing this field to a value different from the + current project + type: string + type: object + required: + - containerImage + type: object + description: CinderBackups - Spec definition for the Backup service + of this Cinder deployment + type: object cinderScheduler: description: CinderScheduler - Spec definition for the Scheduler service of this Cinder deployment @@ -500,7 +627,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- @@ -624,7 +751,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- @@ -1988,6 +2115,12 @@ spec: format: int32 minimum: 0 type: integer + cinderBackupsReadyCounts: + additionalProperties: + format: int32 + type: integer + description: ReadyCounts of Cinder Backup instances + type: object cinderSchedulerReadyCount: default: 0 description: ReadyCount of Cinder Scheduler instance diff --git a/bindata/crds/cinder.openstack.org_cinderschedulers.yaml b/bindata/crds/cinder.openstack.org_cinderschedulers.yaml index 2de62b9c6..6b997aed9 100644 --- a/bindata/crds/cinder.openstack.org_cinderschedulers.yaml +++ b/bindata/crds/cinder.openstack.org_cinderschedulers.yaml @@ -60,7 +60,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- diff --git a/bindata/crds/cinder.openstack.org_cindervolumes.yaml b/bindata/crds/cinder.openstack.org_cindervolumes.yaml index 076d9ca89..6cc21c5ba 100644 --- a/bindata/crds/cinder.openstack.org_cindervolumes.yaml +++ b/bindata/crds/cinder.openstack.org_cindervolumes.yaml @@ -60,7 +60,7 @@ spec: description: |- CustomServiceConfig - customize the service config using this parameter to change service defaults, or overwrite rendered information using raw OpenStack config format. The content gets added to - to /etc//.conf.d directory as a custom config file. + the /etc//.conf.d directory as a custom config file. type: string customServiceConfigSecrets: description: |- diff --git a/bindata/crds/crds.yaml b/bindata/crds/crds.yaml index c072f1e9b..f4dbf5c63 100644 --- a/bindata/crds/crds.yaml +++ b/bindata/crds/crds.yaml @@ -1043,6 +1043,70 @@ spec: type: string type: object type: object + cinderBackups: + additionalProperties: + properties: + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + type: object + type: object cinderScheduler: properties: customServiceConfig: diff --git a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml index 4d78d2fef..59c6fffcb 100644 --- a/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml +++ b/config/crd/bases/core.openstack.org_openstackcontrolplanes.yaml @@ -877,6 +877,70 @@ spec: type: string type: object type: object + cinderBackups: + additionalProperties: + properties: + customServiceConfig: + type: string + customServiceConfigSecrets: + items: + type: string + type: array + networkAttachments: + items: + type: string + type: array + nodeSelector: + additionalProperties: + type: string + type: object + replicas: + default: 1 + format: int32 + minimum: 0 + type: integer + resources: + properties: + claims: + items: + properties: + name: + type: string + request: + type: string + required: + - name + type: object + type: array + x-kubernetes-list-map-keys: + - name + x-kubernetes-list-type: map + limits: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + requests: + additionalProperties: + anyOf: + - type: integer + - type: string + pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ + x-kubernetes-int-or-string: true + type: object + type: object + topologyRef: + properties: + name: + type: string + namespace: + type: string + type: object + type: object + type: object cinderScheduler: properties: customServiceConfig: diff --git a/config/operator/manager_operator_images.yaml b/config/operator/manager_operator_images.yaml index 881954ed1..490d3e10c 100644 --- a/config/operator/manager_operator_images.yaml +++ b/config/operator/manager_operator_images.yaml @@ -16,7 +16,7 @@ spec: - name: RELATED_IMAGE_BARBICAN_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/barbican-operator@sha256:f6059a0fbf031d34dcf086d14ce8c0546caeaee23c5780e90b5037c5feee9fea - name: RELATED_IMAGE_CINDER_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/cinder-operator@sha256:981b6a8f95934a86c5f10ef6e198b07265aeba7f11cf84b9ccd13dfaf06f3ca3 + value: quay.io/openstack-k8s-operators/cinder-operator@sha256:5639a8e1bbc8006cf0797de49b4c063c3531972e476c2257889bb66dac7fad8a - name: RELATED_IMAGE_DESIGNATE_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/designate-operator@sha256:900050d3501c0785b227db34b89883efe68247816e5c7427cacb74f8aa10605a - name: RELATED_IMAGE_GLANCE_OPERATOR_MANAGER_IMAGE_URL @@ -26,7 +26,7 @@ spec: - name: RELATED_IMAGE_HORIZON_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/horizon-operator@sha256:9e847f4dbdea19ab997f32a02b3680a9bd966f9c705911645c3866a19fda9ea5 - name: RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL - value: quay.io/openstack-k8s-operators/infra-operator@sha256:ccc60d56d8efc2e91a7d8a7131eb7e06c189c32247f2a819818c084ba2e2f2ab + value: quay.io/openstack-k8s-operators/infra-operator@sha256:1558b4a211f7937c81de6af289ba91cdd823f645c5ea9b899ebb7e79c3472393 - name: RELATED_IMAGE_IRONIC_OPERATOR_MANAGER_IMAGE_URL value: quay.io/openstack-k8s-operators/ironic-operator@sha256:5bdb3685be3ddc1efd62e16aaf2fa96ead64315e26d52b1b2a7d8ac01baa1e87 - name: RELATED_IMAGE_KEYSTONE_OPERATOR_MANAGER_IMAGE_URL diff --git a/go.mod b/go.mod index 4b6f5ecae..5439827de 100644 --- a/go.mod +++ b/go.mod @@ -9,16 +9,16 @@ require ( github.com/google/uuid v1.6.0 github.com/iancoleman/strcase v0.3.0 github.com/k8snetworkplumbingwg/network-attachment-definition-client v1.7.7 - github.com/onsi/ginkgo/v2 v2.27.2 - github.com/onsi/gomega v1.38.2 + github.com/onsi/ginkgo/v2 v2.27.3 + github.com/onsi/gomega v1.38.3 github.com/openshift/api v3.9.0+incompatible github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20251125115107-f489fa5ceb3c - github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251204132059-3dda695e96ae + github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251215101145-f9d7fba7522e github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20251203145024-0f6b7a8e7dc5 github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20251203100349-4a406668b8c7 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20251125115646-26b110b9f3e7 github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20251125145341-8bc80a35f9c5 - github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251205192058-5cfbada0ab96 + github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251206161943-786269345f99 github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20251203164336-97b491f161c0 github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20251128160419-8b3a77972a77 github.com/openstack-k8s-operators/lib-common/modules/ansible v0.6.1-0.20251122131503-b76943960b6c diff --git a/go.sum b/go.sum index 5c9d070be..00587f564 100644 --- a/go.sum +++ b/go.sum @@ -132,16 +132,16 @@ github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFd github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/onsi/ginkgo/v2 v2.27.2 h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns= -github.com/onsi/ginkgo/v2 v2.27.2/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= -github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A= -github.com/onsi/gomega v1.38.2/go.mod h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k= +github.com/onsi/ginkgo/v2 v2.27.3 h1:ICsZJ8JoYafeXFFlFAG75a7CxMsJHwgKwtO+82SE9L8= +github.com/onsi/ginkgo/v2 v2.27.3/go.mod h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo= +github.com/onsi/gomega v1.38.3 h1:eTX+W6dobAYfFeGC2PV6RwXRu/MyT+cQguijutvkpSM= +github.com/onsi/gomega v1.38.3/go.mod h1:ZCU1pkQcXDO5Sl9/VVEGlDyp+zm0m1cmeG5TOzLgdh4= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e h1:E1OdwSpqWuDPCedyUt0GEdoAE+r5TXy7YS21yNEo+2U= github.com/openshift/api v0.0.0-20250711200046-c86d80652a9e/go.mod h1:Shkl4HanLwDiiBzakv+con/aMGnVE2MAGvoKp5oyYUo= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20251125115107-f489fa5ceb3c h1:cQRQbyBmYfS4Ubj/0hwj5IVs0AAZqMyhqA1i50r4oTI= github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20251125115107-f489fa5ceb3c/go.mod h1:HURjuNEy1OrE7bn2snCYMzk148bHaD7u7JleEu9h5ws= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251204132059-3dda695e96ae h1:KNfIrxh4nfNvh6PC8pekXefNtQgvWuAGpUefqRW9XUU= -github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251204132059-3dda695e96ae/go.mod h1:IrtEtP+mjH2pHLQvk9ZzKebtjMW50HKG0IhooZgmmDw= +github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251215101145-f9d7fba7522e h1:7ycLZrIuoBkeWo2gX1Qm2cYRrBnpYAEpBNYG/qD+HGY= +github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20251215101145-f9d7fba7522e/go.mod h1:9z03RzMVCjIHeL94YeDHFoFbU69NGMiFQFXNPS9QZ1E= github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20251203145024-0f6b7a8e7dc5 h1:iUSQ+Goc3KAjL+H41mf1Dqi+L8cxvTU3ooFESVSyDZw= github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20251203145024-0f6b7a8e7dc5/go.mod h1:n5EzCMhTH/Y0YmTMrOpLUyaE94N183c6kNI8oOWsHsk= github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20251203100349-4a406668b8c7 h1:ClmWHUH41VsMru9cD4IciyRJuw1bXXMBjt19JYRON/8= @@ -150,8 +150,8 @@ github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20251125115646-26b github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20251125115646-26b110b9f3e7/go.mod h1:ABIb9YiV6nmcGC4h49X8eJIeqmnG/6j77eIiYQGWrUc= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20251125145341-8bc80a35f9c5 h1:VxWuwuIbNmexcpL2JpLaWAj1aFR0v1BfehIKpbCwIfY= github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20251125145341-8bc80a35f9c5/go.mod h1:NHffNXXDFrfJx/+htPjd8WvDRMPqddRJThBqujwlFc8= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251205192058-5cfbada0ab96 h1:hPgCcrbRHBPfngaEPe6coaCtcauMolI71lfcLdinrKI= -github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251205192058-5cfbada0ab96/go.mod h1:ZuglN7IqXfIo75WcJwe0NLHhu82Fs3k/5IXptqnO1H4= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251206161943-786269345f99 h1:J9SzxfFmQQEMpfoCtpKUd87LtQXLWGZORL+6nBdtP+w= +github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20251206161943-786269345f99/go.mod h1:UgaMi5mHTvaGYLdPKwewSnYiSm75P+vowRqbqknHlbw= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20251203164336-97b491f161c0 h1:Dw3Fr0GW9mlrhbSe12ZEadPZA18HuGt3l1GT/EgeYSU= github.com/openstack-k8s-operators/ironic-operator/api v0.6.1-0.20251203164336-97b491f161c0/go.mod h1:O0wyWPhcAxsdvbXikS9KFmE9EB2SLSC5oWdMw6PHUXI= github.com/openstack-k8s-operators/keystone-operator/api v0.6.1-0.20251128160419-8b3a77972a77 h1:XzVPjfzxDJwgW8sNGv9K577Ui2mb6Mp3sDItuDmTv9E= diff --git a/hack/export_operator_related_images.sh b/hack/export_operator_related_images.sh index d152a289f..37c45c9c0 100644 --- a/hack/export_operator_related_images.sh +++ b/hack/export_operator_related_images.sh @@ -1,12 +1,12 @@ # NOTE: this file is automatically generated by hack/sync-bindata.sh! export RELATED_IMAGE_BARBICAN_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/barbican-operator@sha256:f6059a0fbf031d34dcf086d14ce8c0546caeaee23c5780e90b5037c5feee9fea -export RELATED_IMAGE_CINDER_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/cinder-operator@sha256:981b6a8f95934a86c5f10ef6e198b07265aeba7f11cf84b9ccd13dfaf06f3ca3 +export RELATED_IMAGE_CINDER_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/cinder-operator@sha256:5639a8e1bbc8006cf0797de49b4c063c3531972e476c2257889bb66dac7fad8a export RELATED_IMAGE_DESIGNATE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/designate-operator@sha256:900050d3501c0785b227db34b89883efe68247816e5c7427cacb74f8aa10605a export RELATED_IMAGE_GLANCE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/glance-operator@sha256:5370dc4a8e776923eec00bb50cbdb2e390e9dde50be26bdc04a216bd2d6b5027 export RELATED_IMAGE_HEAT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/heat-operator@sha256:c4abfc148600dfa85915f3dc911d988ea2335f26cb6b8d749fe79bfe53e5e429 export RELATED_IMAGE_HORIZON_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/horizon-operator@sha256:9e847f4dbdea19ab997f32a02b3680a9bd966f9c705911645c3866a19fda9ea5 -export RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/infra-operator@sha256:ccc60d56d8efc2e91a7d8a7131eb7e06c189c32247f2a819818c084ba2e2f2ab +export RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/infra-operator@sha256:1558b4a211f7937c81de6af289ba91cdd823f645c5ea9b899ebb7e79c3472393 export RELATED_IMAGE_IRONIC_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/ironic-operator@sha256:5bdb3685be3ddc1efd62e16aaf2fa96ead64315e26d52b1b2a7d8ac01baa1e87 export RELATED_IMAGE_KEYSTONE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/keystone-operator@sha256:72ad6517987f674af0d0ae092cbb874aeae909c8b8b60188099c311762ebc8f7 export RELATED_IMAGE_MANILA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/manila-operator@sha256:44126f9c6b1d2bf752ddf989e20a4fc4cc1c07723d4fcb78465ccb2f55da6b3a diff --git a/internal/openstack/cinder.go b/internal/openstack/cinder.go index 344ebbee7..d85d0b891 100644 --- a/internal/openstack/cinder.go +++ b/internal/openstack/cinder.go @@ -166,6 +166,17 @@ func ReconcileCinder(ctx context.Context, instance *corev1beta1.OpenStackControl cinder.Spec.CinderVolumes[name] = cinderCore } + if instance.Spec.Cinder.Template.CinderBackups != nil { + bkp := make(map[string]cinderv1.CinderBackupTemplate) + cinder.Spec.CinderBackups = &bkp + for name, backup := range *instance.Spec.Cinder.Template.CinderBackups { + cinderBkpCore := cinderv1.CinderBackupTemplate{} + backup.DeepCopyInto(&cinderBkpCore.CinderBackupTemplateCore) + cinderBkpCore.ContainerImage = *version.Status.ContainerImages.CinderBackupImage + (*cinder.Spec.CinderBackups)[name] = cinderBkpCore + } + } + if cinder.Spec.Secret == "" { cinder.Spec.Secret = instance.Spec.Secret }