@@ -18,7 +18,9 @@ import (
18
18
"context"
19
19
"encoding/json"
20
20
"errors"
21
+ "math/rand"
21
22
"os"
23
+ "strconv"
22
24
"strings"
23
25
"time"
24
26
@@ -65,6 +67,15 @@ func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconc
65
67
if err != nil {
66
68
return reconcile.Result {}, err
67
69
}
70
+
71
+ ident := strconv .Itoa (rand .Int ())
72
+ logger := logrus .WithFields (logrus.Fields {
73
+ "component" : "reconciler" ,
74
+ "job" : ident ,
75
+ "name" : u .GetName (),
76
+ "namespace" : u .GetNamespace (),
77
+ })
78
+
68
79
reconcileResult := reconcile.Result {RequeueAfter : r .ReconcilePeriod }
69
80
if ds , ok := u .GetAnnotations ()[ReconcilePeriodAnnotation ]; ok {
70
81
duration , err := time .ParseDuration (ds )
@@ -79,7 +90,7 @@ func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconc
79
90
pendingFinalizers := u .GetFinalizers ()
80
91
// If the resource is being deleted we don't want to add the finalizer again
81
92
if finalizerExists && ! deleted && ! contains (pendingFinalizers , finalizer ) {
82
- logrus .Debugf ("Adding finalizer %s to resource" , finalizer )
93
+ logger .Debugf ("Adding finalizer %s to resource" , finalizer )
83
94
finalizers := append (pendingFinalizers , finalizer )
84
95
u .SetFinalizers (finalizers )
85
96
err := r .Client .Update (context .TODO (), u )
@@ -88,14 +99,14 @@ func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconc
88
99
}
89
100
}
90
101
if ! contains (pendingFinalizers , finalizer ) && deleted {
91
- logrus .Info ("Resource is terminated, skipping reconcilation" )
102
+ logger .Info ("Resource is terminated, skipping reconcilation" )
92
103
return reconcileResult , nil
93
104
}
94
105
95
106
spec := u .Object ["spec" ]
96
107
_ , ok := spec .(map [string ]interface {})
97
108
if ! ok {
98
- logrus .Debugf ("spec was not found" )
109
+ logger .Debugf ("spec was not found" )
99
110
u .Object ["spec" ] = map [string ]interface {}{}
100
111
err = r .Client .Update (context .TODO (), u )
101
112
if err != nil {
@@ -141,15 +152,15 @@ func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconc
141
152
return reconcileResult , err
142
153
}
143
154
defer os .Remove (kc .Name ())
144
- eventChan , err := r .Runner .Run (u , kc .Name ())
155
+ result , err := r .Runner .Run (ident , u , kc .Name ())
145
156
if err != nil {
146
157
return reconcileResult , err
147
158
}
148
159
149
160
// iterate events from ansible, looking for the final one
150
161
statusEvent := eventapi.StatusJobEvent {}
151
162
failureMessages := eventapi.FailureMessages {}
152
- for event := range eventChan {
163
+ for event := range result . Events {
153
164
for _ , eHandler := range r .EventHandlers {
154
165
go eHandler .Handle (u , event )
155
166
}
@@ -165,13 +176,23 @@ func (r *AnsibleOperatorReconciler) Reconcile(request reconcile.Request) (reconc
165
176
}
166
177
}
167
178
if event .Event == eventapi .EventRunnerOnFailed {
179
+ taskPath , ok := event .EventData ["task_path" ]
180
+ if ok {
181
+ logger .Errorf ("failed task: %s\n " , taskPath )
182
+ }
168
183
failureMessages = append (failureMessages , event .GetFailedPlaybookMessage ())
169
184
}
170
185
}
171
186
if statusEvent .Event == "" {
172
- err := errors .New ("did not receive playbook_on_stats event" )
173
- logrus .Error (err .Error ())
174
- return reconcileResult , err
187
+ msg := "did not receive playbook_on_stats event"
188
+ logger .Error (msg )
189
+ stdout , err := result .Stdout ()
190
+ if err != nil {
191
+ logger .Infof ("failed to get ansible-runner stdout: %s\n " , err .Error ())
192
+ } else {
193
+ logger .Error (stdout )
194
+ }
195
+ return reconcileResult , errors .New (msg )
175
196
}
176
197
177
198
// We only want to update the CustomResource once, so we'll track changes and do it at the end
0 commit comments