From da56eaf164681f58d120cb5d97915c1d36d04504 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 1 Aug 2026 20:12:37 +0000 Subject: [PATCH] fix: explicit goroutine timeout for registration --- internal/native/native.go | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/internal/native/native.go b/internal/native/native.go index 0a1c75c..dc1bf3b 100644 --- a/internal/native/native.go +++ b/internal/native/native.go @@ -1,7 +1,6 @@ package native import ( - "context" "fmt" "os" "os/exec" @@ -84,16 +83,30 @@ func InstallNode(node state.Node, apiToken, apiHost, labels string) error { exec.Command("bash", filepath.Join(DeployTo, "pick-module.sh")).Run() fmt.Printf("[%s] Registering node...\n", node.Name) - ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) - defer cancel() - registerCmd := exec.CommandContext(ctx, "bash", "-c", + fmt.Printf("[%s] Registering node...\n", node.Name) + registerCmd := exec.Command("bash", "-c", fmt.Sprintf("source %s/env.list 2>/dev/null; %s/register-node job:register -token '%s' -host '%s'", DeployTo, DeployTo, apiToken, apiHost)) registerCmd.Dir = DeployTo - out, regErr := registerCmd.CombinedOutput() - if regErr != nil { - return fmt.Errorf("register: %w\n%s", regErr, string(out)) + // Run with explicit timeout + type result struct { + out []byte + err error + } + ch := make(chan result, 1) + go func() { + out, err := registerCmd.CombinedOutput() + ch <- result{out, err} + }() + select { + case r := <-ch: + if r.err != nil { + return fmt.Errorf("register: %w\n%s", r.err, string(r.out)) + } + case <-time.After(60 * time.Second): + registerCmd.Process.Kill() + return fmt.Errorf("registration timed out") } // 7. Stop our temporary NGINX, start Wallarm via supervisord