Repository: openstack-k8s-operators/openstack-operator
Pull request #1439: Add ServiceDefaults mechanism for updates support
Author: login: dprince
Labels: name: approved
name: lgtm
Created: 2025-05-12T18:11:19Z | Merged: 2025-05-21T06:57:57Z

ServiceDefaults is a new feild in the OpenStackVersion status that can be used to manage service defaults during an update.

Older OpenStackVersions won't have newly initialized defaults set and thus we treat them as legacy. In the case of glance they would continue to deploy with httpd+proxypass until the new OpenStackVersion for FR3 is selected and deployed.

Jira: https://issues.redhat.com/browse/OSPRH-16261



Diff:
diff --git a/apis/bases/core.openstack.org_openstackversions.yaml b/apis/bases/core.openstack.org_openstackversions.yaml
index aef68ffd14..811640cd00 100644
--- a/apis/bases/core.openstack.org_openstackversions.yaml
+++ b/apis/bases/core.openstack.org_openstackversions.yaml
@@ -233,6 +233,13 @@ spec:
             type: object
           status:
             properties:
+              availableServiceDefaults:
+                additionalProperties:
+                  properties:
+                    glanceWsgi:
+                      type: string
+                  type: object
+                type: object
               availableVersion:
                 type: string
               conditions:
@@ -638,6 +645,11 @@ spec:
               observedGeneration:
                 format: int64
                 type: integer
+              serviceDefaults:
+                properties:
+                  glanceWsgi:
+                    type: string
+                type: object
             type: object
         type: object
     served: true
diff --git a/apis/core/v1beta1/openstackversion_types.go b/apis/core/v1beta1/openstackversion_types.go
index ee8c1c2ed9..6582b1639f 100644
--- a/apis/core/v1beta1/openstackversion_types.go
+++ b/apis/core/v1beta1/openstackversion_types.go
@@ -164,6 +164,12 @@ type ContainerTemplate struct {
 	TestAnsibletestImage              *string `json:"testAnsibletestImage,omitempty"`
 }
 
+// ServiceDefaults - struct that contains defaults for OSP services that can change over time
+// but are associated with a specific OpenStack release version
+type ServiceDefaults struct {
+	GlanceWsgi *string `json:"glanceWsgi,omitempty"`
+}
+
 // OpenStackVersionStatus defines the observed state of OpenStackVersion
 type OpenStackVersionStatus struct {
 	// +operator-sdk:csv:customresourcedefinitions:type=status,xDescriptors={"urn:alm:descriptor:io.kubernetes.conditions"}
@@ -179,6 +185,12 @@ type OpenStackVersionStatus struct {
 	// where we keep track of the container images for previous versions
 	ContainerImageVersionDefaults map[string]*ContainerDefaults `json:"containerImageVersionDefaults,omitempty"`
 
+	// AvailableServiceDefaults - struct that contains defaults for OSP services for each discovered available version
+	AvailableServiceDefaults map[string]*ServiceDefaults `json:"availableServiceDefaults,omitempty"`
+
+	// ServiceDefaults - struct that contains current defaults for OSP services
+	ServiceDefaults ServiceDefaults `json:"serviceDefaults,omitempty"`
+
 	//ObservedGeneration - the most recent generation observed for this object.
 	ObservedGeneration int64 `json:"observedGeneration,omitempty"`
 }
diff --git a/apis/core/v1beta1/zz_generated.deepcopy.go b/apis/core/v1beta1/zz_generated.deepcopy.go
index 45670581c2..9bd836b090 100644
--- a/apis/core/v1beta1/zz_generated.deepcopy.go
+++ b/apis/core/v1beta1/zz_generated.deepcopy.go
@@ -1379,6 +1379,23 @@ func (in *OpenStackVersionStatus) DeepCopyInto(out *OpenStackVersionStatus) {
 			(*out)[key] = outVal
 		}
 	}
+	if in.AvailableServiceDefaults != nil {
+		in, out := &in.AvailableServiceDefaults, &out.AvailableServiceDefaults
+		*out = make(map[string]*ServiceDefaults, len(*in))
+		for key, val := range *in {
+			var outVal *ServiceDefaults
+			if val == nil {
+				(*out)[key] = nil
+			} else {
+				inVal := (*in)[key]
+				in, out := &inVal, &outVal
+				*out = new(ServiceDefaults)
+				(*in).DeepCopyInto(*out)
+			}
+			(*out)[key] = outVal
+		}
+	}
+	in.ServiceDefaults.DeepCopyInto(&out.ServiceDefaults)
 }
 
 // DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenStackVersionStatus.
@@ -1533,6 +1550,26 @@ func (in *RedisSection) DeepCopy() *RedisSection {
 	return out
 }
 
+// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
+func (in *ServiceDefaults) DeepCopyInto(out *ServiceDefaults) {
+	*out = *in
+	if in.GlanceWsgi != nil {
+		in, out := &in.GlanceWsgi, &out.GlanceWsgi
+		*out = new(string)
+		**out = **in
+	}
+}
+
+// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new ServiceDefaults.
+func (in *ServiceDefaults) DeepCopy() *ServiceDefaults {
+	if in == nil {
+		return nil
+	}
+	out := new(ServiceDefaults)
+	in.DeepCopyInto(out)
+	return out
+}
+
 // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
 func (in *SwiftSection) DeepCopyInto(out *SwiftSection) {
 	*out = *in
diff --git a/apis/go.mod b/apis/go.mod
index e78b471eb0..b11de4edb5 100644
--- a/apis/go.mod
+++ b/apis/go.mod
@@ -10,7 +10,7 @@ require (
 	github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250506130536-223f7d6134c0
 	github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250429124558-9bd7e7d196d3
 	github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250429111658-47223f655c85
-	github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250407064150-1cff0f51b44d
+	github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250514134204-2f79e310a53c
 	github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250509023421-ae77c00926c7
 	github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250509022835-28d7c16c3cea
 	github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250509194427-81d3a41eb9ca
diff --git a/apis/go.sum b/apis/go.sum
index fcbe74608a..8955be7d2a 100644
--- a/apis/go.sum
+++ b/apis/go.sum
@@ -100,8 +100,8 @@ github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250429124558-9
 github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250429124558-9bd7e7d196d3/go.mod h1:xwwIYSaH1j3kHeBx6QzNQtr9Os8eizorNfExk1ogofs=
 github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250429111658-47223f655c85 h1:cQxDpoiY2NsFycMHqT7gH44TDuD+X8Aq2robpM00HQU=
 github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250429111658-47223f655c85/go.mod h1:koOkgiyBGqXerPKPNT6XUfjWiERro5kRCmBmxuWAP4s=
-github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250407064150-1cff0f51b44d h1:DivsLnqDoMFnAWOOkOCoj9ilCM+6pFXRjvz4fSFSvJw=
-github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250407064150-1cff0f51b44d/go.mod h1:IRp2nEGLIQj9gZSc5aMJr5Wec9yBhr//6y7W41ur4KQ=
+github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250514134204-2f79e310a53c h1:gacCXyPW1ByJIh1hm8C3o2Um05n87GeyULz4vySsCt0=
+github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250514134204-2f79e310a53c/go.mod h1:cYKwcqIKJpNbjX7OebCnBWP1Fu8PfhTNqM4oeqMyrfI=
 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250509023421-ae77c00926c7 h1:vLbhKM15HVSgvL5KHARwRjKSYu4GdyQfPHNpvXLqip8=
 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250509023421-ae77c00926c7/go.mod h1:Wzn7+VSmDiwGy7kNPc9Adva/BX5lcYzfEUFigHBFUnA=
 github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250509022835-28d7c16c3cea h1:Jv8YX0NinuYNJWO4YQQo2UsHBwMsNG2WPBT5lE2BlUM=
diff --git a/bindata/crds/crds.yaml b/bindata/crds/crds.yaml
index f855339b5b..3f224d3798 100644
--- a/bindata/crds/crds.yaml
+++ b/bindata/crds/crds.yaml
@@ -19896,6 +19896,13 @@ spec:
             type: object
           status:
             properties:
+              availableServiceDefaults:
+                additionalProperties:
+                  properties:
+                    glanceWsgi:
+                      type: string
+                  type: object
+                type: object
               availableVersion:
                 type: string
               conditions:
@@ -20301,6 +20308,11 @@ spec:
               observedGeneration:
                 format: int64
                 type: integer
+              serviceDefaults:
+                properties:
+                  glanceWsgi:
+                    type: string
+                type: object
             type: object
         type: object
     served: true
diff --git a/config/crd/bases/core.openstack.org_openstackversions.yaml b/config/crd/bases/core.openstack.org_openstackversions.yaml
index aef68ffd14..811640cd00 100644
--- a/config/crd/bases/core.openstack.org_openstackversions.yaml
+++ b/config/crd/bases/core.openstack.org_openstackversions.yaml
@@ -233,6 +233,13 @@ spec:
             type: object
           status:
             properties:
+              availableServiceDefaults:
+                additionalProperties:
+                  properties:
+                    glanceWsgi:
+                      type: string
+                  type: object
+                type: object
               availableVersion:
                 type: string
               conditions:
@@ -638,6 +645,11 @@ spec:
               observedGeneration:
                 format: int64
                 type: integer
+              serviceDefaults:
+                properties:
+                  glanceWsgi:
+                    type: string
+                type: object
             type: object
         type: object
     served: true
diff --git a/config/operator/manager_operator_images.yaml b/config/operator/manager_operator_images.yaml
index 71d170905b..99b0ff6c3b 100644
--- a/config/operator/manager_operator_images.yaml
+++ b/config/operator/manager_operator_images.yaml
@@ -20,7 +20,7 @@ spec:
         - name: RELATED_IMAGE_DESIGNATE_OPERATOR_MANAGER_IMAGE_URL
           value: quay.io/openstack-k8s-operators/designate-operator@sha256:317bcf7b4e65abdff6fdf94b4c741986ac74559484a9eb6bd4d422190533dacc
         - name: RELATED_IMAGE_GLANCE_OPERATOR_MANAGER_IMAGE_URL
-          value: quay.io/openstack-k8s-operators/glance-operator@sha256:1ed34422907d48c5518baf3f7465eb1955b8c8e6ea077dc785584e4d9e7f5cb0
+          value: quay.io/openstack-k8s-operators/glance-operator@sha256:11b14c96f58239fcffb76a01be36e90b947d6a109d46895f2007f691142e1751
         - name: RELATED_IMAGE_HEAT_OPERATOR_MANAGER_IMAGE_URL
           value: quay.io/openstack-k8s-operators/heat-operator@sha256:0a8093395bed266301649ebbc9de6c3bd5381fd9aba5a586a6a6bb01bf24ef37
         - name: RELATED_IMAGE_HORIZON_OPERATOR_MANAGER_IMAGE_URL
diff --git a/controllers/core/openstackversion_controller.go b/controllers/core/openstackversion_controller.go
index c1a53aeec4..67b8606a53 100644
--- a/controllers/core/openstackversion_controller.go
+++ b/controllers/core/openstackversion_controller.go
@@ -200,6 +200,21 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
 	}
 	instance.Status.ContainerImages = openstack.GetContainerImages(val, *instance)
 
+	// initialize service defaults
+	serviceDefaults := openstack.InitializeOpenStackVersionServiceDefaults(ctx)
+	if instance.Status.AvailableServiceDefaults == nil {
+		instance.Status.AvailableServiceDefaults = make(map[string]*corev1beta1.ServiceDefaults)
+	}
+	// store the service defaults for the currently available version
+	instance.Status.AvailableServiceDefaults[envAvailableVersion] = serviceDefaults
+
+	serviceDefVal, ok := instance.Status.AvailableServiceDefaults[instance.Spec.TargetVersion]
+	if !ok {
+		instance.Status.ServiceDefaults = corev1beta1.ServiceDefaults{}
+	} else {
+		instance.Status.ServiceDefaults = *serviceDefVal
+	}
+
 	instance.Status.Conditions.MarkTrue(
 		corev1beta1.OpenStackVersionInitialized,
 		corev1beta1.OpenStackVersionInitializedReadyMessage)
diff --git a/go.mod b/go.mod
index 9a5d72f0c3..5ee8335b95 100644
--- a/go.mod
+++ b/go.mod
@@ -15,7 +15,7 @@ require (
 	github.com/openstack-k8s-operators/barbican-operator/api v0.6.1-0.20250506130536-223f7d6134c0
 	github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250429124558-9bd7e7d196d3
 	github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250429111658-47223f655c85
-	github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250407064150-1cff0f51b44d
+	github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250514134204-2f79e310a53c
 	github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250509023421-ae77c00926c7
 	github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250509022835-28d7c16c3cea
 	github.com/openstack-k8s-operators/infra-operator/apis v0.6.1-0.20250509194427-81d3a41eb9ca
diff --git a/go.sum b/go.sum
index f742805d5d..81913f07e8 100644
--- a/go.sum
+++ b/go.sum
@@ -104,8 +104,8 @@ github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250429124558-9
 github.com/openstack-k8s-operators/cinder-operator/api v0.6.1-0.20250429124558-9bd7e7d196d3/go.mod h1:xwwIYSaH1j3kHeBx6QzNQtr9Os8eizorNfExk1ogofs=
 github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250429111658-47223f655c85 h1:cQxDpoiY2NsFycMHqT7gH44TDuD+X8Aq2robpM00HQU=
 github.com/openstack-k8s-operators/designate-operator/api v0.6.1-0.20250429111658-47223f655c85/go.mod h1:koOkgiyBGqXerPKPNT6XUfjWiERro5kRCmBmxuWAP4s=
-github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250407064150-1cff0f51b44d h1:DivsLnqDoMFnAWOOkOCoj9ilCM+6pFXRjvz4fSFSvJw=
-github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250407064150-1cff0f51b44d/go.mod h1:IRp2nEGLIQj9gZSc5aMJr5Wec9yBhr//6y7W41ur4KQ=
+github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250514134204-2f79e310a53c h1:gacCXyPW1ByJIh1hm8C3o2Um05n87GeyULz4vySsCt0=
+github.com/openstack-k8s-operators/glance-operator/api v0.6.1-0.20250514134204-2f79e310a53c/go.mod h1:cYKwcqIKJpNbjX7OebCnBWP1Fu8PfhTNqM4oeqMyrfI=
 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250509023421-ae77c00926c7 h1:vLbhKM15HVSgvL5KHARwRjKSYu4GdyQfPHNpvXLqip8=
 github.com/openstack-k8s-operators/heat-operator/api v0.6.1-0.20250509023421-ae77c00926c7/go.mod h1:Wzn7+VSmDiwGy7kNPc9Adva/BX5lcYzfEUFigHBFUnA=
 github.com/openstack-k8s-operators/horizon-operator/api v0.6.1-0.20250509022835-28d7c16c3cea h1:Jv8YX0NinuYNJWO4YQQo2UsHBwMsNG2WPBT5lE2BlUM=
diff --git a/hack/export_operator_related_images.sh b/hack/export_operator_related_images.sh
index 0fbf274c67..8105fc26a8 100644
--- a/hack/export_operator_related_images.sh
+++ b/hack/export_operator_related_images.sh
@@ -3,7 +3,7 @@
 export RELATED_IMAGE_BARBICAN_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/barbican-operator@sha256:d2516918f0e9133290106628b9945b4dadf7c6482ece3b6f575af8078e6a9a68
 export RELATED_IMAGE_CINDER_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/cinder-operator@sha256:d782a65dca4852eb3cc176f3da11bf464e95e07742f069a46fbb648d481e2c96
 export RELATED_IMAGE_DESIGNATE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/designate-operator@sha256:317bcf7b4e65abdff6fdf94b4c741986ac74559484a9eb6bd4d422190533dacc
-export RELATED_IMAGE_GLANCE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/glance-operator@sha256:1ed34422907d48c5518baf3f7465eb1955b8c8e6ea077dc785584e4d9e7f5cb0
+export RELATED_IMAGE_GLANCE_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/glance-operator@sha256:11b14c96f58239fcffb76a01be36e90b947d6a109d46895f2007f691142e1751
 export RELATED_IMAGE_HEAT_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/heat-operator@sha256:0a8093395bed266301649ebbc9de6c3bd5381fd9aba5a586a6a6bb01bf24ef37
 export RELATED_IMAGE_HORIZON_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/horizon-operator@sha256:d88e067f5f6e0a0dbfbcea10dea9ca8073d9d3ad47c616e9c7fe02c423d27b42
 export RELATED_IMAGE_INFRA_OPERATOR_MANAGER_IMAGE_URL=quay.io/openstack-k8s-operators/infra-operator@sha256:6ee778de1434ace4e47647a3a27e137d5b1828e18d4736edb3bcd40873809f0f
diff --git a/pkg/openstack/glance.go b/pkg/openstack/glance.go
index dc91438461..7d6dc1395c 100644
--- a/pkg/openstack/glance.go
+++ b/pkg/openstack/glance.go
@@ -180,6 +180,16 @@ func ReconcileGlance(ctx context.Context, instance *corev1beta1.OpenStackControl
 		if glance.Spec.Storage.StorageClass == "" {
 			glance.Spec.Storage.StorageClass = instance.Spec.StorageClass
 		}
+
+		if glance.GetAnnotations() == nil {
+			glance.SetAnnotations(make(map[string]string))
+		}
+		if version.Status.ServiceDefaults.GlanceWsgi != nil && *version.Status.ServiceDefaults.GlanceWsgi == "true" {
+			glance.GetAnnotations()[glancev1.GlanceWSGILabel] = "true"
+		} else {
+			glance.GetAnnotations()[glancev1.GlanceWSGILabel] = "false"
+		}
+
 		// Append globally defined extraMounts to the service's own list.
 		for _, ev := range instance.Spec.ExtraMounts {
 			glance.Spec.ExtraMounts = append(glance.Spec.ExtraMounts, glancev1.GlanceExtraVolMounts{
diff --git a/pkg/openstack/version.go b/pkg/openstack/version.go
index 21105431dd..f6011431af 100644
--- a/pkg/openstack/version.go
+++ b/pkg/openstack/version.go
@@ -194,6 +194,22 @@ func GetContainerImages(defaults *corev1beta1.ContainerDefaults, instance corev1
 	return containerImages
 }
 
+// InitializeOpenStackVersionImageDefaults - initializes OpenStackVersion CR with default container images
+func InitializeOpenStackVersionServiceDefaults(ctx context.Context) *corev1beta1.ServiceDefaults {
+	Log := GetLogger(ctx)
+	Log.Info("Initialize OpenStackVersion Service Defaults")
+
+	defaults := &corev1beta1.ServiceDefaults{}
+
+	// NOTE: defaults change over time, older OpenStackVersion defaults would default to false (FR2 for example),
+	// but get set to true here for FR3 available versions and thus provide a way for services to migrate
+	// to new deployment topologies
+	trueString := "true"
+	defaults.GlanceWsgi = &trueString // all new glance deployments use WSGI by default (FR3 and later)
+
+	return defaults
+}
+
 // ReconcileVersion - reconciles OpenStackVersion CR
 func ReconcileVersion(ctx context.Context, instance *corev1beta1.OpenStackControlPlane, helper *helper.Helper) (ctrl.Result, *corev1beta1.OpenStackVersion, error) {
 	version := &corev1beta1.OpenStackVersion{


Reviews:
user: login: fmount
body: Thank you @dprince for starting this.
I'll try this patch in my local environment and provide an additional feedback, but the direction looks good to me!
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-13T10:59:04Z
user: login: fmount
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-14T10:40:24Z
user: login: dprince
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-14T12:24:44Z
user: login: abays
body: /lgtm
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-15T12:59:21Z
user: login: dprince
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-15T13:52:59Z
user: login: fmount
body: /lgtm
state: APPROVED
author_association: CONTRIBUTOR
submitted_at: 2025-05-15T17:14:47Z

Review comments:
diff_hunk: @@ -180,6 +180,16 @@ func ReconcileGlance(ctx context.Context, instance *corev1beta1.OpenStackControl
 		if glance.Spec.Storage.StorageClass == "" {
 			glance.Spec.Storage.StorageClass = instance.Spec.StorageClass
 		}
+
+		if glance.GetAnnotations() == nil {
+			glance.SetAnnotations(make(map[string]string))
+		}
+		if version.Status.ServiceDefaults.GlanceWsgi != nil && *version.Status.ServiceDefaults.GlanceWsgi == "true" {
+			glance.GetAnnotations()["glance.openstack.org/wsgi"] = "true"
path: pkg/openstack/glance.go
user: login: fmount
body: if we depends-on: https://github.com/openstack-k8s-operators/glance-operator/pull/728 we can improve this bit with `glancev1.GlanceWSGILabel` that gives the glance annotation that we expect.
Not a blocker, just a thought for a potential follow up or update.
created_at: 2025-05-13T10:50:50Z
author_association: CONTRIBUTOR
diff_hunk: @@ -180,6 +180,16 @@ func ReconcileGlance(ctx context.Context, instance *corev1beta1.OpenStackControl
 		if glance.Spec.Storage.StorageClass == "" {
 			glance.Spec.Storage.StorageClass = instance.Spec.StorageClass
 		}
+
+		if glance.GetAnnotations() == nil {
+			glance.SetAnnotations(make(map[string]string))
+		}
+		if version.Status.ServiceDefaults.GlanceWsgi != nil && *version.Status.ServiceDefaults.GlanceWsgi == "true" {
+			glance.GetAnnotations()["glance.openstack.org/wsgi"] = "true"
+		} else {
+			glance.GetAnnotations()["glance.openstack.org/wsgi"] = "false"
path: pkg/openstack/glance.go
user: login: fmount
body: Ok so basically if there's no annotation we continue to deploy in `ProxyPass` mode and we set `glance.openstack.org/wsgi: false`, which makes sense for a brownfield scenario. 
We never had any annotation in the `Glance` CR and the behavior of this patch preserves any existing deployment by enforcing the annotation with `false`. 
created_at: 2025-05-13T10:53:04Z
author_association: CONTRIBUTOR
diff_hunk: @@ -180,6 +180,16 @@ func ReconcileGlance(ctx context.Context, instance *corev1beta1.OpenStackControl
 		if glance.Spec.Storage.StorageClass == "" {
 			glance.Spec.Storage.StorageClass = instance.Spec.StorageClass
 		}
+
+		if glance.GetAnnotations() == nil {
+			glance.SetAnnotations(make(map[string]string))
+		}
+		if version.Status.ServiceDefaults.GlanceWsgi != nil && *version.Status.ServiceDefaults.GlanceWsgi == "true" {
path: pkg/openstack/glance.go
user: login: fmount
body: This is consistent with L194-195 in `openstackversion_controller` where we default the `GlanceWSGI` to `true` for greenfield.
created_at: 2025-05-13T10:55:07Z
author_association: CONTRIBUTOR
diff_hunk: @@ -190,6 +190,9 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
 	}
 	// store the defaults for the currently available version
 	instance.Status.ContainerImageVersionDefaults[envAvailableVersion] = defaults
+	// setup per service defaults
+	trueString := "true"
+	instance.Status.ServiceDefaults.GlanceWsgi = &trueString // all new glance deployments are wsgi
path: controllers/core/openstackversion_controller.go
user: login: fmount
body: The problem I currently see with this is that I can't patch the `openstackversion` and switch it to false, which might be a problem if, for any reason, I need to update this value that is reconciled here and is always assigned to `true`.
This actually breaks minor updates because we're not preserving the old behavior. 
Would it be sufficient to solve this to make  `ServiceDefaults` struct as part of the spec? That way you can trigger a reconciliation loop in case you manually tweak the parameter.

When you get a new openstack-operator version, a new `OpenStackVersion` CR gets this value (true by default), the annotation is applied and Glance starts crashloopbackingoff.

Steps to reproduce:
```
1. export OPENSTACK_IMG=${OPENSTACK_IMG_BASE_RELEASE:="quay.io/openstack-k8s-operators/openstack-operator-index:87ab1f1fa16743cad640f994f459ef14c5d2b9ca"}
2. make openstack
3. make openstack_deploy
4. make openstack_cleanup || exit 1
5. export OPENSTACK_IMG=quay.io/fpantano/openstack-operator-index:v0.0.95 # The version I built from this PR
6. make openstack 
7. make openstack_init
```

Glance gets the `glance.openstack.org/wsgi: true` annotations but the image is still the old one because I didn't switch to the new `openstackavailableversion`.

created_at: 2025-05-14T10:40:12Z
author_association: CONTRIBUTOR
diff_hunk: @@ -179,6 +185,9 @@ type OpenStackVersionStatus struct {
 	// where we keep track of the container images for previous versions
 	ContainerImageVersionDefaults map[string]*ContainerDefaults `json:"containerImageVersionDefaults,omitempty"`
 
+	// ServiceDefaults - struct that contains defaults for OSP services that can change over time
+	ServiceDefaults ServiceDefaults `json:"serviceDefaults,omitempty"`
path: apis/core/v1beta1/openstackversion_types.go
user: login: dprince
body: I need to fix this so it works like ContainerImageVersionDefaults above which is a map[string]. This should effectively make it default to 'false' for older OpenStackVersion instances
created_at: 2025-05-14T12:24:44Z
author_association: CONTRIBUTOR
diff_hunk: @@ -180,6 +180,16 @@ func ReconcileGlance(ctx context.Context, instance *corev1beta1.OpenStackControl
 		if glance.Spec.Storage.StorageClass == "" {
 			glance.Spec.Storage.StorageClass = instance.Spec.StorageClass
 		}
+
+		if glance.GetAnnotations() == nil {
+			glance.SetAnnotations(make(map[string]string))
+		}
+		if version.Status.ServiceDefaults.GlanceWsgi != nil && *version.Status.ServiceDefaults.GlanceWsgi == "true" {
+			glance.GetAnnotations()["glance.openstack.org/wsgi"] = "true"
path: pkg/openstack/glance.go
user: login: dprince
body: I've added this in the latest push. Thanks
created_at: 2025-05-15T13:52:59Z
author_association: CONTRIBUTOR

PR comments:
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-14T19:12:59Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/ff78d049c3084e32bad107594374af5a

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/5ef38a8a653647a590d76615d29b458b) SUCCESS in 2h 54m 16s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/e416b3ea71894e828980a3f1bcc4db7d) SUCCESS in 1h 09m 59s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b7d014041afb4a6c9d58bb02524c2694) SUCCESS in 1h 32m 59s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/c69fcd6067ff42a5b5006aff01fd9fb0) **RETRY_LIMIT** Host unreachable in 2h 40m 06s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/80848a21fab545b0ac7c80d04a10c5db) SUCCESS in 1h 33m 36s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/96dc9c7995a9479bafbed58628f6eea2) **FAILURE** in 28m 06s (non-voting)

author_association: NONE
user: login: dprince
created_at: 2025-05-15T11:03:43Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-15T13:12:34Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/cfa58f30c4234764a4b1446a6cf4cb28

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/c1f1ec0bb8cb47a1a52ddaeb46cea905) SUCCESS in 2h 07m 46s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/a9f326fca3e6494bb86f915ce415a493) SUCCESS in 1h 11m 37s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/a9aa5133118544c899bfdf4e0547da47) SUCCESS in 1h 53m 18s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/4dcc91ef2ef54958baba07425227023d) **FAILURE** in 1h 40m 14s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/100dfb520cd74110acfb92287d3d2f92) SUCCESS in 1h 32m 07s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/5327bf6b6c3941618767e6ed45305c7e) **FAILURE** in 30m 04s (non-voting)

author_association: NONE
user: login: openshift-ci[bot]
created_at: 2025-05-15T13:51:32Z
body: New changes are detected. LGTM label has been removed.
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-15T15:54:31Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/cca0cf9d4ebd4287bfcbc9aa707f55c5

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/9f9b4e76abf647b9afb388b62d7ee454) SUCCESS in 2h 02m 01s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/f215a0ead6b64bf7b6b9b14354c07463) SUCCESS in 1h 12m 39s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b3a61ad08d874c16a021f717aaa6e319) SUCCESS in 1h 43m 39s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/8b0588227fdb4d21b843b5050cc72e34) **FAILURE** in 1h 40m 51s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/35736d13287648fba0866e6a766438ee) SUCCESS in 1h 40m 44s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/99563ff743ce402f85d52776140cd8d4) **FAILURE** in 27m 18s (non-voting)

author_association: NONE
user: login: openshift-ci[bot]
created_at: 2025-05-15T17:14:53Z
body: [APPROVALNOTIFIER] This PR is **APPROVED**

This pull-request has been approved by: *<a href="https://github.com/openstack-k8s-operators/openstack-operator/pull/1439#pullrequestreview-2843603590" title="LGTM">abays</a>*, *<a href="https://github.com/openstack-k8s-operators/openstack-operator/pull/1439#" title="Author self-approved">dprince</a>*, *<a href="https://github.com/openstack-k8s-operators/openstack-operator/pull/1439#pullrequestreview-2844470804" title="LGTM">fmount</a>*

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=openstack-k8s-operators%2Fopenstack-operator).

The pull request process is described [here](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process)

<details >
Needs approval from an approver in each of these files:

- ~~[OWNERS](https://github.com/openstack-k8s-operators/openstack-operator/blob/main/OWNERS)~~ [abays,dprince]

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":[]} -->
author_association: CONTRIBUTOR
user: login: fmount
created_at: 2025-05-15T17:14:56Z
body: recheck
author_association: CONTRIBUTOR
user: login: fmount
created_at: 2025-05-15T17:15:33Z
body: I was able to deploy and test this locally. I can see glance being transitioned from proxypass to wsgi mode. Thank you!
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-15T20:11:48Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/f41a0902762e4c6db8a91527cf475c94

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/a622f533763141b9a54c156bf430df6c) SUCCESS in 2h 55m 37s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/fd9b7c23ebe34ac2aa0a630a7b1506c2) SUCCESS in 1h 12m 28s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/84d30b78edb14f4db86b810fafae56e7) SUCCESS in 1h 39m 27s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/4d864c2966a74e0cabd30a92d6467501) **RETRY_LIMIT** Host unreachable in 2h 38m 54s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/d4798dfcb2db40599d42110670bdd6a9) SUCCESS in 1h 23m 59s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/7c1ee8a7cb4d49b5b0f8105f09dc26ae) **FAILURE** in 27m 04s (non-voting)

author_association: NONE
user: login: dprince
created_at: 2025-05-15T20:23:21Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-15T23:39:25Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/f00f2e97a4504f119a6781645d6ab566

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/9390a2874e904af6810754e2660beac0) SUCCESS in 3h 14m 59s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/02d098debcc442d29f94810afcfc13aa) SUCCESS in 1h 09m 17s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b6477169937b495f98459a40adc64c1b) SUCCESS in 1h 33m 42s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/1b282d84970d473b8bcfcc570a7095ce) **FAILURE** in 2h 59m 20s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/a42653ce6e234efcaaf8a562d0abf8e8) SUCCESS in 1h 30m 49s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/7e6bde88787f4329becdc242ab74aec6) **FAILURE** in 27m 40s (non-voting)

author_association: NONE
user: login: dprince
created_at: 2025-05-15T23:43:54Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-16T01:43:27Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/5e9c5ce44bab4c73ad12352e598119d7

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/0788b2651afd4e4ca79404bf9cb591a4) SUCCESS in 1h 57m 51s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/4b83bf0b6b6d4cd99e7ff03569091c9c) SUCCESS in 1h 13m 00s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/1b570fae575b46a5a47a0c0b359270a4) SUCCESS in 1h 43m 39s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b2b5e63aefa745dba9afb6e1d6d4d2e7) **RETRY_LIMIT** in 17m 17s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b1807bc2b5ee497994a96189e273b353) SUCCESS in 1h 30m 37s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/84ab654e9483401bb6f9b86d755983a9) **FAILURE** in 28m 06s (non-voting)

author_association: NONE
user: login: stuggi
created_at: 2025-05-16T06:55:22Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-16T08:48:16Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/5369cd71f1e945acb1ed770ee44e4453

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/3c379e39f1744f2b8946c70eb2742ba4) SUCCESS in 1h 51m 43s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/32b1c7d588db443286037ee7fd752f0e) SUCCESS in 1h 15m 08s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/cf42c0aea9d74ec4adcbc19b8ccff48a) SUCCESS in 1h 31m 49s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/18f51ac3aa754d868bf0a085143537d1) **RETRY_LIMIT** in 13m 39s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/69a3db72ddbf4b318c6be6ed4f44add9) SUCCESS in 1h 35m 30s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/3eee8acbdf2648fc8bd283e698637107) **FAILURE** in 25m 11s (non-voting)

author_association: NONE
user: login: fmount
created_at: 2025-05-16T10:08:36Z
body: There's currently a CIX for the adoption job that wont' be green until the repositories related issue is solved.
author_association: CONTRIBUTOR
user: login: fmount
created_at: 2025-05-16T17:56:23Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-16T19:43:24Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/e56b11ab42224490a4feaf71ab83010e

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/6fdf0dac1f1f41ef8dd78aa6a55e3bcb) SUCCESS in 1h 45m 49s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/bed63416722c4881b2e0d7ff3857fca0) SUCCESS in 1h 14m 34s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/02f9f4fe08834f66bcebe84a9b0fdd72) SUCCESS in 1h 29m 17s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/e354e23259314ceea7a04e2b56ccfe2c) **RETRY_LIMIT** in 11m 37s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/52e3de23c230446792e5e183c4a8c79a) SUCCESS in 1h 31m 00s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/615f3049f473497c9c4a95f85414610d) **FAILURE** in 26m 24s (non-voting)

author_association: NONE
user: login: fmount
created_at: 2025-05-18T13:12:47Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-18T16:04:03Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/348902af93b843228327322caeddd6ae

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/c7dc48bef773443ebda4498562d06c0e) SUCCESS in 2h 49m 49s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/1d41e5cd263a41c0a60a5d04686fb0fc) SUCCESS in 1h 13m 40s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/98da0c5ec1d2442faa0ad64ae98985d0) SUCCESS in 1h 30m 35s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/82d25e26624a4f3eb03ea91a878ec96d) **RETRY_LIMIT** Host unreachable in 2h 35m 28s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/9c0bee2a536846ebb1ac31cbaa26a033) SUCCESS in 1h 32m 26s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/eafa35520430433d8e2bd0d7d18568c4) **RETRY_LIMIT** in 7m 17s (non-voting)

author_association: NONE
user: login: dprince
created_at: 2025-05-19T15:36:51Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-19T18:25:48Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/bda818a7b08f49e3a078e7d1e7557090

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b986c9b1b1c441809e72deb2475e615c) SUCCESS in 2h 48m 26s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/f259b5e65a794d608433cfb140f76837) SUCCESS in 1h 10m 09s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/3846d357a26b47eabc5333a78b93f7c4) SUCCESS in 1h 36m 54s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/d173e33b4f2242a4b0f48d45b29350de) **RETRY_LIMIT** Host unreachable in 2h 34m 23s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/a755680b8082485a907a1610a468d0ba) SUCCESS in 1h 28m 24s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/2e847f4a860f4b67bbfb0fb6c6a7ae15) **FAILURE** in 26m 06s (non-voting)

author_association: NONE
user: login: rabi
created_at: 2025-05-20T06:57:57Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-20T08:56:10Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/03b2d4995824407b842d34d09d81b54b

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/27d52129898f42549d4393c6cfef7319) SUCCESS in 1h 56m 43s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/f5e2838834ff48c1a6cb880b61084eb4) SUCCESS in 1h 15m 40s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/ed35416ca851403ea4019c3830300d9e) SUCCESS in 1h 26m 36s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/24977aedae87436baddb512cda6d99c5) **FAILURE** in 1h 31m 33s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/786d803498314f8e9cebf89b89528531) SUCCESS in 1h 37m 41s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/726765163ceb4081ba425383f311cc64) **FAILURE** in 27m 47s (non-voting)

author_association: NONE
user: login: dprince
created_at: 2025-05-20T11:13:59Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-20T13:15:27Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/09d380c40a424417b1839bb4b3536ad1

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/42bc873c95924ac192f1778384f9e28c) SUCCESS in 1h 55m 52s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/1029db9941f54cf28bbce29908a6d287) SUCCESS in 1h 11m 16s
:x: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/269f8d7ae948494d8ea901b5e3ac2a1d) **FAILURE** in 1h 39m 55s
:x: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/71c2cdfaee1b4543a1c470bf7badb096) **FAILURE** in 1h 33m 46s
:heavy_check_mark: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/938e034c7a124dc2bfd5bc80e87a6476) SUCCESS in 1h 30m 36s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/8128330336574a6f916ac5dd812c1f34) **FAILURE** in 27m 31s (non-voting)

author_association: NONE
user: login: dprince
created_at: 2025-05-20T18:07:21Z
body: recheck
author_association: CONTRIBUTOR
user: login: softwarefactory-project-zuul[bot]
created_at: 2025-05-20T21:42:09Z
body: Build failed (check pipeline).  Post `recheck` (without leading slash)
to rerun all jobs. Make sure the failure cause has been resolved before
you rerun jobs.

https://softwarefactory-project.io/zuul/t/rdoproject.org/buildset/98ef380d814d4d25b08620a7dbc3cbb4

:heavy_check_mark: [openstack-k8s-operators-content-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/b861794feab844e18abd6730a775270f) SUCCESS in 3h 33m 21s
:heavy_check_mark: [podified-multinode-edpm-deployment-crc ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/991cc76b77ce4a37ac06648817ab3174) SUCCESS in 1h 13m 15s
:heavy_check_mark: [cifmw-crc-podified-edpm-baremetal ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/82e6248266b54ebaa386ad9caacbb3d6) SUCCESS in 1h 29m 15s
:heavy_check_mark: [adoption-standalone-to-crc-ceph-provider ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/dead6bae85454b53b0a2962919e7c10e) SUCCESS in 3h 16m 12s
:x: [openstack-operator-tempest-multinode ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/30f42ffbe51f4da1853ef2e4985ce62b) **FAILURE** in 1h 43m 50s
:x: [openstack-operator-kuttl ](https://softwarefactory-project.io/zuul/t/rdoproject.org/build/eab552c696ea4bd495bcba49d14d940d) **FAILURE** in 30m 14s (non-voting)

author_association: NONE
user: login: dprince
created_at: 2025-05-21T00:05:10Z
body: recheck
author_association: CONTRIBUTOR