in operator/controllers/operator/storage_controller.go [121:154]
func (r *StorageReconciler) checkState(ctx context.Context, log logr.Logger, storage *operatorv1alpha1.Storage) error {
overlay := operatorv1alpha1.StorageStatus{}
statefulset := apps.StatefulSet{}
errCol := new(kubernetes.ErrorCollector)
object := client.ObjectKey{Namespace: storage.Namespace, Name: storage.Name + "-" + storage.Spec.Type}
if err := r.Client.Get(ctx, object, &statefulset); err != nil && !apierrors.IsNotFound(err) {
errCol.Collect(fmt.Errorf("failed to get statefulset: %w", err))
} else {
if statefulset.Status.ReadyReplicas == statefulset.Status.Replicas {
overlay.Conditions = append(overlay.Conditions, apps.StatefulSetCondition{
Type: "Ready",
Status: "True",
LastTransitionTime: metav1.NewTime(time.Now()),
Reason: "statefulset " + object.Name + " is ready",
})
}
}
if apiequal.Semantic.DeepDerivative(overlay, storage.Status) {
log.Info("Status keeps the same as before")
return errCol.Error()
}
storage.Status = overlay
storage.Kind = "Storage"
if err := kubernetes.ApplyOverlay(storage, &operatorv1alpha1.Storage{Status: overlay}); err != nil {
errCol.Collect(fmt.Errorf("failed to apply overlay: %w", err))
return errCol.Error()
}
if err := r.updateStatus(ctx, storage, overlay, errCol); err != nil {
errCol.Collect(fmt.Errorf("failed to update status of es: %w", err))
}
log.Info("updated Status sub resource")
return errCol.Error()
}