in operator/controllers/operator/satellite_controller.go [84:116]
func (r *SatelliteReconciler) checkState(ctx context.Context, log logr.Logger, satellite *operatorv1alpha1.Satellite) error {
overlay := operatorv1alpha1.SatelliteStatus{}
deployment := apps.Deployment{}
errCol := new(kubernetes.ErrorCollector)
if err := r.Client.Get(ctx, client.ObjectKey{Namespace: satellite.Namespace, Name: satellite.Name + "-satellite"}, &deployment); err != nil {
errCol.Collect(fmt.Errorf("failed to get deployment :%v", err))
} else {
overlay.Conditions = deployment.Status.Conditions
overlay.AvailableReplicas = deployment.Status.AvailableReplicas
}
service := core.Service{}
if err := r.Client.Get(ctx, client.ObjectKey{Namespace: satellite.Namespace, Name: satellite.Name + "-satellite"}, &service); err != nil {
errCol.Collect(fmt.Errorf("failed to get service :%v", err))
} else {
overlay.Address = fmt.Sprintf("%s.%s", service.Name, service.Namespace)
}
if apiequal.Semantic.DeepDerivative(overlay, satellite.Status) {
log.Info("Status keeps the same as before")
return errCol.Error()
}
satellite.Status = overlay
satellite.Kind = "Satellite"
if err := kubernetes.ApplyOverlay(satellite, &operatorv1alpha1.Satellite{Status: overlay}); err != nil {
errCol.Collect(fmt.Errorf("failed to apply overlay: %w", err))
return errCol.Error()
}
if err := r.updateStatus(ctx, satellite, overlay, errCol); err != nil {
errCol.Collect(fmt.Errorf("failed to update status of satellite: %w", err))
}
log.Info("updated Status sub resource")
return errCol.Error()
}