diff --git a/controllers/runner_controller.go b/controllers/runner_controller.go index 3753819493..4126f6a509 100644 --- a/controllers/runner_controller.go +++ b/controllers/runner_controller.go @@ -198,14 +198,20 @@ func (r *RunnerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) { return ctrl.Result{}, nil } - if !runnerBusy && (!reflect.DeepEqual(pod.Spec.Containers[0].Env, newPod.Spec.Containers[0].Env) || pod.Spec.Containers[0].Image != newPod.Spec.Containers[0].Image) { + // Filter out token that is changed hourly. + currentEnvValues := filterEnvVars(pod.Spec.Containers[0].Env, "RUNNER_TOKEN") + newEnvValues := filterEnvVars(newPod.Spec.Containers[0].Env, "RUNNER_TOKEN") + + if !runnerBusy && (!reflect.DeepEqual(currentEnvValues, newEnvValues) || pod.Spec.Containers[0].Image != newPod.Spec.Containers[0].Image) { restart = true } + // Don't do anything if there's no need to restart the runner if !restart { return ctrl.Result{}, err } + // Delete current pod if recreation is needed if err := r.Delete(ctx, &pod); err != nil { log.Error(err, "Failed to delete pod resource") return ctrl.Result{}, err diff --git a/controllers/utils.go b/controllers/utils.go new file mode 100644 index 0000000000..3c3dbdaaa2 --- /dev/null +++ b/controllers/utils.go @@ -0,0 +1,14 @@ +package controllers + +import ( + corev1 "k8s.io/api/core/v1" +) + +func filterEnvVars(envVars []corev1.EnvVar, filter string) (filtered []corev1.EnvVar) { + for _, envVar := range envVars { + if envVar.Name != filter { + filtered = append(filtered, envVar) + } + } + return filtered +}