@@ -16,7 +16,9 @@ import (
1616 "context"
1717 "time"
1818
19+ "github.com/eclipse-che/che-operator/pkg/common/constants"
1920 k8sclient "github.com/eclipse-che/che-operator/pkg/common/k8s-client"
21+ "github.com/eclipse-che/che-operator/pkg/common/reconciler"
2022 "k8s.io/utils/pointer"
2123 "sigs.k8s.io/controller-runtime/pkg/controller"
2224
@@ -49,7 +51,6 @@ import (
4951 chev2 "github.com/eclipse-che/che-operator/api/v2"
5052 "github.com/go-logr/logr"
5153 routev1 "github.com/openshift/api/route/v1"
52- "github.com/sirupsen/logrus"
5354 appsv1 "k8s.io/api/apps/v1"
5455 corev1 "k8s.io/api/core/v1"
5556 networking "k8s.io/api/networking/v1"
@@ -77,8 +78,8 @@ type CheClusterReconciler struct {
7778 nonCachedClient client.Client
7879 // A discovery client to check for the existence of certain APIs registered
7980 // in the API Server
80- discoveryClient discovery.DiscoveryInterface
81- reconcileManager * deploy. ReconcileManager
81+ discoveryClient discovery.DiscoveryInterface
82+ reconcilerManager * reconciler. ReconcilerManager
8283 // the namespace to which to limit the reconciliation. If empty, all namespaces are considered
8384 namespace string
8485}
@@ -91,49 +92,49 @@ func NewReconciler(
9192 scheme * k8sruntime.Scheme ,
9293 namespace string ) * CheClusterReconciler {
9394
94- reconcileManager := deploy . NewReconcileManager ()
95+ reconcilerManager := reconciler . NewReconcilerManager ()
9596
9697 // order does matter
9798 if ! test .IsTestMode () {
98- reconcileManager . RegisterReconciler (migration .NewMigrator ())
99- reconcileManager . RegisterReconciler (migration .NewCheClusterDefaultsCleaner ())
100- reconcileManager . RegisterReconciler (NewCheClusterValidator ())
99+ reconcilerManager . AddReconciler (migration .NewMigrator ())
100+ reconcilerManager . AddReconciler (migration .NewCheClusterDefaultsCleaner ())
101+ reconcilerManager . AddReconciler (NewCheClusterValidator ())
101102 }
102103
103- reconcileManager . RegisterReconciler (tls .NewCertificatesReconciler ())
104- reconcileManager . RegisterReconciler (tls .NewTlsSecretReconciler ())
105- reconcileManager . RegisterReconciler (devworkspaceconfig .NewDevWorkspaceConfigReconciler ())
106- reconcileManager . RegisterReconciler (rbac .NewGatewayPermissionsReconciler ())
104+ reconcilerManager . AddReconciler (tls .NewCertificatesReconciler ())
105+ reconcilerManager . AddReconciler (tls .NewTlsSecretReconciler ())
106+ reconcilerManager . AddReconciler (devworkspaceconfig .NewDevWorkspaceConfigReconciler ())
107+ reconcilerManager . AddReconciler (rbac .NewGatewayPermissionsReconciler ())
107108
108109 // we have to expose che endpoint independently of syncing other server
109110 // resources since che host is used for dashboard deployment and che config map
110- reconcileManager . RegisterReconciler (server .NewCheHostReconciler ())
111- reconcileManager . RegisterReconciler (postgres .NewPostgresReconciler ())
111+ reconcilerManager . AddReconciler (server .NewCheHostReconciler ())
112+ reconcilerManager . AddReconciler (postgres .NewPostgresReconciler ())
112113 if infrastructure .IsOpenShift () {
113- reconcileManager . RegisterReconciler (identityprovider .NewIdentityProviderReconciler ())
114+ reconcilerManager . AddReconciler (identityprovider .NewIdentityProviderReconciler ())
114115 }
115- reconcileManager . RegisterReconciler (devfileregistry .NewDevfileRegistryReconciler ())
116- reconcileManager . RegisterReconciler (pluginregistry .NewPluginRegistryReconciler ())
117- reconcileManager . RegisterReconciler (editorsdefinitions .NewEditorsDefinitionsReconciler ())
118- reconcileManager . RegisterReconciler (dashboard .NewDashboardReconciler ())
119- reconcileManager . RegisterReconciler (gateway .NewGatewayReconciler ())
120- reconcileManager . RegisterReconciler (server .NewCheServerReconciler ())
121- reconcileManager . RegisterReconciler (imagepuller .NewImagePuller ())
116+ reconcilerManager . AddReconciler (devfileregistry .NewDevfileRegistryReconciler ())
117+ reconcilerManager . AddReconciler (pluginregistry .NewPluginRegistryReconciler ())
118+ reconcilerManager . AddReconciler (editorsdefinitions .NewEditorsDefinitionsReconciler ())
119+ reconcilerManager . AddReconciler (dashboard .NewDashboardReconciler ())
120+ reconcilerManager . AddReconciler (gateway .NewGatewayReconciler ())
121+ reconcilerManager . AddReconciler (server .NewCheServerReconciler ())
122+ reconcilerManager . AddReconciler (imagepuller .NewImagePuller ())
122123
123124 if infrastructure .IsOpenShift () {
124- reconcileManager . RegisterReconciler (containerbuild .NewContainerCapabilitiesReconciler ())
125- reconcileManager . RegisterReconciler (consolelink .NewConsoleLinkReconciler ())
125+ reconcilerManager . AddReconciler (containerbuild .NewContainerCapabilitiesReconciler ())
126+ reconcilerManager . AddReconciler (consolelink .NewConsoleLinkReconciler ())
126127 }
127128
128129 return & CheClusterReconciler {
129130 Scheme : scheme ,
130131 Log : ctrl .Log .WithName ("controllers" ).WithName ("CheCluster" ),
131132
132- client : k8sclient ,
133- nonCachedClient : noncachedClient ,
134- discoveryClient : discoveryClient ,
135- namespace : namespace ,
136- reconcileManager : reconcileManager ,
133+ client : k8sclient ,
134+ nonCachedClient : noncachedClient ,
135+ discoveryClient : discoveryClient ,
136+ namespace : namespace ,
137+ reconcilerManager : reconcilerManager ,
137138 }
138139}
139140
@@ -240,24 +241,42 @@ func (r *CheClusterReconciler) Reconcile(ctx context.Context, req ctrl.Request)
240241 deployContext .IsSelfSignedCertificate = isSelfSignedCertificate
241242
242243 if deployContext .CheCluster .ObjectMeta .DeletionTimestamp .IsZero () {
243- result , done , err := r .reconcileManager .ReconcileAll (deployContext )
244- if ! done {
245- return result , err
246- } else {
244+ result , done , err := r .reconcilerManager .ReconcileAll (deployContext )
245+ if done {
246+ // Clean up status if so
247247 if err := deploy .SetStatusDetails (deployContext , "" , "" ); err != nil {
248248 return ctrl.Result {}, err
249249 }
250- logrus .Info ("Successfully reconciled." )
250+
251+ r .Log .Info ("Successfully reconciled." )
251252 return ctrl.Result {}, nil
253+ } else {
254+ if err != nil {
255+ errMsg := "Failed to reconcile CheCluster resources. The installation is not completed. Check operator logs for details."
256+ r .Log .Error (err , errMsg )
257+
258+ if err := deploy .SetStatusDetails (deployContext , constants .InstallOrUpdateFailed , errMsg ); err != nil {
259+ return ctrl.Result {}, err
260+ }
261+ }
262+
263+ return result , err
252264 }
253265 } else {
254266 deployContext .CheCluster .Status .ChePhase = chev2 .ClusterPhasePendingDeletion
255- _ = deploy .UpdateCheCRStatus (deployContext , "ChePhase" , chev2 .ClusterPhasePendingDeletion )
256-
257- if done := r .reconcileManager .FinalizeAll (deployContext ); ! done {
258- return ctrl.Result {RequeueAfter : 1 * time .Second }, nil
267+ if err = deploy .UpdateCheCRStatus (deployContext , "ChePhase" , chev2 .ClusterPhasePendingDeletion ); err != nil {
268+ return ctrl.Result {}, err
269+ }
259270
271+ done := r .reconcilerManager .FinalizeAll (deployContext )
272+ if done {
273+ // Removes remaining finalizers, which prevent CheCluster from deletion
274+ if err := deploy .CleanUpAllFinalizers (deployContext ); err != nil {
275+ return ctrl.Result {}, err
276+ }
277+ return ctrl.Result {}, nil
278+ } else {
279+ return ctrl.Result {RequeueAfter : time .Second }, nil
260280 }
261- return ctrl.Result {}, nil
262281 }
263282}
0 commit comments