71 lines
2.6 KiB
Go
71 lines
2.6 KiB
Go
package tools
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// patterns.go — доменные эмиттеры probe-паттернов разрешений для omnichannel-mcp.
|
|
//
|
|
// Канонический паттерн несёт алиас сервера и ресурс, чтобы мультисерверная
|
|
// политика оператора могла различать стенды:
|
|
//
|
|
// server=<alias> app=<id>
|
|
// server=<alias> app=<id> file=<filename>
|
|
// server=<alias> version=<id>
|
|
// server=<alias> release
|
|
//
|
|
// «always» не эмитим: каждая разрушительная операция должна получать отдельный
|
|
// ask/allow у оператора (как в proxmox-модуле).
|
|
|
|
// effectiveServer возвращает алиас сервера для паттерна: явный аргумент либо
|
|
// default из конфига. Без конфига — "default".
|
|
func effectiveServer(args map[string]any) string {
|
|
if s := getString(args, "server", ""); s != "" {
|
|
return s
|
|
}
|
|
if m := manager(); m != nil {
|
|
if cfg, _, err := m.Config(configPathArg(args)); err == nil && cfg.Default != "" {
|
|
return cfg.Default
|
|
}
|
|
}
|
|
return "default"
|
|
}
|
|
|
|
func serverPart(args map[string]any) string { return "server=" + effectiveServer(args) }
|
|
|
|
// appPatterns — паттерн ресурса-приложения (deploy/restart/down/migrate/...).
|
|
func appPatterns(args map[string]any) ([]string, []string) {
|
|
parts := []string{serverPart(args)}
|
|
if id := getInt(args, "app_id", 0); id > 0 {
|
|
parts = append(parts, "app="+strconv.Itoa(id))
|
|
}
|
|
return []string{strings.Join(parts, " ")}, nil
|
|
}
|
|
|
|
// envPatterns — паттерн env-файла (set_env/restore_env_version).
|
|
func envPatterns(args map[string]any) ([]string, []string) {
|
|
parts := []string{serverPart(args)}
|
|
if id := getInt(args, "app_id", 0); id > 0 {
|
|
parts = append(parts, "app="+strconv.Itoa(id))
|
|
}
|
|
if fn := getString(args, "filename", ""); fn != "" {
|
|
parts = append(parts, "file="+fn)
|
|
}
|
|
return []string{strings.Join(parts, " ")}, nil
|
|
}
|
|
|
|
// versionPatterns — паттерн версии конфигурации (restore_compose).
|
|
func versionPatterns(args map[string]any) ([]string, []string) {
|
|
parts := []string{serverPart(args)}
|
|
if id := getInt(args, "version_id", 0); id > 0 {
|
|
parts = append(parts, "version="+strconv.Itoa(id))
|
|
}
|
|
return []string{strings.Join(parts, " ")}, nil
|
|
}
|
|
|
|
// releasePatterns — паттерн операций релиза/развёртывания.
|
|
func releasePatterns(args map[string]any) ([]string, []string) {
|
|
return []string{serverPart(args) + " release"}, nil
|
|
}
|