Skip to content

Commit bb3ad27

Browse files
fix ansible reconcile when cr was not found
1 parent fd528e8 commit bb3ad27

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

pkg/ansible/controller/reconcile.go

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,6 @@ type AnsibleOperatorReconciler struct {
6464
func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconcile.Result, error) {
6565
u := &unstructured.Unstructured{}
6666
u.SetGroupVersionKind(r.GVK)
67-
err := r.Client.Get(context.TODO(), request.NamespacedName, u)
68-
if apierrors.IsNotFound(err) {
69-
return reconcile.Result{}, nil
70-
}
71-
if err != nil {
72-
return reconcile.Result{}, err
73-
}
7467

7568
ident := strconv.Itoa(rand.Int())
7669
logger := logf.Log.WithName("reconciler").WithValues(
@@ -79,6 +72,20 @@ func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconc
7972
"namespace", u.GetNamespace(),
8073
)
8174

75+
err := r.Client.Get(context.TODO(), request.NamespacedName, u)
76+
if err != nil {
77+
if apierrors.IsNotFound(err) {
78+
// Request object not found, could have been deleted after reconcile request.
79+
// Owned objects are automatically garbage collected. For additional cleanup logic use finalizers.
80+
// Return and don't requeue
81+
logger.Info("Resource not found, assuming it was deleted", "namespace", request.NamespacedName, "resource", u)
82+
return reconcile.Result{}, nil
83+
}
84+
// Error reading the object - requeue the request.
85+
logger.Error(err, "Failed to get Resource.")
86+
return reconcile.Result{}, err
87+
}
88+
8289
reconcileResult := reconcile.Result{RequeueAfter: r.ReconcilePeriod}
8390
if ds, ok := u.GetAnnotations()[ReconcilePeriodAnnotation]; ok {
8491
duration, err := time.ParseDuration(ds)
@@ -190,10 +197,16 @@ func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconc
190197
// Need to get the unstructured object after ansible
191198
// this needs to hit the API
192199
err = r.Client.Get(context.TODO(), request.NamespacedName, u)
193-
if apierrors.IsNotFound(err) {
194-
return reconcile.Result{}, nil
195-
}
196200
if err != nil {
201+
if apierrors.IsNotFound(err) {
202+
// Request object not found, could have been deleted after reconcile request.
203+
// Owned objects are automatically garbage collected. For additional cleanup logic use finalizers.
204+
// Return and don't requeue
205+
logger.Info("Resource not found, assuming it was deleted", "namespace", request.NamespacedName, "resource", u)
206+
return reconcile.Result{}, nil
207+
}
208+
// Error reading the object - requeue the request.
209+
logger.Error(err, "Failed to get Resource.")
197210
return reconcile.Result{}, err
198211
}
199212

@@ -233,6 +246,7 @@ func (r *AnsibleOperatorReconciler) markRunning(u *unstructured.Unstructured, na
233246
if err != nil {
234247
return err
235248
}
249+
236250
statusInterface := u.Object["status"]
237251
statusMap, _ := statusInterface.(map[string]interface{})
238252
crStatus := ansiblestatus.CreateFromMap(statusMap)
@@ -270,13 +284,11 @@ func (r *AnsibleOperatorReconciler) markError(u *unstructured.Unstructured, name
270284
metrics.ReconcileFailed(r.GVK.String())
271285
// Get the latest resource to prevent updating a stale status
272286
err := r.Client.Get(context.TODO(), namespacedName, u)
273-
if apierrors.IsNotFound(err) {
274-
logger.Info("Resource not found, assuming it was deleted", err)
275-
return nil
276-
}
277287
if err != nil {
288+
logger.Error(err,"Resource not found")
278289
return err
279290
}
291+
280292
statusInterface := u.Object["status"]
281293
statusMap, ok := statusInterface.(map[string]interface{})
282294
// If the map is not available create one.
@@ -306,16 +318,12 @@ func (r *AnsibleOperatorReconciler) markError(u *unstructured.Unstructured, name
306318
}
307319

308320
func (r *AnsibleOperatorReconciler) markDone(u *unstructured.Unstructured, namespacedName types.NamespacedName, statusEvent eventapi.StatusJobEvent, failureMessages eventapi.FailureMessages) error {
309-
logger := logf.Log.WithName("markDone")
310321
// Get the latest resource to prevent updating a stale status
311322
err := r.Client.Get(context.TODO(), namespacedName, u)
312-
if apierrors.IsNotFound(err) {
313-
logger.Info("Resource not found, assuming it was deleted", err)
314-
return nil
315-
}
316323
if err != nil {
317324
return err
318325
}
326+
319327
statusInterface := u.Object["status"]
320328
statusMap, _ := statusInterface.(map[string]interface{})
321329
crStatus := ansiblestatus.CreateFromMap(statusMap)

0 commit comments

Comments
 (0)