Restart runner pod on completion

This commit is contained in:
Moto Ishizawa 2020-02-01 00:06:30 +09:00
parent 65f479d749
commit 960befeade
1 changed files with 22 additions and 8 deletions

View File

@ -37,6 +37,7 @@ import (
const ( const (
defaultImage = "summerwind/actions-runner:latest" defaultImage = "summerwind/actions-runner:latest"
containerName = "runner"
) )
type RegistrationToken struct { type RegistrationToken struct {
@ -107,20 +108,33 @@ func (r *RunnerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
restart := false
if pod.Status.Phase == corev1.PodRunning {
for _, status := range pod.Status.ContainerStatuses {
if status.Name != containerName {
continue
}
if status.State.Terminated != nil && status.State.Terminated.ExitCode == 0 {
restart = true
}
}
}
newPod, err := r.newPod(runner) newPod, err := r.newPod(runner)
if err != nil { if err != nil {
log.Error(err, "could not create pod") log.Error(err, "could not create pod")
return ctrl.Result{}, err return ctrl.Result{}, err
} }
update := false
if pod.Spec.Containers[0].Image != newPod.Spec.Containers[0].Image { if pod.Spec.Containers[0].Image != newPod.Spec.Containers[0].Image {
update = true restart = true
} }
if !reflect.DeepEqual(pod.Spec.Containers[0].Env, newPod.Spec.Containers[0].Env) { if !reflect.DeepEqual(pod.Spec.Containers[0].Env, newPod.Spec.Containers[0].Env) {
update = true restart = true
} }
if !update { if !restart {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
@ -129,7 +143,7 @@ func (r *RunnerReconciler) Reconcile(req ctrl.Request) (ctrl.Result, error) {
return ctrl.Result{}, err return ctrl.Result{}, err
} }
log.Info("Deleted a runner pod for updating", "repository", runner.Spec.Repository) log.Info("Restarted a runner pod", "repository", runner.Spec.Repository)
} }
return ctrl.Result{}, nil return ctrl.Result{}, nil
@ -192,10 +206,10 @@ func (r *RunnerReconciler) newPod(runner v1alpha1.Runner) (corev1.Pod, error) {
Namespace: runner.Namespace, Namespace: runner.Namespace,
}, },
Spec: corev1.PodSpec{ Spec: corev1.PodSpec{
RestartPolicy: "Always", RestartPolicy: "OnFailure",
Containers: []corev1.Container{ Containers: []corev1.Container{
{ {
Name: "runner", Name: containerName,
Image: image, Image: image,
ImagePullPolicy: "Always", ImagePullPolicy: "Always",
Env: []corev1.EnvVar{ Env: []corev1.EnvVar{