Initial commit: forge-tools-proxmox — MCP-сервер для Proxmox VE
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
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
|
||||
}
|
||||
Reference in New Issue
Block a user