Skip to content
This repository was archived by the owner on Dec 16, 2025. It is now read-only.

Commit a724a83

Browse files
michal-gubrickymatofeder
authored andcommitted
Add handling for all posible cases of (#31)
Signed-off-by: michal.gubricky <[email protected]> Signed-off-by: Matej Feder <[email protected]>
1 parent 80e13fb commit a724a83

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

api/v1alpha1/conditions_const.go

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,4 +75,13 @@ const (
7575

7676
// IssueWithOpenStackImageReason is used when image has an issue.
7777
IssueWithOpenStackImageReason = "IssueWithOpenStackImage"
78+
79+
// OpenStackImageIsDeactivatedReason is used when image is deactivated.
80+
OpenStackImageIsDeactivatedReason = "OpenStackImageDeactivated"
81+
82+
// OpenStackImageIsDeletingReason is used when image is being deleted.
83+
OpenStackImageIsDeletingReason = "OpenStackImageGettingDeleted"
84+
85+
// OpenStackImageIsQueuedReason is used when image is queued.
86+
OpenStackImageIsQueuedReason = "OpenStackImageIsQueued"
7887
)

internal/controller/openstacknodeimagerelease_controller.go

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,7 @@ func (r *OpenStackNodeImageReleaseReconciler) Reconcile(ctx context.Context, req
188188

189189
// TODO: Add timeout logic - import start time could be taken from OpenStackImageNotImportedYetReason condition, or somehow better
190190

191-
switch image.Status { //nolint:exhaustive // TODO: Add handling for all posible cases of `image.Status`
191+
switch image.Status { //nolint:exhaustive
192192
case images.ImageStatusActive:
193193
logger.Info("OpenStackNodeImageRelease **ready** - image is **active**.", "name", openstacknodeimagerelease.Spec.Image.CreateOpts.Name, "ID", imageID)
194194
conditions.MarkTrue(openstacknodeimagerelease, apiv1alpha1.OpenStackImageReadyCondition)
@@ -197,7 +197,7 @@ func (r *OpenStackNodeImageReleaseReconciler) Reconcile(ctx context.Context, req
197197
// requeue after 2 minutes to make sure the presence of the image
198198
return ctrl.Result{Requeue: true, RequeueAfter: 2 * time.Minute}, nil
199199

200-
case images.ImageStatusImporting:
200+
case images.ImageStatusImporting, images.ImageStatusSaving:
201201

202202
logger.Info("OpenStackNodeImageRelease **not ready** yet - image is currently being imported by Glance.", "name", openstacknodeimagerelease.Spec.Image.CreateOpts.Name, "ID", imageID)
203203
conditions.MarkFalse(openstacknodeimagerelease, apiv1alpha1.OpenStackImageReadyCondition, apiv1alpha1.OpenStackImageNotImportedYetReason, clusterv1beta1.ConditionSeverityInfo, "image not imported yet")
@@ -206,7 +206,45 @@ func (r *OpenStackNodeImageReleaseReconciler) Reconcile(ctx context.Context, req
206206
// wait for image - requeue after 30sec
207207
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
208208

209-
// TODO: Add handling for all posible cases of `image.Status`
209+
case images.ImageStatusDeactivated:
210+
211+
logger.Info("OpenStackNodeImageRelease **not ready** yet - image is deactivated.", "name", openstacknodeimagerelease.Spec.Image.CreateOpts.Name, "ID", imageID)
212+
conditions.MarkFalse(openstacknodeimagerelease, apiv1alpha1.OpenStackImageReadyCondition, apiv1alpha1.OpenStackImageIsDeactivatedReason, clusterv1beta1.ConditionSeverityWarning, "image is deactivated")
213+
openstacknodeimagerelease.Status.Ready = false
214+
215+
// TODO: Should we make function to activate deactivated image or just tell user to activate it manually?
216+
// wait for image - requeue after 30sec
217+
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
218+
219+
case images.ImageStatusKilled:
220+
221+
logger.Info("OpenStackNodeImageRelease **error** - image is not readable.", "name", openstacknodeimagerelease.Spec.Image.CreateOpts.Name, "ID", imageID)
222+
conditions.MarkFalse(openstacknodeimagerelease, apiv1alpha1.OpenStackImageReadyCondition, apiv1alpha1.IssueWithOpenStackImageReason, clusterv1beta1.ConditionSeverityError, "image is not readable")
223+
openstacknodeimagerelease.Status.Ready = false
224+
225+
// TODO: Image is broken and needs to be deleted?
226+
// wait for image - requeue after 30sec
227+
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
228+
229+
case images.ImageStatusPendingDelete, images.ImageStatusDeleted:
230+
231+
logger.Info("OpenStackNodeImageRelease **deleting** - image is being deleted.", "name", openstacknodeimagerelease.Spec.Image.CreateOpts.Name, "ID", imageID)
232+
conditions.MarkFalse(openstacknodeimagerelease, apiv1alpha1.OpenStackImageReadyCondition, apiv1alpha1.OpenStackImageIsDeletingReason, clusterv1beta1.ConditionSeverityInfo, "deleting image")
233+
openstacknodeimagerelease.Status.Ready = false
234+
235+
// wait for image - requeue after 30sec
236+
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
237+
238+
case images.ImageStatusQueued:
239+
240+
logger.Info("OpenStackNodeImageRelease **not ready** - image is queued.", "name", openstacknodeimagerelease.Spec.Image.CreateOpts.Name, "ID", imageID)
241+
conditions.MarkFalse(openstacknodeimagerelease, apiv1alpha1.OpenStackImageReadyCondition, apiv1alpha1.OpenStackImageIsQueuedReason, clusterv1beta1.ConditionSeverityInfo, "image is queued")
242+
openstacknodeimagerelease.Status.Ready = false
243+
244+
// wait for image - requeue after 30sec
245+
return ctrl.Result{RequeueAfter: 30 * time.Second}, nil
246+
247+
// TODO: Choose what is default case for image.status
210248
default:
211249
logger.Info("OpenStackNodeImageRelease **handling for image status not defined yet** - requeue", "name", openstacknodeimagerelease.Spec.Image.CreateOpts.Name, "ID", imageID, "status", image.Status)
212250

0 commit comments

Comments
 (0)