Skip to content

Commit

Permalink
Merge pull request #295 from openstack-k8s-operators/amphora-conditions
Browse files Browse the repository at this point in the history
Better conditions in controllers
  • Loading branch information
openshift-merge-bot[bot] authored Apr 30, 2024
2 parents 9927da9 + 6bc2f29 commit fa4d732
Show file tree
Hide file tree
Showing 4 changed files with 105 additions and 11 deletions.
56 changes: 56 additions & 0 deletions api/v1beta1/conditions.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,14 @@ const (
OctaviaHousekeepingReadyCondition condition.Type = "OctaviaHousekeepingReady"

OctaviaWorkerReadyCondition condition.Type = "OctaviaWorkerReady"

OctaviaAmphoraCertsReadyCondition condition.Type = "OctaviaAmphoraCertsReady"

OctaviaQuotasReadyCondition condition.Type = "OctaviaQuotasReady"

OctaviaAmphoraSSHReadyCondition condition.Type = "OctaviaAmphoraSSHReady"

OctaviaAmphoraImagesReadyCondition condition.Type = "OctaviaAmphoraImagesReady"
)

// Common Messages used by API objects
Expand Down Expand Up @@ -69,4 +77,52 @@ const (

// OctaviaAmphoraControllerReadyErrorMessage
OctaviaWorkerReadyErrorMessage = "OctaviaWorker error occured %s"

//
// OctaviaAmphoraCertsReady condition messages
//
// OctaviaAmphoraCertsReadyInitMessage
OctaviaAmphoraCertsReadyInitMessage = "Octavia Amphora certificates are not initialized"

// OctaviaAmphoraCertsReadyErrorMessage
OctaviaAmphoraCertsReadyErrorMessage = "Octavia Amphora certificates error occured %s"

// OctaviaAmphoraCertsReadyCompleteMessage
OctaviaAmphoraCertsReadyCompleteMessage = "Octavia Amphora certificates setup completed"

//
// OctaviaQuotasReady condition messages
//
// OctaviaQuotasReadyInitMessage
OctaviaQuotasReadyInitMessage = "Octavia quotas are not initialized"

// OctaviaAmphoraCertsReadyErrorMessage
OctaviaQuotasReadyErrorMessage = "Octavia quotas setup error occured %s"

// OctaviaAmphoraSSHReadyCompleteMessage
OctaviaQuotasReadyCompleteMessage = "Octavia quotas setup completed"

//
// OctaviaAmphoraSSHReady condition messages
//
// OctaviaAmphoraSSHReadyInitMessage
OctaviaAmphoraSSHReadyInitMessage = "Octavia Amphora SSH setup is not initialized"

// OctaviaAmphoraSSHReadyErrorMessage
OctaviaAmphoraSSHReadyErrorMessage = "Octavia Amphora SSH setup error occured %s"

// OctaviaAmphoraSSHReadyCompleteMessage
OctaviaAmphoraSSHReadyCompleteMessage = "Octavia Amphora SSH setup completed"

//
// OctaviaAmphoraImagesReady condition messages
//
// OctaviaAmphoraImagesReadyInitMessage
OctaviaAmphoraImagesReadyInitMessage = "Octavia Amphora Images setup is not initialized"

// OctaviaAmphoraImagesReadyErrorMessage
OctaviaAmphoraImagesReadyErrorMessage = "Octavia Amphora Images setup error occured %s"

// OctaviaAmphoraImagesReadyCompleteMessage
OctaviaAmphoraImagesReadyCompleteMessage = "Octavia Amphora Images setup completed"
)
18 changes: 14 additions & 4 deletions api/v1beta1/octavia_types.go
Original file line number Diff line number Diff line change
Expand Up @@ -302,11 +302,21 @@ func init() {
SchemeBuilder.Register(&Octavia{}, &OctaviaList{})
}

// IsReady - returns true if service is ready to server requests
// IsReady - returns true if services are ready to serve requests
func (instance Octavia) IsReady() bool {
ready := instance.Status.OctaviaAPIReadyCount > 0
// TODO: add other ready counts
return ready
readyCounts := []int32{
instance.Status.OctaviaAPIReadyCount,
instance.Status.OctaviaHealthManagerReadyCount,
instance.Status.OctaviaHousekeepingReadyCount,
instance.Status.OctaviaWorkerReadyCount,
}

for _, readyCount := range readyCounts {
if readyCount < 1 {
return false
}
}
return true
}

// SetupDefaults - initializes any CRD field defaults based on environment variables (the defaulting mechanism itself is implemented via webhooks)
Expand Down
3 changes: 2 additions & 1 deletion controllers/amphoracontroller_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -461,8 +461,9 @@ func (r *OctaviaAmphoraControllerReconciler) reconcileNormal(ctx context.Context
if instance.Status.Conditions.AllSubConditionIsTrue() {
instance.Status.Conditions.MarkTrue(
condition.ReadyCondition, condition.ReadyMessage)
} else {
Log.Info("Not all conditions are ready for Amphora controller")
}
Log.Info("Reconciled Service successfully")
return ctrl.Result{}, nil
}

Expand Down
39 changes: 33 additions & 6 deletions controllers/octavia_controller.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,10 @@ func (r *OctaviaReconciler) Reconcile(ctx context.Context, req ctrl.Request) (re
condition.UnknownCondition(condition.NetworkAttachmentsReadyCondition, condition.InitReason, condition.NetworkAttachmentsReadyInitMessage),
condition.UnknownCondition(condition.ExposeServiceReadyCondition, condition.InitReason, condition.ExposeServiceReadyInitMessage),
condition.UnknownCondition(condition.DeploymentReadyCondition, condition.InitReason, condition.DeploymentReadyInitMessage),
condition.UnknownCondition(octaviav1.OctaviaAmphoraCertsReadyCondition, condition.InitReason, octaviav1.OctaviaAmphoraCertsReadyInitMessage),
condition.UnknownCondition(octaviav1.OctaviaQuotasReadyCondition, condition.InitReason, octaviav1.OctaviaQuotasReadyInitMessage),
condition.UnknownCondition(octaviav1.OctaviaAmphoraSSHReadyCondition, condition.InitReason, octaviav1.OctaviaAmphoraSSHReadyInitMessage),
condition.UnknownCondition(octaviav1.OctaviaAmphoraImagesReadyCondition, condition.InitReason, octaviav1.OctaviaAmphoraImagesReadyInitMessage),
amphoraControllerInitCondition(octaviav1.HealthManager),
amphoraControllerInitCondition(octaviav1.Housekeeping),
amphoraControllerInitCondition(octaviav1.Worker),
Expand Down Expand Up @@ -500,29 +504,34 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav
condition.InputReadyWaitingMessage))
return ctrl.Result{RequeueAfter: time.Duration(10) * time.Second}, nil
}
instance.Status.Conditions.MarkTrue(condition.InputReadyCondition, condition.InputReadyMessage)

err = octavia.EnsureAmphoraCerts(ctx, instance, helper, &Log)
if err != nil {
instance.Status.Conditions.Set(condition.FalseCondition(
condition.ServiceConfigReadyCondition,
octaviav1.OctaviaAmphoraCertsReadyCondition,
condition.ErrorReason,
condition.SeverityWarning,
condition.ServiceConfigReadyErrorMessage,
octaviav1.OctaviaAmphoraCertsReadyErrorMessage,
err.Error()))
return ctrl.Result{}, err
}
instance.Status.Conditions.MarkTrue(
octaviav1.OctaviaAmphoraCertsReadyCondition,
octaviav1.OctaviaAmphoraCertsReadyCompleteMessage)

if err = octavia.EnsureQuotas(ctx, instance, &r.Log, helper); err != nil {
instance.Status.Conditions.Set(condition.FalseCondition(
condition.InputReadyCondition,
octaviav1.OctaviaQuotasReadyCondition,
condition.ErrorReason,
condition.SeverityWarning,
condition.InputReadyErrorMessage,
octaviav1.OctaviaQuotasReadyErrorMessage,
err.Error()))
return ctrl.Result{}, err
}

instance.Status.Conditions.MarkTrue(condition.InputReadyCondition, condition.InputReadyMessage)
instance.Status.Conditions.MarkTrue(
octaviav1.OctaviaQuotasReadyCondition,
octaviav1.OctaviaQuotasReadyCompleteMessage)

//
// TODO check when/if Init, Update, or Upgrade should/could be skipped
Expand Down Expand Up @@ -774,16 +783,34 @@ func (r *OctaviaReconciler) reconcileNormal(ctx context.Context, instance *octav
// Amphora SSH key config for debugging
err = octavia.EnsureAmpSSHConfig(ctx, instance, helper)
if err != nil {
instance.Status.Conditions.Set(condition.FalseCondition(
octaviav1.OctaviaAmphoraSSHReadyCondition,
condition.ErrorReason,
condition.SeverityWarning,
octaviav1.OctaviaAmphoraSSHReadyErrorMessage,
err.Error()))
return ctrl.Result{}, err
}
instance.Status.Conditions.MarkTrue(
octaviav1.OctaviaAmphoraSSHReadyCondition,
octaviav1.OctaviaAmphoraSSHReadyCompleteMessage)

ctrlResult, err = r.reconcileAmphoraImages(ctx, instance, helper)
if (ctrlResult != ctrl.Result{}) {
return ctrlResult, nil
}
if err != nil {
instance.Status.Conditions.Set(condition.FalseCondition(
octaviav1.OctaviaAmphoraImagesReadyCondition,
condition.ErrorReason,
condition.SeverityWarning,
octaviav1.OctaviaAmphoraImagesReadyErrorMessage,
err.Error()))
return ctrl.Result{}, err
}
instance.Status.Conditions.MarkTrue(
octaviav1.OctaviaAmphoraImagesReadyCondition,
octaviav1.OctaviaAmphoraImagesReadyCompleteMessage)

// create Deployment - end

Expand Down

0 comments on commit fa4d732

Please sign in to comment.