@@ -89,10 +89,36 @@ func (r *DurosReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl
8989 return ctrl.Result {}, nil
9090 }
9191
92- err := validateDuros (duros )
92+ var err error
93+
94+ defer func () {
95+ now := metav1 .NewTime (time .Now ())
96+
97+ duros .Status .ReconcileStatus = duroscontrollerv1.ReconcileStatus {
98+ LastReconcile : & now ,
99+ Error : nil ,
100+ }
101+
102+ if err != nil {
103+ msg := err .Error ()
104+ duros .Status .ReconcileStatus .Error = & msg
105+ }
106+
107+ r .setManagedResourceStatus (ctx , duros )
108+
109+ if err := r .Status ().Update (ctx , duros ); err != nil {
110+ log .Error (err , "error updating status of duros resource" , "name" , duros .Name )
111+ return
112+ }
113+
114+ r .Log .Info ("status updated" , "name" , duros .Name )
115+ }()
116+
117+ err = validateDuros (duros )
93118 if err != nil {
94119 return requeue , err
95120 }
121+
96122 projectID := duros .Spec .MetalProjectID
97123 storageClasses := duros .Spec .StorageClasses
98124
@@ -118,35 +144,38 @@ func (r *DurosReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl
118144 return requeue , err
119145 }
120146
121- err = r .reconcileStatus (ctx , duros )
122- if err != nil {
123- return requeue , err
124- }
125-
126147 return ctrl.Result {
127148 // we requeue in a small interval to ensure resources are recreated quickly
128149 // and status is updated regularly
129150 RequeueAfter : 30 * time .Second ,
130151 }, nil
131152}
132153
133- func (r * DurosReconciler ) reconcileStatus (ctx context.Context , duros * duroscontrollerv1.Duros ) error {
154+ func (r * DurosReconciler ) setManagedResourceStatus (ctx context.Context , duros * duroscontrollerv1.Duros ) {
134155 var (
135156 updateTime = metav1 .NewTime (time .Now ())
136157 ds = & appsv1.DaemonSet {}
137158 sts = & appsv1.StatefulSet {}
159+
160+ dsState = duroscontrollerv1 .HealthStateRunning
161+ dsMsg = "All replicas are ready"
162+
163+ stsState = duroscontrollerv1 .HealthStateRunning
164+ stsMsg = "All replicas are ready"
138165 )
139166
140167 err := r .Shoot .Get (ctx , types.NamespacedName {Name : lbCSINodeName , Namespace : namespace }, ds )
141168 if err != nil {
142- return fmt .Errorf ("error getting daemon set: %w" , err )
169+ r .Log .Error (err , "error getting daemon set" )
170+ dsState = duroscontrollerv1 .HealthStateNotRunning
171+ dsMsg = err .Error ()
143172 }
144173
145174 dsStatus := duroscontrollerv1.ManagedResourceStatus {
146175 Name : ds .Name ,
147176 Group : "DaemonSet" , // ds.GetObjectKind().GroupVersionKind().String() --> this does not work :(
148- State : duroscontrollerv1 . HealthStateRunning ,
149- Description : "All replicas are ready" ,
177+ State : dsState ,
178+ Description : dsMsg ,
150179 LastUpdateTime : updateTime ,
151180 }
152181
@@ -157,14 +186,16 @@ func (r *DurosReconciler) reconcileStatus(ctx context.Context, duros *duroscontr
157186
158187 err = r .Shoot .Get (ctx , types.NamespacedName {Name : lbCSIControllerName , Namespace : namespace }, sts )
159188 if err != nil {
160- return fmt .Errorf ("error getting statefulset: %w" , err )
189+ r .Log .Error (err , "error getting stateful set" )
190+ stsState = duroscontrollerv1 .HealthStateNotRunning
191+ stsMsg = err .Error ()
161192 }
162193
163194 stsStatus := duroscontrollerv1.ManagedResourceStatus {
164195 Name : sts .Name ,
165196 Group : "StatefulSet" , // sts.GetObjectKind().GroupVersionKind().String() --> this does not work :(
166- State : duroscontrollerv1 . HealthStateRunning ,
167- Description : "All replicas are ready" ,
197+ State : stsState ,
198+ Description : stsMsg ,
168199 LastUpdateTime : updateTime ,
169200 }
170201
@@ -179,14 +210,6 @@ func (r *DurosReconciler) reconcileStatus(ctx context.Context, duros *duroscontr
179210 }
180211
181212 duros .Status .ManagedResourceStatuses = []duroscontrollerv1.ManagedResourceStatus {dsStatus , stsStatus }
182- err = r .Status ().Update (ctx , duros )
183- if err != nil {
184- return fmt .Errorf ("error updating status: %w" , err )
185- }
186-
187- r .Log .Info ("status updated" , "name" , duros .Name )
188-
189- return nil
190213}
191214
192215// SetupWithManager boilerplate to setup the Reconciler
0 commit comments