From 49fbc110d5e4ae7659530e940fef60d94b351060 Mon Sep 17 00:00:00 2001 From: Gabriel Adrian Samfira Date: Mon, 17 Oct 2022 18:43:52 +0300 Subject: [PATCH] Don't remove foreign runners When garm starts up, it attempts to cleanup any orphaned runners from github. This, unfortunately ends up deleting manually set up runners. This change looks for our controller ID in the labels of the runners and only deleted runners that we created. Fixes: #40 Signed-off-by: Gabriel Adrian Samfira --- runner/pool/pool.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/runner/pool/pool.go b/runner/pool/pool.go index 38c7e74d..92c9f00c 100644 --- a/runner/pool/pool.go +++ b/runner/pool/pool.go @@ -63,6 +63,16 @@ type basePool struct { mux sync.Mutex } +func controllerIDFromLabels(labels []*github.RunnerLabels) string { + for _, lbl := range labels { + if lbl.Name != nil && strings.HasPrefix(*lbl.Name, controllerLabelPrefix) { + labelName := *lbl.Name + return labelName[len(controllerLabelPrefix):] + } + } + return "" +} + // cleanupOrphanedProviderRunners compares runners in github with local runners and removes // any local runners that are not present in Github. Runners that are "idle" in our // provider, but do not exist in github, will be removed. This can happen if the @@ -143,6 +153,12 @@ func (r *basePool) reapTimedOutRunners(runners []*github.Runner) error { // first remove the instance from github, and then from our database. func (r *basePool) cleanupOrphanedGithubRunners(runners []*github.Runner) error { for _, runner := range runners { + runnerControllerID := controllerIDFromLabels(runner.Labels) + if runnerControllerID != r.controllerID { + // Not a runner we manage. Do not remove foreign runner. + continue + } + status := runner.GetStatus() if status != "offline" { // Runner is online. Ignore it.