Skip to content

Commit e613219

Browse files
author
Yusuke Kuoka
authored
Fix token registration broken since v0.11.0 (#167)
Fixes #166
1 parent bc35bdf commit e613219

File tree

1 file changed

+50
-30
lines changed

1 file changed

+50
-30
lines changed

controllers/runner_controller.go

Lines changed: 50 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)