Files
ClusterCanvas/service/internal/settings/path.go
T
Squid 32af91fd30 Add per-node action groups with schedules, runs, and logs.
Let operators manage ordered action groups on each host, run them manually or on a schedule over SSH, and inspect disk-backed JSON run logs from a node detail UI.
2026-07-19 20:01:11 +02:00

74 lines
1.8 KiB
Go

package settings
import (
"fmt"
"os"
"path/filepath"
"strings"
)
const (
DefaultConfigDir = "/etc/ClusterCanvas"
ConfigDirEnvVar = "CLUSTERCANVAS_CONFIG_DIR"
ConfigKeyEnvVar = "CLUSTERCANVAS_CONFIG_KEY"
SettingsFileName = "settings.json"
SecretsFileName = "secrets.enc"
PasswordsFileName = "passwords.enc"
SessionsFileName = "sessions.enc"
NodesFileName = "nodes.json"
NodeKeysFileName = "node-keys.enc"
NodeAuditFileName = "node-audit.json"
AuthAuditFileName = "auth-audit.json"
ActionsFileName = "actions.json"
NodeActionGroupsFileName = "node-action-groups.json"
ActionLogsDirName = "action-logs"
)
// ResolveDir returns the config directory using precedence:
// 1. flagValue (-configdir), if non-empty
// 2. CLUSTERCANVAS_CONFIG_DIR, if set
// 3. /etc/ClusterCanvas
//
// Leading ~/ is expanded to the user home directory.
func ResolveDir(flagValue string) (string, error) {
candidate := strings.TrimSpace(flagValue)
if candidate == "" {
candidate = strings.TrimSpace(os.Getenv(ConfigDirEnvVar))
}
if candidate == "" {
candidate = DefaultConfigDir
}
expanded, err := expandHome(candidate)
if err != nil {
return "", err
}
return filepath.Clean(expanded), nil
}
func expandHome(path string) (string, error) {
if path == "~" {
homeDirectory, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("expand home directory: %w", err)
}
return homeDirectory, nil
}
if strings.HasPrefix(path, "~/") {
homeDirectory, err := os.UserHomeDir()
if err != nil {
return "", fmt.Errorf("expand home directory: %w", err)
}
return filepath.Join(homeDirectory, path[2:]), nil
}
return path, nil
}
func ensureConfigDir(dir string) error {
if err := os.MkdirAll(dir, 0o750); err != nil {
return fmt.Errorf("create config dir %q: %w", dir, err)
}
return nil
}