fix: use setup.sh batch mode with --batch --token --cloud
- Uses AIO installer's built-in batch mode instead of interactive prompts - --batch --token TOKEN --cloud US|EU --host HOST for non-interactive install - cloudFromHost() maps api.wallarm.com → EU, us1.api.wallarm.com → US - No more stdin piping, proper CLI flags
This commit is contained in:
parent
0ce12f4742
commit
2e6eca019d
1 changed files with 20 additions and 12 deletions
|
|
@ -65,7 +65,7 @@ connector:
|
||||||
return fmt.Errorf("write config: %w", err)
|
return fmt.Errorf("write config: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. Ensure NGINX is installed (Wallarm node requires it)
|
// 3. Install NGINX (Wallarm node requires it as proxy layer)
|
||||||
installNginx()
|
installNginx()
|
||||||
|
|
||||||
// 4. Download installer if missing
|
// 4. Download installer if missing
|
||||||
|
|
@ -100,22 +100,19 @@ WALLARM_CONFIG_PATH=%s
|
||||||
return fmt.Errorf("extract installer: %w\n%s", err, string(out))
|
return fmt.Errorf("extract installer: %w\n%s", err, string(out))
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. Run the embedded setup.sh with our configuration
|
// 6. Run setup.sh in batch mode (non-interactive)
|
||||||
setupScript := filepath.Join(workDir, "setup.sh")
|
setupScript := filepath.Join(workDir, "setup.sh")
|
||||||
if _, err := os.Stat(setupScript); err != nil {
|
if _, err := os.Stat(setupScript); err != nil {
|
||||||
return fmt.Errorf("setup.sh not found after extraction: %w", err)
|
return fmt.Errorf("setup.sh not found after extraction: %w", err)
|
||||||
}
|
}
|
||||||
fmt.Printf("[%s] Running setup...\n", node.Name)
|
fmt.Printf("[%s] Running setup (batch mode)...\n", node.Name)
|
||||||
setupCmd := exec.Command("bash", setupScript)
|
setupCmd := exec.Command("bash", setupScript,
|
||||||
setupCmd.Dir = workDir
|
"--batch",
|
||||||
setupCmd.Env = append(os.Environ(),
|
"--token", apiToken,
|
||||||
"WALLARM_API_TOKEN="+apiToken,
|
"--cloud", cloudFromHost(apiHost),
|
||||||
"WALLARM_API_HOST="+apiHost,
|
"--host", apiHost,
|
||||||
"WALLARM_LABELS="+labels,
|
|
||||||
"WALLARM_ACCEPT_EULA=true",
|
|
||||||
)
|
)
|
||||||
// Pipe token + host to handle interactive prompts
|
setupCmd.Dir = workDir
|
||||||
setupCmd.Stdin = strings.NewReader(apiToken + "\n" + apiHost + "\n")
|
|
||||||
|
|
||||||
logFile, err := os.Create(filepath.Join(workDir, "install.log"))
|
logFile, err := os.Create(filepath.Join(workDir, "install.log"))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
|
@ -247,3 +244,14 @@ func installNginx() {
|
||||||
exec.Command("apt-get", "update", "-qq").Run()
|
exec.Command("apt-get", "update", "-qq").Run()
|
||||||
exec.Command("apt-get", "install", "-y", "-qq", "nginx").Run()
|
exec.Command("apt-get", "install", "-y", "-qq", "nginx").Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// cloudFromHost maps API host to cloud region code (US/EU/ME).
|
||||||
|
func cloudFromHost(host string) string {
|
||||||
|
if strings.Contains(host, "us1") {
|
||||||
|
return "US"
|
||||||
|
}
|
||||||
|
if strings.Contains(host, "me1") {
|
||||||
|
return "ME"
|
||||||
|
}
|
||||||
|
return "EU"
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue