Skip to content

Commit 43153af

Browse files
committed
Enforce update order for OVN for Ctlplane/EDPM
Jira: OSPRH-6732
1 parent ce338a5 commit 43153af

23 files changed

+427
-14
lines changed

controllers/core/openstackversion_controller.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,16 +56,6 @@ func SetupVersionDefaults() {
5656
envContainerImages = localVars
5757
}
5858

59-
func compareStringPointers(a, b *string) bool {
60-
if a == nil && b == nil {
61-
return true
62-
}
63-
if a == nil || b == nil {
64-
return false
65-
}
66-
return *a == *b
67-
}
68-
6959
// OpenStackVersionReconciler reconciles a OpenStackVersion object
7060
type OpenStackVersionReconciler struct {
7161
client.Client
@@ -226,7 +216,7 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
226216

227217
// minor update for OVN Controlplane in progress
228218
if instance.Status.DeployedVersion != nil && instance.Spec.TargetVersion != *instance.Status.DeployedVersion {
229-
if !compareStringPointers(controlPlane.Status.ContainerImages.OvnControllerImage, instance.Status.ContainerImages.OvnControllerImage) ||
219+
if !openstack.OVNControllerImageCheck(controlPlane, instance) ||
230220
!controlPlane.Status.Conditions.IsTrue(corev1beta1.OpenStackControlPlaneOVNReadyCondition) {
231221
instance.Status.Conditions.Set(condition.FalseCondition(
232222
corev1beta1.OpenStackVersionMinorUpdateOVNControlplane,
@@ -241,9 +231,7 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
241231
corev1beta1.OpenStackVersionMinorUpdateReadyMessage)
242232

243233
// minor update for Controlplane in progress
244-
// we only check keystone here as it will only get updated during this phase
245-
// FIXME: add checks to all images on the Controlplane here once conditions and observedGeneration work are finished
246-
if !compareStringPointers(controlPlane.Status.ContainerImages.KeystoneAPIImage, instance.Status.ContainerImages.KeystoneAPIImage) ||
234+
if !openstack.ControlplaneContainerImageCheck(controlPlane, instance) ||
247235
!controlPlane.IsReady() {
248236
instance.Status.Conditions.Set(condition.FalseCondition(
249237
corev1beta1.OpenStackVersionMinorUpdateControlplane,

pkg/openstack/barbican.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,9 @@ func ReconcileBarbican(ctx context.Context, instance *corev1beta1.OpenStackContr
3333
}
3434
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneBarbicanReadyCondition)
3535
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeBarbicanReadyCondition)
36+
instance.Status.ContainerImages.BarbicanAPIImage = nil
37+
instance.Status.ContainerImages.BarbicanWorkerImage = nil
38+
instance.Status.ContainerImages.BarbicanKeystoneListenerImage = nil
3639
return ctrl.Result{}, nil
3740
}
3841

@@ -155,3 +158,17 @@ func ReconcileBarbican(ctx context.Context, instance *corev1beta1.OpenStackContr
155158

156159
return ctrl.Result{}, nil
157160
}
161+
162+
// BarbicanImageCheck - return true if the Barbican images match on the ControlPlane and Version, or if Barbican is not enabled
163+
func BarbicanImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
164+
165+
if controlPlane.Spec.Barbican.Enabled {
166+
if !compareStringPointers(controlPlane.Status.ContainerImages.BarbicanAPIImage, version.Status.ContainerImages.BarbicanAPIImage) ||
167+
!compareStringPointers(controlPlane.Status.ContainerImages.BarbicanWorkerImage, version.Status.ContainerImages.BarbicanWorkerImage) ||
168+
!compareStringPointers(controlPlane.Status.ContainerImages.BarbicanKeystoneListenerImage, version.Status.ContainerImages.BarbicanKeystoneListenerImage) {
169+
return false
170+
}
171+
}
172+
173+
return true
174+
}

pkg/openstack/cinder.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ func ReconcileCinder(ctx context.Context, instance *corev1beta1.OpenStackControl
3434
}
3535
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneCinderReadyCondition)
3636
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeCinderReadyCondition)
37+
instance.Status.ContainerImages.CinderAPIImage = nil
38+
instance.Status.ContainerImages.CinderSchedulerImage = nil
39+
instance.Status.ContainerImages.CinderBackupImage = nil
40+
instance.Status.ContainerImages.CinderVolumeImages = make(map[string]*string)
3741
return ctrl.Result{}, nil
3842
}
3943
Log := GetLogger(ctx)
@@ -183,3 +187,22 @@ func ReconcileCinder(ctx context.Context, instance *corev1beta1.OpenStackControl
183187
return ctrl.Result{}, nil
184188

185189
}
190+
191+
// CinderImageCheck - return true if the Cinder images match on the ControlPlane and Version, or if Cinder is not enabled
192+
func CinderImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
193+
194+
if controlPlane.Spec.Cinder.Enabled {
195+
if !compareStringPointers(controlPlane.Status.ContainerImages.CinderAPIImage, version.Status.ContainerImages.CinderAPIImage) ||
196+
!compareStringPointers(controlPlane.Status.ContainerImages.CinderSchedulerImage, version.Status.ContainerImages.CinderSchedulerImage) ||
197+
!compareStringPointers(controlPlane.Status.ContainerImages.CinderBackupImage, version.Status.ContainerImages.CinderBackupImage) {
198+
return false
199+
}
200+
for name, img := range version.Status.ContainerImages.CinderVolumeImages {
201+
if !compareStringPointers(controlPlane.Status.ContainerImages.CinderVolumeImages[name], img) {
202+
return false
203+
}
204+
}
205+
}
206+
207+
return true
208+
}

pkg/openstack/designate.go

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,13 @@ func ReconcileDesignate(ctx context.Context, instance *corev1beta1.OpenStackCont
3434
}
3535
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneDesignateReadyCondition)
3636
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeDesignateReadyCondition)
37+
instance.Status.ContainerImages.DesignateAPIImage = nil
38+
instance.Status.ContainerImages.DesignateCentralImage = nil
39+
instance.Status.ContainerImages.DesignateMdnsImage = nil
40+
instance.Status.ContainerImages.DesignateProducerImage = nil
41+
instance.Status.ContainerImages.DesignateWorkerImage = nil
42+
instance.Status.ContainerImages.DesignateBackendbind9Image = nil
43+
instance.Status.ContainerImages.DesignateUnboundImage = nil
3744
return ctrl.Result{}, nil
3845
}
3946

@@ -169,3 +176,21 @@ func ReconcileDesignate(ctx context.Context, instance *corev1beta1.OpenStackCont
169176
return ctrl.Result{}, nil
170177

171178
}
179+
180+
// DesignateImageCheck - return true if the Designate images match on the ControlPlane and Version, or if Designate is not enabled
181+
func DesignateImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
182+
183+
if controlPlane.Spec.Designate.Enabled {
184+
if !compareStringPointers(controlPlane.Status.ContainerImages.DesignateAPIImage, version.Status.ContainerImages.DesignateAPIImage) ||
185+
!compareStringPointers(controlPlane.Status.ContainerImages.DesignateCentralImage, version.Status.ContainerImages.DesignateCentralImage) ||
186+
!compareStringPointers(controlPlane.Status.ContainerImages.DesignateMdnsImage, version.Status.ContainerImages.DesignateMdnsImage) ||
187+
!compareStringPointers(controlPlane.Status.ContainerImages.DesignateProducerImage, version.Status.ContainerImages.DesignateProducerImage) ||
188+
!compareStringPointers(controlPlane.Status.ContainerImages.DesignateWorkerImage, version.Status.ContainerImages.DesignateWorkerImage) ||
189+
!compareStringPointers(controlPlane.Status.ContainerImages.DesignateBackendbind9Image, version.Status.ContainerImages.DesignateBackendbind9Image) ||
190+
!compareStringPointers(controlPlane.Status.ContainerImages.DesignateUnboundImage, version.Status.ContainerImages.DesignateUnboundImage) {
191+
return false
192+
}
193+
}
194+
195+
return true
196+
}

pkg/openstack/dnsmasq.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func ReconcileDNSMasqs(ctx context.Context, instance *corev1beta1.OpenStackContr
3030
return res, err
3131
}
3232
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneDNSReadyCondition)
33+
instance.Status.ContainerImages.InfraDnsmasqImage = nil
3334
return ctrl.Result{}, nil
3435
}
3536

@@ -76,3 +77,14 @@ func ReconcileDNSMasqs(ctx context.Context, instance *corev1beta1.OpenStackContr
7677
return ctrl.Result{}, nil
7778

7879
}
80+
81+
// DnsmasqImageCheck - return true if the Dnsmasq images match on the ControlPlane and Version, or if Dnsmasq is not enabled
82+
func DnsmasqImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
83+
84+
if controlPlane.Spec.DNS.Enabled {
85+
if !compareStringPointers(controlPlane.Status.ContainerImages.InfraDnsmasqImage, version.Status.ContainerImages.InfraDnsmasqImage) {
86+
return false
87+
}
88+
}
89+
return true
90+
}

pkg/openstack/galera.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ func reconcileGalera(
152152
return galeraFailed, err
153153
}
154154
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneMariaDBReadyCondition)
155+
instance.Status.ContainerImages.MariadbImage = nil
155156
return galeraReady, nil
156157
}
157158

@@ -181,3 +182,15 @@ func reconcileGalera(
181182

182183
return galeraCreating, nil
183184
}
185+
186+
// GaleraImageCheck - return true if the Galera images match on the ControlPlane and Version, or if Galera is not enabled
187+
func GaleraImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
188+
189+
if controlPlane.Spec.Galera.Enabled {
190+
if !compareStringPointers(controlPlane.Status.ContainerImages.MariadbImage, version.Status.ContainerImages.MariadbImage) {
191+
return false
192+
}
193+
}
194+
195+
return true
196+
}

pkg/openstack/glance.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ func ReconcileGlance(ctx context.Context, instance *corev1beta1.OpenStackControl
4343
}
4444
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneGlanceReadyCondition)
4545
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeGlanceReadyCondition)
46+
instance.Status.ContainerImages.GlanceAPIImage = nil
4647
return ctrl.Result{}, nil
4748
}
4849

@@ -209,3 +210,15 @@ func getGlanceAPILabelMap(name string, apiName string, apiType string) map[strin
209210
svcSelector: apiFilter,
210211
}
211212
}
213+
214+
// GlanceImageCheck - return true if the glance images match on the ControlPlane and Version, or if Glance is not enabled
215+
func GlanceImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
216+
217+
if controlPlane.Spec.Glance.Enabled {
218+
if !compareStringPointers(controlPlane.Status.ContainerImages.GlanceAPIImage, version.Status.ContainerImages.GlanceAPIImage) {
219+
return false
220+
}
221+
}
222+
223+
return true
224+
}

pkg/openstack/heat.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,9 @@ func ReconcileHeat(ctx context.Context, instance *corev1beta1.OpenStackControlPl
3737
}
3838
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneHeatReadyCondition)
3939
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeHeatReadyCondition)
40+
instance.Status.ContainerImages.HeatAPIImage = nil
41+
instance.Status.ContainerImages.HeatCfnapiImage = nil
42+
instance.Status.ContainerImages.HeatEngineImage = nil
4043
return ctrl.Result{}, nil
4144
}
4245

@@ -193,3 +196,17 @@ func ReconcileHeat(ctx context.Context, instance *corev1beta1.OpenStackControlPl
193196

194197
return ctrl.Result{}, nil
195198
}
199+
200+
// HeatImageCheck - return true if the heat images match on the ControlPlane and Version, or if Heat is not enabled
201+
func HeatImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
202+
203+
if controlPlane.Spec.Heat.Enabled {
204+
if !compareStringPointers(controlPlane.Status.ContainerImages.HeatAPIImage, version.Status.ContainerImages.HeatAPIImage) ||
205+
!compareStringPointers(controlPlane.Status.ContainerImages.HeatCfnapiImage, version.Status.ContainerImages.HeatCfnapiImage) ||
206+
!compareStringPointers(controlPlane.Status.ContainerImages.HeatEngineImage, version.Status.ContainerImages.HeatEngineImage) {
207+
return false
208+
}
209+
}
210+
211+
return true
212+
}

pkg/openstack/horizon.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ func ReconcileHorizon(ctx context.Context, instance *corev1beta1.OpenStackContro
4242
}
4343
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneHorizonReadyCondition)
4444
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeHorizonReadyCondition)
45+
instance.Status.ContainerImages.HorizonImage = nil
4546
return ctrl.Result{}, nil
4647
}
4748

@@ -169,3 +170,15 @@ func ReconcileHorizon(ctx context.Context, instance *corev1beta1.OpenStackContro
169170

170171
return ctrl.Result{}, nil
171172
}
173+
174+
// HorizonImageCheck - return true if horizon images match on the ControlPlane and Version, or if Horizon is not enabled
175+
func HorizonImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
176+
177+
if controlPlane.Spec.Horizon.Enabled {
178+
if !compareStringPointers(controlPlane.Status.ContainerImages.HorizonImage, version.Status.ContainerImages.HorizonImage) {
179+
return false
180+
}
181+
}
182+
183+
return true
184+
}

pkg/openstack/ironic.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,12 @@ func ReconcileIronic(ctx context.Context, instance *corev1beta1.OpenStackControl
3434
}
3535
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneIronicReadyCondition)
3636
instance.Status.Conditions.Remove(corev1beta1.OpenStackControlPlaneExposeIronicReadyCondition)
37+
instance.Status.ContainerImages.IronicAPIImage = nil
38+
instance.Status.ContainerImages.IronicConductorImage = nil
39+
instance.Status.ContainerImages.IronicInspectorImage = nil
40+
instance.Status.ContainerImages.IronicNeutronAgentImage = nil
41+
instance.Status.ContainerImages.IronicPxeImage = nil
42+
instance.Status.ContainerImages.IronicPythonAgentImage = nil
3743
return ctrl.Result{}, nil
3844
}
3945

@@ -195,3 +201,20 @@ func ReconcileIronic(ctx context.Context, instance *corev1beta1.OpenStackControl
195201
return ctrl.Result{}, nil
196202

197203
}
204+
205+
// IronicImagesCheck - return true if the ironic images match on the ControlPlane and Version, or if Ironic is not enabled
206+
func IronicImageCheck(controlPlane *corev1beta1.OpenStackControlPlane, version *corev1beta1.OpenStackVersion) bool {
207+
208+
if controlPlane.Spec.Ironic.Enabled {
209+
if !compareStringPointers(controlPlane.Status.ContainerImages.IronicAPIImage, version.Status.ContainerImages.IronicAPIImage) ||
210+
!compareStringPointers(controlPlane.Status.ContainerImages.IronicConductorImage, version.Status.ContainerImages.IronicConductorImage) ||
211+
!compareStringPointers(controlPlane.Status.ContainerImages.IronicInspectorImage, version.Status.ContainerImages.IronicInspectorImage) ||
212+
!compareStringPointers(controlPlane.Status.ContainerImages.IronicNeutronAgentImage, version.Status.ContainerImages.IronicNeutronAgentImage) ||
213+
!compareStringPointers(controlPlane.Status.ContainerImages.IronicPxeImage, version.Status.ContainerImages.IronicPxeImage) ||
214+
!compareStringPointers(controlPlane.Status.ContainerImages.IronicPythonAgentImage, version.Status.ContainerImages.IronicPythonAgentImage) {
215+
return false
216+
}
217+
}
218+
219+
return true
220+
}

0 commit comments

Comments
 (0)