diff --git a/internal/native/native.go b/internal/native/native.go index 35c5e57..f53f729 100644 --- a/internal/native/native.go +++ b/internal/native/native.go @@ -82,14 +82,46 @@ func InstallNode(node state.Node, apiToken, apiHost, labels string) error { fmt.Printf("[%s] Configuring NGINX module...\n", node.Name) exec.Command("bash", filepath.Join(DeployTo, "pick-module.sh")).Run() - fmt.Printf("[%s] Registering node (this may take 30-60s)...\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)) + // 6. Register node (skip if already registered from previous run) + nodeYaml := filepath.Join(DeployTo, "etc", "wallarm", "node.yaml") + if _, err := os.Stat(nodeYaml); err == nil { + fmt.Printf("[%s] Already registered, skipping.\n", node.Name) + } else { + fmt.Printf("[%s] Registering node (this may take 30-60s)...\n", node.Name) + registerCmd := exec.Command(filepath.Join(DeployTo, "register-node"), + "job:register", + "-token", apiToken, + "-host", apiHost, + ) + registerCmd.Dir = DeployTo + devNull, _ := os.Open(os.DevNull) + if devNull != nil { + registerCmd.Stdin = devNull + defer devNull.Close() + } + // Set environment from env.list + envData, _ := os.ReadFile(filepath.Join(DeployTo, "env.list")) + for _, line := range strings.Split(string(envData), "\n") { + line = strings.TrimSpace(line) + if line == "" || strings.HasPrefix(line, "#") { + continue + } + registerCmd.Env = append(registerCmd.Env, line) + } + registerCmd.Env = append(registerCmd.Env, os.Environ()...) + regLog, _ := os.Create(filepath.Join(DeployTo, "register.log")) + if regLog != nil { + registerCmd.Stdout = regLog + registerCmd.Stderr = regLog + } + regErr := registerCmd.Run() + if regLog != nil { + regLog.Close() + } + if regErr != nil { + data, _ := os.ReadFile(filepath.Join(DeployTo, "register.log")) + return fmt.Errorf("register: %w\n%s", regErr, string(data)) + } } // 7. Stop our temporary NGINX, start Wallarm via supervisord