Skip to content

Commit c6441c1

Browse files
committed
Add Cinder CR condition
When cinder is used as a backen, we might want to have a Condition that is set to False and is visible in the cli. However, when either Cinder is ready or it's not used as a backend, we can mark it as true. Signed-off-by: Francesco Pantano <[email protected]>
1 parent 32e6fdb commit c6441c1

File tree

3 files changed

+35
-24
lines changed

3 files changed

+35
-24
lines changed

api/v1beta1/conditions.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ import (
2323
const (
2424
// GlanceAPIReadyCondition Status=True condition which indicates if the GlanceAPI is configured and operational
2525
GlanceAPIReadyCondition condition.Type = "GlanceAPIReady"
26+
// CinderCondition
27+
CinderCondition= "CinderReady"
2628
)
2729

2830
// Glance Reasons used by API objects.
@@ -35,7 +37,10 @@ const (
3537
//
3638
// GlanceAPIReadyInitMessage
3739
GlanceAPIReadyInitMessage = "GlanceAPI not started"
38-
3940
// GlanceAPIReadyErrorMessage
4041
GlanceAPIReadyErrorMessage = "GlanceAPI error occured %s"
42+
// CinderInitMessage
43+
CinderInitMessage = "Waiting for Cinder resources"
44+
// CinderReadyMessage
45+
CinderReadyMessage = "Cinder resources exist"
4146
)

controllers/glance_controller.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -149,11 +149,13 @@ func (r *GlanceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (res
149149
return ctrl.Result{}, nil
150150
}
151151

152-
//
153-
// initialize status
154-
//
155-
//if instance.Status.Conditions == nil {
156-
instance.Status.Conditions = condition.Conditions{}
152+
// initialize status if Conditions is nil, but do not reset if it already
153+
// exists
154+
isNewInstance := instance.Status.Conditions == nil
155+
if isNewInstance {
156+
instance.Status.Conditions = condition.Conditions{}
157+
}
158+
157159
// initialize conditions used later as Status=Unknown
158160
cl := condition.CreateList(
159161
condition.UnknownCondition(condition.DBReadyCondition, condition.InitReason, condition.DBReadyInitMessage),
@@ -162,7 +164,6 @@ func (r *GlanceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (res
162164
condition.UnknownCondition(condition.InputReadyCondition, condition.InitReason, condition.InputReadyInitMessage),
163165
condition.UnknownCondition(condition.ServiceConfigReadyCondition, condition.InitReason, condition.ServiceConfigReadyInitMessage),
164166
condition.UnknownCondition(glancev1.GlanceAPIReadyCondition, condition.InitReason, glancev1.GlanceAPIReadyInitMessage),
165-
// right now we have no dedicated KeystoneServiceReadyInitMessage
166167
condition.UnknownCondition(condition.KeystoneServiceReadyCondition, condition.InitReason, ""),
167168
condition.UnknownCondition(condition.NetworkAttachmentsReadyCondition, condition.InitReason, condition.NetworkAttachmentsReadyInitMessage),
168169
// service account, role, rolebinding conditions
@@ -171,9 +172,13 @@ func (r *GlanceReconciler) Reconcile(ctx context.Context, req ctrl.Request) (res
171172
condition.UnknownCondition(condition.RoleBindingReadyCondition, condition.InitReason, condition.RoleBindingReadyInitMessage),
172173
condition.UnknownCondition(condition.CronJobReadyCondition, condition.InitReason, condition.CronJobReadyInitMessage),
173174
)
174-
175175
instance.Status.Conditions.Init(&cl)
176176

177+
if isNewInstance {
178+
// Register overall status immediately to have an early feedback e.g. in the cli
179+
return ctrl.Result{}, nil
180+
}
181+
177182
if instance.Status.Hash == nil {
178183
instance.Status.Hash = map[string]string{}
179184
}
@@ -476,12 +481,7 @@ func (r *GlanceReconciler) reconcileInit(
476481
r.Log.Info(fmt.Sprintf("Service '%s' - Job %s hash added - %s", instance.Name, jobDef.Name, instance.Status.Hash[glancev1.DbSyncHash]))
477482
}
478483
instance.Status.Conditions.MarkTrue(condition.DBSyncReadyCondition, condition.DBSyncReadyMessage)
479-
480-
// when job passed, mark NetworkAttachmentsReadyCondition ready
481-
instance.Status.Conditions.MarkTrue(condition.NetworkAttachmentsReadyCondition, condition.NetworkAttachmentsReadyMessage)
482-
483484
// run Glance db sync - end
484-
485485
r.Log.Info(fmt.Sprintf("Reconciled Service '%s' init successfully", instance.Name))
486486
return ctrl.Result{}, nil
487487
}

controllers/glanceapi_controller.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,8 @@ import (
2323
"time"
2424

2525
batchv1 "k8s.io/api/batch/v1"
26-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
27-
28-
"k8s.io/apimachinery/pkg/api/errors"
2926
"k8s.io/apimachinery/pkg/api/resource"
27+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3028
"k8s.io/apimachinery/pkg/fields"
3129
"k8s.io/apimachinery/pkg/runtime"
3230
"k8s.io/apimachinery/pkg/types"
@@ -152,6 +150,7 @@ func (r *GlanceAPIReconciler) Reconcile(ctx context.Context, req ctrl.Request) (
152150
instance.Status.Conditions = condition.Conditions{}
153151
// initialize conditions used later as Status=Unknown
154152
cl := condition.CreateList(
153+
condition.UnknownCondition(glancev1.CinderCondition, condition.InitReason, glancev1.CinderInitMessage),
155154
condition.UnknownCondition(condition.ExposeServiceReadyCondition, condition.InitReason, condition.ExposeServiceReadyInitMessage),
156155
condition.UnknownCondition(condition.InputReadyCondition, condition.InitReason, condition.InputReadyInitMessage),
157156
condition.UnknownCondition(condition.ServiceConfigReadyCondition, condition.InitReason, condition.ServiceConfigReadyInitMessage),
@@ -583,12 +582,16 @@ func (r *GlanceAPIReconciler) reconcileNormal(ctx context.Context, instance *gla
583582
case backendToken[1] == "cinder":
584583
cinder := &cinderv1.Cinder{}
585584
err := r.Get(ctx, types.NamespacedName{Namespace: instance.Namespace, Name: glance.CinderName}, cinder)
586-
if err != nil {
587-
if errors.IsNotFound(err) {
588-
// Request object not found, can't run GlanceAPI with this config
589-
r.Log.Info("Cinder resource not found. Waiting for it to be deployed")
590-
return ctrl.Result{RequeueAfter: time.Duration(10) * time.Second}, nil
591-
}
585+
if err != nil && !k8s_errors.IsNotFound(err) {
586+
// Request object not found, GlanceAPI can't be executed with this config
587+
r.Log.Info("Cinder resource not found. Waiting for it to be deployed")
588+
instance.Status.Conditions.Set(condition.FalseCondition(
589+
glancev1.CinderCondition,
590+
condition.RequestedReason,
591+
condition.SeverityInfo,
592+
glancev1.CinderInitMessage),
593+
)
594+
return ctrl.Result{RequeueAfter: time.Duration(10) * time.Second}, nil
592595
}
593596
// Cinder CR is found, we can unblock glance deployment because
594597
// it represents a valid backend.
@@ -599,6 +602,10 @@ func (r *GlanceAPIReconciler) reconcileNormal(ctx context.Context, instance *gla
599602
imageConv = true
600603
}
601604
}
605+
// If we reach this point, it means that either Cinder is not a backend for Glance
606+
// or, in case Cinder is a backend for the current GlanceAPI, the associated resources
607+
// are present in the control plane
608+
instance.Status.Conditions.MarkTrue(glancev1.CinderCondition, glancev1.CinderReadyMessage)
602609

603610
// Generate service config
604611
err = r.generateServiceConfig(ctx, helper, instance, &configVars, imageConv)
@@ -684,7 +691,6 @@ func (r *GlanceAPIReconciler) reconcileNormal(ctx context.Context, instance *gla
684691
//
685692
// TODO check when/if Init, Update, or Upgrade should/could be skipped
686693
//
687-
688694
var serviceAnnotations map[string]string
689695
// networks to attach to
690696
serviceAnnotations, ctrlResult, err = ensureNAD(ctx, &instance.Status.Conditions, instance.Spec.NetworkAttachments, helper)
@@ -1228,7 +1234,7 @@ func (r *GlanceAPIReconciler) glanceAPIRefresh(
12281234
) error {
12291235
sts, err := statefulset.GetStatefulSetWithName(ctx, h, fmt.Sprintf("%s-api", instance.Name), instance.Namespace)
12301236
if err != nil {
1231-
if errors.IsNotFound(err) {
1237+
if k8s_errors.IsNotFound(err) {
12321238
// Request object not found
12331239
r.Log.Info(fmt.Sprintf("GlanceAPI %s-api: Statefulset not found.", instance.Name))
12341240
return nil

0 commit comments

Comments
 (0)