@@ -32,6 +32,7 @@ import (
3232 "sigs.k8s.io/controller-runtime/pkg/reconcile"
3333
3434 "github.com/go-logr/logr"
35+ dataplanev1 "github.com/openstack-k8s-operators/dataplane-operator/api/v1beta1"
3536 condition "github.com/openstack-k8s-operators/lib-common/modules/common/condition"
3637 "github.com/openstack-k8s-operators/lib-common/modules/common/helper"
3738 corev1beta1 "github.com/openstack-k8s-operators/openstack-operator/apis/core/v1beta1"
@@ -69,9 +70,11 @@ func (r *OpenStackVersionReconciler) GetLogger(ctx context.Context) logr.Logger
6970 return log .FromContext (ctx ).WithName ("Controllers" ).WithName ("OpenStackVersion" )
7071}
7172
72- //+kubebuilder:rbac:groups=core.openstack.org,resources=openstackversions,verbs=get;list;watch;create;update;patch;delete
73- //+kubebuilder:rbac:groups=core.openstack.org,resources=openstackversions/status,verbs=get;update;patch
74- //+kubebuilder:rbac:groups=core.openstack.org,resources=openstackversions/finalizers,verbs=update
73+ // +kubebuilder:rbac:groups=core.openstack.org,resources=openstackversions,verbs=get;list;watch;create;update;patch;delete
74+ // +kubebuilder:rbac:groups=core.openstack.org,resources=openstackversions/status,verbs=get;update;patch
75+ // +kubebuilder:rbac:groups=core.openstack.org,resources=openstackversions/finalizers,verbs=update
76+ // +kubebuilder:rbac:groups=core.openstack.org,resources=openstackcontrolplanes,verbs=get;list;watch
77+ // +kubebuilder:rbac:groups=dataplane.openstack.org,resources=openstackdataplanenodesets,verbs=get;list;watch
7578
7679// Reconcile is part of the main kubernetes reconciliation loop which aims to
7780// move the current state of the cluster closer to the desired state.
@@ -149,10 +152,10 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
149152 // no minor update conditions unless we have a deployed version
150153 if instance .Status .DeployedVersion != nil && instance .Spec .TargetVersion != * instance .Status .DeployedVersion {
151154 cl = append (cl , * condition .UnknownCondition (corev1beta1 .OpenStackVersionMinorUpdateOVNControlplane , condition .InitReason , string (corev1beta1 .OpenStackVersionMinorUpdateInitMessage )),
152- * condition .UnknownCondition (corev1beta1 .OpenStackVersionMinorUpdateControlplane , condition .InitReason , string (corev1beta1 .OpenStackVersionMinorUpdateInitMessage )))
153- // fixme add dataplane conditions here
154- // condition.UnknownCondition(corev1beta1.OpenStackVersionMinorUpdateOVNDataplane , condition.InitReason, string(corev1beta1.OpenStackVersionMinorUpdateInitMessage)),
155- //condition.UnknownCondition(corev1beta1.OpenStackVersionMinorUpdateDataplane, condition.InitReason, string(corev1beta1.OpenStackVersionMinorUpdateInitMessage)) )
155+ * condition .UnknownCondition (corev1beta1 .OpenStackVersionMinorUpdateOVNDataplane , condition .InitReason , string (corev1beta1 .OpenStackVersionMinorUpdateInitMessage )),
156+ * condition . UnknownCondition ( corev1beta1 . OpenStackVersionMinorUpdateControlplane , condition . InitReason , string ( corev1beta1 . OpenStackVersionMinorUpdateInitMessage )),
157+ * condition .UnknownCondition (corev1beta1 .OpenStackVersionMinorUpdateDataplane , condition .InitReason , string (corev1beta1 .OpenStackVersionMinorUpdateInitMessage )),
158+ )
156159 }
157160 instance .Status .Conditions .Init (& cl )
158161 instance .Status .ObservedGeneration = instance .Generation
@@ -172,13 +175,14 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
172175
173176 instance .Status .AvailableVersion = & envAvailableVersion
174177 defaults := openstack .InitializeOpenStackVersionImageDefaults (ctx , envContainerImages )
175- // store the defaults for the currently available version
176178 if instance .Status .ContainerImageVersionDefaults == nil {
177179 instance .Status .ContainerImageVersionDefaults = make (map [string ]* corev1beta1.ContainerDefaults )
178180 }
181+ // store the defaults for the currently available version
179182 instance .Status .ContainerImageVersionDefaults [envAvailableVersion ] = defaults
180183
181184 // calculate the container images for the target version
185+ Log .Info ("Target version: " , "targetVersion" , instance .Spec .TargetVersion )
182186 val , ok := instance .Status .ContainerImageVersionDefaults [instance .Spec .TargetVersion ]
183187 if ! ok {
184188 Log .Info ("Target version not found in defaults" , "targetVersion" , instance .Spec .TargetVersion )
@@ -198,25 +202,30 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
198202 Name : instance .Name ,
199203 }, controlPlane )
200204 if err != nil {
201- // we ignore not found
202205 if k8s_errors .IsNotFound (err ) {
203- Log .Info ("No controlplane found." )
206+ Log .Info ("Controlplane not found:" , "instance name" , instance . Name )
204207 return ctrl.Result {}, nil
205208 }
206209 return ctrl.Result {}, err
207210 }
208211
209- // greenfield deployment //FIXME check dataplane here too
210- if controlPlane .Status .DeployedVersion == nil {
211- Log .Info ("No controlplane or controlplane is not deployed" )
212- return ctrl.Result {}, nil
212+ // lookup nodesets
213+ dataplaneNodesets , err := openstack .GetDataplaneNodesets (ctx , controlPlane , versionHelper )
214+ if err != nil {
215+ Log .Error (err , "Failed to get dataplane nodesets" )
216+ return ctrl.Result {}, err
213217 }
214218
215- // TODO minor update for OVN Dataplane in progress
219+ // greenfield deployment
220+ if controlPlane .Status .DeployedVersion == nil && ! openstack .DataplaneNodesetsDeployedVersionIsSet (dataplaneNodesets ) {
221+ Log .Info ("Waiting for controlplane and dataplane nodesets to be deployed." )
222+ return ctrl.Result {}, nil
223+ }
216224
217- // minor update for OVN Controlplane in progress
225+ // minor update in progress
218226 if instance .Status .DeployedVersion != nil && instance .Spec .TargetVersion != * instance .Status .DeployedVersion {
219- if ! openstack .OVNControllerImageCheck (controlPlane , instance ) ||
227+
228+ if ! openstack .OVNControllerImageMatch (controlPlane , instance ) ||
220229 ! controlPlane .Status .Conditions .IsTrue (corev1beta1 .OpenStackControlPlaneOVNReadyCondition ) {
221230 instance .Status .Conditions .Set (condition .FalseCondition (
222231 corev1beta1 .OpenStackVersionMinorUpdateOVNControlplane ,
@@ -230,8 +239,22 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
230239 corev1beta1 .OpenStackVersionMinorUpdateOVNControlplane ,
231240 corev1beta1 .OpenStackVersionMinorUpdateReadyMessage )
232241
242+ // minor update for Dataplane OVN
243+ if ! openstack .DataplaneNodesetsOVNControllerImagesMatch (instance , dataplaneNodesets ) {
244+ instance .Status .Conditions .Set (condition .FalseCondition (
245+ corev1beta1 .OpenStackVersionMinorUpdateOVNDataplane ,
246+ condition .RequestedReason ,
247+ condition .SeverityInfo ,
248+ corev1beta1 .OpenStackVersionMinorUpdateReadyRunningMessage ))
249+ Log .Info ("Waiting on OVN Dataplane updates to complete" )
250+ return ctrl.Result {}, nil
251+ }
252+ instance .Status .Conditions .MarkTrue (
253+ corev1beta1 .OpenStackVersionMinorUpdateOVNDataplane ,
254+ corev1beta1 .OpenStackVersionMinorUpdateReadyMessage )
255+
233256 // minor update for Controlplane in progress
234- if ! openstack .ControlplaneContainerImageCheck (controlPlane , instance ) ||
257+ if ! openstack .ControlplaneContainerImageMatch (controlPlane , instance ) ||
235258 ! controlPlane .IsReady () {
236259 instance .Status .Conditions .Set (condition .FalseCondition (
237260 corev1beta1 .OpenStackVersionMinorUpdateControlplane ,
@@ -241,11 +264,23 @@ func (r *OpenStackVersionReconciler) Reconcile(ctx context.Context, req ctrl.Req
241264 Log .Info ("Minor update for Controlplane in progress" )
242265 return ctrl.Result {}, nil
243266 }
244- // TODO minor update for Dataplane in progress goes here
245-
246267 instance .Status .Conditions .MarkTrue (
247268 corev1beta1 .OpenStackVersionMinorUpdateControlplane ,
248269 corev1beta1 .OpenStackVersionMinorUpdateReadyMessage )
270+
271+ if ! openstack .DataplaneNodesetsDeployed (instance , dataplaneNodesets ) {
272+ instance .Status .Conditions .Set (condition .FalseCondition (
273+ corev1beta1 .OpenStackVersionMinorUpdateDataplane ,
274+ condition .RequestedReason ,
275+ condition .SeverityInfo ,
276+ corev1beta1 .OpenStackVersionMinorUpdateReadyRunningMessage ))
277+ Log .Info ("Waiting on Dataplane update to complete" )
278+ return ctrl.Result {}, nil
279+ }
280+
281+ instance .Status .Conditions .MarkTrue (
282+ corev1beta1 .OpenStackVersionMinorUpdateDataplane ,
283+ corev1beta1 .OpenStackVersionMinorUpdateReadyMessage )
249284 }
250285
251286 if controlPlane .IsReady () {
@@ -289,6 +324,7 @@ func (r *OpenStackVersionReconciler) SetupWithManager(mgr ctrl.Manager) error {
289324
290325 return ctrl .NewControllerManagedBy (mgr ).
291326 Watches (& corev1beta1.OpenStackControlPlane {}, versionFunc ).
327+ Watches (& dataplanev1.OpenStackDataPlaneNodeSet {}, versionFunc ).
292328 For (& corev1beta1.OpenStackVersion {}).
293329 Complete (r )
294330}
0 commit comments