Restart runner pod on completion
This commit is contained in:
		
							parent
							
								
									65f479d749
								
							
						
					
					
						commit
						960befeade
					
				|  | @ -36,7 +36,8 @@ 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{ | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue