Files
omnichannel-configserver-mcp/internal/tools/patterns.go
T

71 lines
2.6 KiB
Go

package tools
import (
"strconv"
"strings"
)
// patterns.go — доменные эмиттеры probe-паттернов разрешений для omnichannel-configserver-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
}