@@ -126,7 +126,13 @@ func (r *RunnerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
126126 return ctrl.Result {}, err
127127 }
128128
129- newPod , err := r .newPod (ctx , runner )
129+ if updated , err := r .updateRegistrationToken (ctx , runner ); err != nil {
130+ return ctrl.Result {}, err
131+ } else if updated {
132+ return ctrl.Result {Requeue : true }, nil
133+ }
134+
135+ newPod , err := r .newPod (runner )
130136 if err != nil {
131137 log .Error (err , "Could not create pod" )
132138 return ctrl.Result {}, err
@@ -174,7 +180,13 @@ func (r *RunnerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
174180 }
175181 }
176182
177- newPod , err := r .newPod (ctx , runner )
183+ if updated , err := r .updateRegistrationToken (ctx , runner ); err != nil {
184+ return ctrl.Result {}, err
185+ } else if updated {
186+ return ctrl.Result {Requeue : true }, nil
187+ }
188+
189+ newPod , err := r .newPod (runner )
178190 if err != nil {
179191 log .Error (err , "Could not create pod" )
180192 return ctrl.Result {}, err
@@ -249,21 +261,46 @@ func (r *RunnerReconciler) unregisterRunner(ctx context.Context, org, repo, name
249261 return true , nil
250262}
251263
252- func (r * RunnerReconciler ) newPod (ctx context.Context , runner v1alpha1.Runner ) (corev1.Pod , error ) {
264+ func (r * RunnerReconciler ) updateRegistrationToken (ctx context.Context , runner v1alpha1.Runner ) (bool , error ) {
265+ if runner .IsRegisterable () {
266+ return false , nil
267+ }
268+
269+ log := r .Log .WithValues ("runner" , runner .Name )
270+
271+ rt , err := r .GitHubClient .GetRegistrationToken (ctx , runner .Spec .Organization , runner .Spec .Repository , runner .Name )
272+ if err != nil {
273+ r .Recorder .Event (& runner , corev1 .EventTypeWarning , "FailedUpdateRegistrationToken" , "Updating registration token failed" )
274+ log .Error (err , "Failed to get new registration token" )
275+ return false , err
276+ }
277+
278+ updated := runner .DeepCopy ()
279+ updated .Status .Registration = v1alpha1.RunnerStatusRegistration {
280+ Organization : runner .Spec .Organization ,
281+ Repository : runner .Spec .Repository ,
282+ Labels : runner .Spec .Labels ,
283+ Token : rt .GetToken (),
284+ ExpiresAt : metav1 .NewTime (rt .GetExpiresAt ().Time ),
285+ }
286+
287+ if err := r .Status ().Update (ctx , updated ); err != nil {
288+ log .Error (err , "Failed to update runner status" )
289+ return false , err
290+ }
291+
292+ r .Recorder .Event (& runner , corev1 .EventTypeNormal , "RegistrationTokenUpdated" , "Successfully update registration token" )
293+ log .Info ("Updated registration token" , "repository" , runner .Spec .Repository )
294+
295+ return true , nil
296+ }
297+
298+ func (r * RunnerReconciler ) newPod (runner v1alpha1.Runner ) (corev1.Pod , error ) {
253299 var (
254300 privileged bool = true
255301 dockerdInRunner bool = runner .Spec .DockerdWithinRunnerContainer != nil && * runner .Spec .DockerdWithinRunnerContainer
256- err error
257302 )
258303
259- token := runner .Status .Registration .Token
260- if ! runner .IsRegisterable () {
261- token , err = r .getRegistrationToken (ctx , runner )
262- if err != nil {
263- return corev1.Pod {}, err
264- }
265- }
266-
267304 runnerImage := runner .Spec .Image
268305 if runnerImage == "" {
269306 runnerImage = r .RunnerImage
@@ -297,7 +334,7 @@ func (r *RunnerReconciler) newPod(ctx context.Context, runner v1alpha1.Runner) (
297334 },
298335 {
299336 Name : "RUNNER_TOKEN" ,
300- Value : token ,
337+ Value : runner . Status . Registration . Token ,
301338 },
302339 {
303340 Name : "DOCKERD_IN_RUNNER" ,
@@ -484,20 +521,3 @@ func removeFinalizer(finalizers []string) ([]string, bool) {
484521
485522 return result , removed
486523}
487-
488- func (r * RunnerReconciler ) getRegistrationToken (ctx context.Context , runner v1alpha1.Runner ) (string , error ) {
489- log := r .Log .WithValues ("runner" , runner .Name )
490- if runner .IsRegisterable () {
491- return runner .Status .Registration .Token , nil
492- } else {
493- rt , err := r .GitHubClient .GetRegistrationToken (ctx , runner .Spec .Organization , runner .Spec .Repository , runner .Name )
494- if err != nil {
495- r .Recorder .Event (& runner , corev1 .EventTypeWarning , "FailedUpdateRegistrationToken" , "Updating registration token failed" )
496- log .Error (err , "Failed to get new registration token" )
497- return "" , err
498- }
499-
500- log .Info ("Updated registration token" , "repository" , runner .Spec .Repository )
501- return rt .GetToken (), nil
502- }
503- }
0 commit comments