package tools import ( "strings" ) // patterns.go — доменные forge-probe эмиттеры proxmox-модуля. Механика probe // (wrapProbe/registerPatternTool/isProbe, флаг поддержки) — в forge-toolkit. // // Тулы эмитируют КАНОНИЧЕСКИЙ паттерн ресурса. ВАЖНО: паттерн первым // компонентом несёт `host=` — только так 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 }