41 lines
1.7 KiB
Go
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
|
|
}
|