Files
forge-tools-proxmox/internal/tools/patterns.go
T

41 lines
1.7 KiB
Go

package tools
import (
"strings"
)
// patterns.go — доменные forge-probe эмиттеры proxmox-модуля. Механика probe
// (wrapProbe/registerPatternTool/isProbe, флаг поддержки) — в forge-toolkit.
//
// Тулы эмитируют КАНОНИЧЕСКИЙ паттерн ресурса. ВАЖНО: паттерн первым
// компонентом несёт `host=<alias>` — только так permission-правила оператора
// могут различить один и тот же vmid/node на разных гипервизорах (коллизия
// VMID). Пример правила:
//
// patterns:
// - match: "proxmox__vm_delete"
// pattern: "host=pve1 node=pve vmid=500"
// then: ask
//
// Для мутаций always НЕ эмитим: каждый деструктивный вызов — отдельный ask
// (никакого авто-одобрения по префиксу без явного allow у оператора).
// vmPatterns — паттерн ресурса для VM/CT-операции: host + node + vmid.
func vmPatterns(args map[string]any) (patterns, always []string) {
var b strings.Builder
b.WriteString("host=" + getString(args, "host", ""))
if n := getString(args, "node", ""); n != "" {
b.WriteString(" node=" + n)
}
if v := getString(args, "vmid", ""); v != "" {
b.WriteString(" vmid=" + v)
}
return []string{b.String()}, nil
}
// nodePatterns — паттерн для операции уровня ноды: host + node.
func nodePatterns(args map[string]any) (patterns, always []string) {
p := "host=" + getString(args, "host", "") + " node=" + getString(args, "node", "")
return []string{p}, nil
}