@calltelemetry/ct-lab-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +309 -0
- package/dist/bin/ct-lab-mcp.d.ts +60 -0
- package/dist/bin/ct-lab-mcp.d.ts.map +1 -0
- package/dist/bin/ct-lab-mcp.js +261 -0
- package/dist/bin/ct-lab-mcp.js.map +1 -0
- package/dist/bin/proxmox-mcp.d.ts +58 -0
- package/dist/bin/proxmox-mcp.d.ts.map +1 -0
- package/dist/bin/proxmox-mcp.js +248 -0
- package/dist/bin/proxmox-mcp.js.map +1 -0
- package/dist/src/appliance/commands.d.ts +33 -0
- package/dist/src/appliance/commands.d.ts.map +1 -0
- package/dist/src/appliance/commands.js +241 -0
- package/dist/src/appliance/commands.js.map +1 -0
- package/dist/src/appliance/executor.d.ts +34 -0
- package/dist/src/appliance/executor.d.ts.map +1 -0
- package/dist/src/appliance/executor.js +214 -0
- package/dist/src/appliance/executor.js.map +1 -0
- package/dist/src/appliance/index.d.ts +8 -0
- package/dist/src/appliance/index.d.ts.map +1 -0
- package/dist/src/appliance/index.js +8 -0
- package/dist/src/appliance/index.js.map +1 -0
- package/dist/src/appliance/mock.d.ts +66 -0
- package/dist/src/appliance/mock.d.ts.map +1 -0
- package/dist/src/appliance/mock.js +339 -0
- package/dist/src/appliance/mock.js.map +1 -0
- package/dist/src/appliance/types.d.ts +83 -0
- package/dist/src/appliance/types.d.ts.map +1 -0
- package/dist/src/appliance/types.js +58 -0
- package/dist/src/appliance/types.js.map +1 -0
- package/dist/src/credentials/doppler.d.ts +25 -0
- package/dist/src/credentials/doppler.d.ts.map +1 -0
- package/dist/src/credentials/doppler.js +68 -0
- package/dist/src/credentials/doppler.js.map +1 -0
- package/dist/src/credentials/index.d.ts +4 -0
- package/dist/src/credentials/index.d.ts.map +1 -0
- package/dist/src/credentials/index.js +4 -0
- package/dist/src/credentials/index.js.map +1 -0
- package/dist/src/credentials/resolver.d.ts +36 -0
- package/dist/src/credentials/resolver.d.ts.map +1 -0
- package/dist/src/credentials/resolver.js +427 -0
- package/dist/src/credentials/resolver.js.map +1 -0
- package/dist/src/credentials/types.d.ts +73 -0
- package/dist/src/credentials/types.d.ts.map +1 -0
- package/dist/src/credentials/types.js +5 -0
- package/dist/src/credentials/types.js.map +1 -0
- package/dist/src/guardrails/index.d.ts +3 -0
- package/dist/src/guardrails/index.d.ts.map +1 -0
- package/dist/src/guardrails/index.js +3 -0
- package/dist/src/guardrails/index.js.map +1 -0
- package/dist/src/guardrails/safety.d.ts +45 -0
- package/dist/src/guardrails/safety.d.ts.map +1 -0
- package/dist/src/guardrails/safety.js +217 -0
- package/dist/src/guardrails/safety.js.map +1 -0
- package/dist/src/guardrails/types.d.ts +36 -0
- package/dist/src/guardrails/types.d.ts.map +1 -0
- package/dist/src/guardrails/types.js +20 -0
- package/dist/src/guardrails/types.js.map +1 -0
- package/dist/src/hypervisors/esxi/client.d.ts +103 -0
- package/dist/src/hypervisors/esxi/client.d.ts.map +1 -0
- package/dist/src/hypervisors/esxi/client.js +395 -0
- package/dist/src/hypervisors/esxi/client.js.map +1 -0
- package/dist/src/hypervisors/esxi/mock.d.ts +45 -0
- package/dist/src/hypervisors/esxi/mock.d.ts.map +1 -0
- package/dist/src/hypervisors/esxi/mock.js +202 -0
- package/dist/src/hypervisors/esxi/mock.js.map +1 -0
- package/dist/src/hypervisors/index.d.ts +10 -0
- package/dist/src/hypervisors/index.d.ts.map +1 -0
- package/dist/src/hypervisors/index.js +10 -0
- package/dist/src/hypervisors/index.js.map +1 -0
- package/dist/src/hypervisors/manager.d.ts +78 -0
- package/dist/src/hypervisors/manager.d.ts.map +1 -0
- package/dist/src/hypervisors/manager.js +415 -0
- package/dist/src/hypervisors/manager.js.map +1 -0
- package/dist/src/hypervisors/proxmox/client.d.ts +29 -0
- package/dist/src/hypervisors/proxmox/client.d.ts.map +1 -0
- package/dist/src/hypervisors/proxmox/client.js +278 -0
- package/dist/src/hypervisors/proxmox/client.js.map +1 -0
- package/dist/src/hypervisors/proxmox/mock.d.ts +17 -0
- package/dist/src/hypervisors/proxmox/mock.d.ts.map +1 -0
- package/dist/src/hypervisors/proxmox/mock.js +26 -0
- package/dist/src/hypervisors/proxmox/mock.js.map +1 -0
- package/dist/src/hypervisors/types.d.ts +159 -0
- package/dist/src/hypervisors/types.d.ts.map +1 -0
- package/dist/src/hypervisors/types.js +6 -0
- package/dist/src/hypervisors/types.js.map +1 -0
- package/dist/src/index.d.ts +19 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +19 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/proxmox/client.d.ts +37 -0
- package/dist/src/proxmox/client.d.ts.map +1 -0
- package/dist/src/proxmox/client.js +282 -0
- package/dist/src/proxmox/client.js.map +1 -0
- package/dist/src/proxmox/index.d.ts +53 -0
- package/dist/src/proxmox/index.d.ts.map +1 -0
- package/dist/src/proxmox/index.js +109 -0
- package/dist/src/proxmox/index.js.map +1 -0
- package/dist/src/proxmox/mock.d.ts +40 -0
- package/dist/src/proxmox/mock.d.ts.map +1 -0
- package/dist/src/proxmox/mock.js +362 -0
- package/dist/src/proxmox/mock.js.map +1 -0
- package/dist/src/proxmox/poller.d.ts +29 -0
- package/dist/src/proxmox/poller.d.ts.map +1 -0
- package/dist/src/proxmox/poller.js +107 -0
- package/dist/src/proxmox/poller.js.map +1 -0
- package/dist/src/server/index.d.ts +2 -0
- package/dist/src/server/index.d.ts.map +1 -0
- package/dist/src/server/index.js +2 -0
- package/dist/src/server/index.js.map +1 -0
- package/dist/src/server/mcp-server.d.ts +5 -0
- package/dist/src/server/mcp-server.d.ts.map +1 -0
- package/dist/src/server/mcp-server.js +5 -0
- package/dist/src/server/mcp-server.js.map +1 -0
- package/dist/src/server.d.ts +35 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +95 -0
- package/dist/src/server.js.map +1 -0
- package/dist/src/slot/gc.d.ts +42 -0
- package/dist/src/slot/gc.d.ts.map +1 -0
- package/dist/src/slot/gc.js +79 -0
- package/dist/src/slot/gc.js.map +1 -0
- package/dist/src/slot/index.d.ts +4 -0
- package/dist/src/slot/index.d.ts.map +1 -0
- package/dist/src/slot/index.js +4 -0
- package/dist/src/slot/index.js.map +1 -0
- package/dist/src/slot/manager.d.ts +92 -0
- package/dist/src/slot/manager.d.ts.map +1 -0
- package/dist/src/slot/manager.js +650 -0
- package/dist/src/slot/manager.js.map +1 -0
- package/dist/src/slot/types.d.ts +184 -0
- package/dist/src/slot/types.d.ts.map +1 -0
- package/dist/src/slot/types.js +67 -0
- package/dist/src/slot/types.js.map +1 -0
- package/dist/src/tools/appliance-exec.d.ts +81 -0
- package/dist/src/tools/appliance-exec.d.ts.map +1 -0
- package/dist/src/tools/appliance-exec.js +134 -0
- package/dist/src/tools/appliance-exec.js.map +1 -0
- package/dist/src/tools/claim-slot.d.ts +5 -0
- package/dist/src/tools/claim-slot.d.ts.map +1 -0
- package/dist/src/tools/claim-slot.js +5 -0
- package/dist/src/tools/claim-slot.js.map +1 -0
- package/dist/src/tools/index.d.ts +26 -0
- package/dist/src/tools/index.d.ts.map +1 -0
- package/dist/src/tools/index.js +63 -0
- package/dist/src/tools/index.js.map +1 -0
- package/dist/src/tools/list-hosts.d.ts +41 -0
- package/dist/src/tools/list-hosts.d.ts.map +1 -0
- package/dist/src/tools/list-hosts.js +91 -0
- package/dist/src/tools/list-hosts.js.map +1 -0
- package/dist/src/tools/list-inventory.d.ts +50 -0
- package/dist/src/tools/list-inventory.d.ts.map +1 -0
- package/dist/src/tools/list-inventory.js +112 -0
- package/dist/src/tools/list-inventory.js.map +1 -0
- package/dist/src/tools/list-slots.d.ts +5 -0
- package/dist/src/tools/list-slots.d.ts.map +1 -0
- package/dist/src/tools/list-slots.js +5 -0
- package/dist/src/tools/list-slots.js.map +1 -0
- package/dist/src/tools/provision-tools.d.ts +231 -0
- package/dist/src/tools/provision-tools.d.ts.map +1 -0
- package/dist/src/tools/provision-tools.js +289 -0
- package/dist/src/tools/provision-tools.js.map +1 -0
- package/dist/src/tools/release-slot.d.ts +5 -0
- package/dist/src/tools/release-slot.d.ts.map +1 -0
- package/dist/src/tools/release-slot.js +5 -0
- package/dist/src/tools/release-slot.js.map +1 -0
- package/dist/src/tools/slot-tools.d.ts +173 -0
- package/dist/src/tools/slot-tools.d.ts.map +1 -0
- package/dist/src/tools/slot-tools.js +296 -0
- package/dist/src/tools/slot-tools.js.map +1 -0
- package/dist/src/tools/vm-action.d.ts +189 -0
- package/dist/src/tools/vm-action.d.ts.map +1 -0
- package/dist/src/tools/vm-action.js +300 -0
- package/dist/src/tools/vm-action.js.map +1 -0
- package/dist/src/transports/index.d.ts +3 -0
- package/dist/src/transports/index.d.ts.map +1 -0
- package/dist/src/transports/index.js +3 -0
- package/dist/src/transports/index.js.map +1 -0
- package/dist/src/transports/sse.d.ts +38 -0
- package/dist/src/transports/sse.d.ts.map +1 -0
- package/dist/src/transports/sse.js +167 -0
- package/dist/src/transports/sse.js.map +1 -0
- package/dist/src/transports/stdio.d.ts +15 -0
- package/dist/src/transports/stdio.d.ts.map +1 -0
- package/dist/src/transports/stdio.js +34 -0
- package/dist/src/transports/stdio.js.map +1 -0
- package/dist/src/types/config.d.ts +17 -0
- package/dist/src/types/config.d.ts.map +1 -0
- package/dist/src/types/config.js +5 -0
- package/dist/src/types/config.js.map +1 -0
- package/dist/src/types/index.d.ts +4 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +4 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/mcp.d.ts +38 -0
- package/dist/src/types/mcp.d.ts.map +1 -0
- package/dist/src/types/mcp.js +46 -0
- package/dist/src/types/mcp.js.map +1 -0
- package/dist/src/types/proxmox.d.ts +181 -0
- package/dist/src/types/proxmox.d.ts.map +1 -0
- package/dist/src/types/proxmox.js +5 -0
- package/dist/src/types/proxmox.js.map +1 -0
- package/dist/src/types/slot.d.ts +5 -0
- package/dist/src/types/slot.d.ts.map +1 -0
- package/dist/src/types/slot.js +5 -0
- package/dist/src/types/slot.js.map +1 -0
- package/dist/src/utils/formatters.d.ts +71 -0
- package/dist/src/utils/formatters.d.ts.map +1 -0
- package/dist/src/utils/formatters.js +480 -0
- package/dist/src/utils/formatters.js.map +1 -0
- package/dist/src/utils/index.d.ts +6 -0
- package/dist/src/utils/index.d.ts.map +1 -0
- package/dist/src/utils/index.js +6 -0
- package/dist/src/utils/index.js.map +1 -0
- package/dist/src/utils/logger.d.ts +28 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +74 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/dist/src/utils/mutex.d.ts +32 -0
- package/dist/src/utils/mutex.d.ts.map +1 -0
- package/dist/src/utils/mutex.js +86 -0
- package/dist/src/utils/mutex.js.map +1 -0
- package/dist/src/utils/redact.d.ts +6 -0
- package/dist/src/utils/redact.d.ts.map +1 -0
- package/dist/src/utils/redact.js +6 -0
- package/dist/src/utils/redact.js.map +1 -0
- package/dist/src/utils/redactor.d.ts +50 -0
- package/dist/src/utils/redactor.d.ts.map +1 -0
- package/dist/src/utils/redactor.js +170 -0
- package/dist/src/utils/redactor.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safety Guardrails Engine
|
|
3
|
+
* Protects core infrastructure, persistent fixtures, and template VMs against disruptive or destructive operations.
|
|
4
|
+
* Enforces non-bypassable guardrails across Proxmox VE and VMware ESXi.
|
|
5
|
+
*/
|
|
6
|
+
import { ProtectedVmViolationError } from "./types.js";
|
|
7
|
+
export * from "./types.js";
|
|
8
|
+
export class SafetyGuardrailEngine {
|
|
9
|
+
protectedVmIds;
|
|
10
|
+
protectedNamePatterns;
|
|
11
|
+
protectedTags;
|
|
12
|
+
constructor(customProtectedVmIds = [], options = {}) {
|
|
13
|
+
// Standard protected core lab fixtures across Proxmox VE & VMware ESXi
|
|
14
|
+
this.protectedVmIds = new Set([
|
|
15
|
+
// Proxmox Core Fixtures
|
|
16
|
+
100, // OpenClaw1
|
|
17
|
+
101, // ctclaw
|
|
18
|
+
102, // 0.8.7-stable / import fixture
|
|
19
|
+
103, // CUBE voice gateways
|
|
20
|
+
104, // CUCM15-PMX-PUBLISHER
|
|
21
|
+
// VMware ESXi Core Fixtures
|
|
22
|
+
"CUCM14-01-6-30",
|
|
23
|
+
"CUCM15-01-6-29",
|
|
24
|
+
"CUCM15-02-6-30",
|
|
25
|
+
"CUCM-115Cluster1",
|
|
26
|
+
"CUBE-8000V-[SIP-LAB]-cube-lab",
|
|
27
|
+
"GH-Runner",
|
|
28
|
+
"LAB-K8S-192.168.125.118",
|
|
29
|
+
"CT-087-STABLE-TEMPLATE",
|
|
30
|
+
"CT-ALMALINUX9-TEMPLATE",
|
|
31
|
+
"CT-ALMALINUX9-MINI-TEMPLATE",
|
|
32
|
+
...customProtectedVmIds,
|
|
33
|
+
...(options.customProtectedVmIds || [])
|
|
34
|
+
]);
|
|
35
|
+
this.protectedNamePatterns = [
|
|
36
|
+
/^(cucm|cube|cat8000v|openclaw|ctclaw|infra|pve|gh-runner|lab-k8s)/i,
|
|
37
|
+
/(publisher|subscriber|golden|base-template|persistent)/i,
|
|
38
|
+
/^template-/i,
|
|
39
|
+
/cucm/i,
|
|
40
|
+
/cube/i,
|
|
41
|
+
/cat8000v/i,
|
|
42
|
+
/gh-runner/i,
|
|
43
|
+
/lab-k8s/i,
|
|
44
|
+
/almalinux.*template/i,
|
|
45
|
+
/stable.*template/i,
|
|
46
|
+
...(options.customProtectedPatterns || [])
|
|
47
|
+
];
|
|
48
|
+
this.protectedTags = new Set([
|
|
49
|
+
"protected",
|
|
50
|
+
"persistent",
|
|
51
|
+
"fixture",
|
|
52
|
+
"infra",
|
|
53
|
+
"cucm",
|
|
54
|
+
"cube",
|
|
55
|
+
"production",
|
|
56
|
+
"do-not-delete",
|
|
57
|
+
"runner",
|
|
58
|
+
"ci",
|
|
59
|
+
"k8s",
|
|
60
|
+
"golden",
|
|
61
|
+
"cat8000v",
|
|
62
|
+
"voice",
|
|
63
|
+
...(options.customProtectedTags || []).map((t) => t.toLowerCase().trim())
|
|
64
|
+
]);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Check whether a VM is considered protected by ID, template flag, name, tag, or note.
|
|
68
|
+
*/
|
|
69
|
+
isProtected(vm) {
|
|
70
|
+
const vmName = vm.name || `VM-${vm.vmid}`;
|
|
71
|
+
const vmidStr = String(vm.vmid).trim();
|
|
72
|
+
const vmidNum = typeof vm.vmid === "number" ? vm.vmid : parseInt(vmidStr, 10);
|
|
73
|
+
// 1. Check explicit protected VMID (number or string identifier)
|
|
74
|
+
if (this.protectedVmIds.has(vm.vmid) || this.protectedVmIds.has(vmidStr)) {
|
|
75
|
+
return {
|
|
76
|
+
protected: true,
|
|
77
|
+
reason: `VMID ${vm.vmid} is in the explicit protected core infrastructure list (e.g. CUCM/fixtures)`
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
// 2. Check numeric template VMID range (9000-9999) for Proxmox
|
|
81
|
+
if (!isNaN(vmidNum) && vmidNum >= 9000 && vmidNum <= 9999) {
|
|
82
|
+
return {
|
|
83
|
+
protected: true,
|
|
84
|
+
reason: `VMID ${vm.vmid} falls within the reserved template VMID range (9000-9999)`
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// 3. Check Proxmox/ESXi template flag
|
|
88
|
+
if (vm.template === true ||
|
|
89
|
+
vm.template === 1 ||
|
|
90
|
+
vm.template === "1" ||
|
|
91
|
+
vm.template === "true" ||
|
|
92
|
+
vm.isTemplate === true) {
|
|
93
|
+
return {
|
|
94
|
+
protected: true,
|
|
95
|
+
reason: `VM ${vm.vmid} ('${vmName}') is configured as a Proxmox VM template`
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
// 4. Check explicit isProtected flag
|
|
99
|
+
if (vm.isProtected === true) {
|
|
100
|
+
return {
|
|
101
|
+
protected: true,
|
|
102
|
+
reason: vm.protectionReason || `VM ${vm.vmid} ('${vmName}') has explicit protection flag enabled`
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
// 5. Check name patterns
|
|
106
|
+
if (vm.name) {
|
|
107
|
+
for (const pattern of this.protectedNamePatterns) {
|
|
108
|
+
if (pattern.test(vm.name)) {
|
|
109
|
+
return {
|
|
110
|
+
protected: true,
|
|
111
|
+
reason: `VM name '${vm.name}' matches protected pattern ${pattern}`
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// 6. Check protected tags
|
|
117
|
+
const tags = this.normalizeTags(vm.tags);
|
|
118
|
+
for (const tag of tags) {
|
|
119
|
+
if (this.protectedTags.has(tag)) {
|
|
120
|
+
return {
|
|
121
|
+
protected: true,
|
|
122
|
+
reason: `VM ${vm.vmid} contains protected tag '${tag}'`
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
// 7. Check protected annotations / notes
|
|
127
|
+
if (vm.notes) {
|
|
128
|
+
const notesLower = vm.notes.toLowerCase();
|
|
129
|
+
if (notesLower.includes("never destroy") ||
|
|
130
|
+
notesLower.includes("do not stop") ||
|
|
131
|
+
notesLower.includes("do not delete") ||
|
|
132
|
+
notesLower.includes("protected") ||
|
|
133
|
+
notesLower.includes("core server") ||
|
|
134
|
+
notesLower.includes("required for tests") ||
|
|
135
|
+
notesLower.includes("core infrastructure")) {
|
|
136
|
+
return {
|
|
137
|
+
protected: true,
|
|
138
|
+
reason: `VM ${vm.vmid} notes indicate protected status ('${vm.notes.trim()}')`
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return { protected: false };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Validates if the requested action is permitted on the target VM.
|
|
146
|
+
* Throws ProtectedVmViolationError if a destructive/disruptive action is attempted on a protected VM.
|
|
147
|
+
* This check is NON-BYPASSABLE, even if force === true.
|
|
148
|
+
*/
|
|
149
|
+
validateAction(vm, action, _force = false) {
|
|
150
|
+
const normalizedAction = (action || "").toLowerCase().trim();
|
|
151
|
+
const vmName = vm.name || `VM-${vm.vmid}`;
|
|
152
|
+
// Read-only actions and start (power on) are permitted
|
|
153
|
+
const isSafeAction = ["status", "config", "rrddata", "start"].includes(normalizedAction);
|
|
154
|
+
if (isSafeAction) {
|
|
155
|
+
return;
|
|
156
|
+
}
|
|
157
|
+
const protection = this.isProtected(vm);
|
|
158
|
+
if (protection.protected) {
|
|
159
|
+
// Destructive and disruptive actions are ALWAYS rejected on protected VMs
|
|
160
|
+
const isDisruptiveOrDestructive = [
|
|
161
|
+
"stop",
|
|
162
|
+
"shutdown",
|
|
163
|
+
"reboot",
|
|
164
|
+
"reset",
|
|
165
|
+
"suspend",
|
|
166
|
+
"destroy",
|
|
167
|
+
"delete",
|
|
168
|
+
"force-stop"
|
|
169
|
+
].includes(normalizedAction);
|
|
170
|
+
if (isDisruptiveOrDestructive) {
|
|
171
|
+
throw new ProtectedVmViolationError(vm.vmid, vmName, normalizedAction, protection.reason || "Protected infrastructure policy");
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Helper to normalize tags from array or delimited string.
|
|
177
|
+
*/
|
|
178
|
+
normalizeTags(tags) {
|
|
179
|
+
if (!tags)
|
|
180
|
+
return [];
|
|
181
|
+
if (Array.isArray(tags)) {
|
|
182
|
+
return tags.map((t) => t.toLowerCase().trim()).filter(Boolean);
|
|
183
|
+
}
|
|
184
|
+
return tags
|
|
185
|
+
.split(/[;, ]+/)
|
|
186
|
+
.map((t) => t.toLowerCase().trim())
|
|
187
|
+
.filter(Boolean);
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Add additional protected VMID at runtime.
|
|
191
|
+
*/
|
|
192
|
+
addProtectedVmId(vmid) {
|
|
193
|
+
this.protectedVmIds.add(vmid);
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get list of all explicitly protected VMIDs.
|
|
197
|
+
*/
|
|
198
|
+
getProtectedVmIds() {
|
|
199
|
+
return Array.from(this.protectedVmIds).sort((a, b) => {
|
|
200
|
+
if (typeof a === "number" && typeof b === "number")
|
|
201
|
+
return a - b;
|
|
202
|
+
return String(a).localeCompare(String(b));
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Default global instance of SafetyGuardrailEngine
|
|
208
|
+
*/
|
|
209
|
+
export const defaultSafetyGuardrailEngine = new SafetyGuardrailEngine();
|
|
210
|
+
/**
|
|
211
|
+
* Convenience function conforming to PROJECT.md interface contract:
|
|
212
|
+
* assertActionPermitted(vm, action, force)
|
|
213
|
+
*/
|
|
214
|
+
export function assertActionPermitted(vm, action, force = false, engine = defaultSafetyGuardrailEngine) {
|
|
215
|
+
engine.validateAction(vm, action, force);
|
|
216
|
+
}
|
|
217
|
+
//# sourceMappingURL=safety.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safety.js","sourceRoot":"","sources":["../../../src/guardrails/safety.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAGL,yBAAyB,EAG1B,MAAM,YAAY,CAAC;AAEpB,cAAc,YAAY,CAAC;AAE3B,MAAM,OAAO,qBAAqB;IACxB,cAAc,CAAuB;IACrC,qBAAqB,CAAW;IAChC,aAAa,CAAc;IAEnC,YAAY,uBAA4C,EAAE,EAAE,UAAkC,EAAE;QAC9F,uEAAuE;QACvE,IAAI,CAAC,cAAc,GAAG,IAAI,GAAG,CAAC;YAC5B,wBAAwB;YACxB,GAAG,EAAE,YAAY;YACjB,GAAG,EAAE,SAAS;YACd,GAAG,EAAE,gCAAgC;YACrC,GAAG,EAAE,sBAAsB;YAC3B,GAAG,EAAE,uBAAuB;YAE5B,4BAA4B;YAC5B,gBAAgB;YAChB,gBAAgB;YAChB,gBAAgB;YAChB,kBAAkB;YAClB,+BAA+B;YAC/B,WAAW;YACX,yBAAyB;YACzB,wBAAwB;YACxB,wBAAwB;YACxB,6BAA6B;YAE7B,GAAG,oBAAoB;YACvB,GAAG,CAAC,OAAO,CAAC,oBAAoB,IAAI,EAAE,CAAC;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,GAAG;YAC3B,oEAAoE;YACpE,yDAAyD;YACzD,aAAa;YACb,OAAO;YACP,OAAO;YACP,WAAW;YACX,YAAY;YACZ,UAAU;YACV,sBAAsB;YACtB,mBAAmB;YACnB,GAAG,CAAC,OAAO,CAAC,uBAAuB,IAAI,EAAE,CAAC;SAC3C,CAAC;QAEF,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,CAAC;YAC3B,WAAW;YACX,YAAY;YACZ,SAAS;YACT,OAAO;YACP,MAAM;YACN,MAAM;YACN,YAAY;YACZ,eAAe;YACf,QAAQ;YACR,IAAI;YACJ,KAAK;YACL,QAAQ;YACR,UAAU;YACV,OAAO;YACP,GAAG,CAAC,OAAO,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;SAC1E,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,EAAY;QACtB,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,OAAO,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE9E,iEAAiE;QACjE,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;YACzE,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,6EAA6E;aACrG,CAAC;QACJ,CAAC;QAED,+DAA+D;QAC/D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YAC1D,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,4DAA4D;aACpF,CAAC;QACJ,CAAC;QAED,sCAAsC;QACtC,IACE,EAAE,CAAC,QAAQ,KAAK,IAAI;YACpB,EAAE,CAAC,QAAQ,KAAK,CAAC;YACjB,EAAE,CAAC,QAAQ,KAAK,GAAG;YACnB,EAAE,CAAC,QAAQ,KAAK,MAAM;YACtB,EAAE,CAAC,UAAU,KAAK,IAAI,EACtB,CAAC;YACD,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,MAAM,MAAM,2CAA2C;aAC7E,CAAC;QACJ,CAAC;QAED,qCAAqC;QACrC,IAAI,EAAE,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC5B,OAAO;gBACL,SAAS,EAAE,IAAI;gBACf,MAAM,EAAE,EAAE,CAAC,gBAAgB,IAAI,MAAM,EAAE,CAAC,IAAI,MAAM,MAAM,yCAAyC;aAClG,CAAC;QACJ,CAAC;QAED,yBAAyB;QACzB,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC;YACZ,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;gBACjD,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC1B,OAAO;wBACL,SAAS,EAAE,IAAI;wBACf,MAAM,EAAE,YAAY,EAAE,CAAC,IAAI,+BAA+B,OAAO,EAAE;qBACpE,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACzC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,IAAI,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChC,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,4BAA4B,GAAG,GAAG;iBACxD,CAAC;YACJ,CAAC;QACH,CAAC;QAED,yCAAyC;QACzC,IAAI,EAAE,CAAC,KAAK,EAAE,CAAC;YACb,MAAM,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC1C,IACE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACpC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAClC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;gBACpC,UAAU,CAAC,QAAQ,CAAC,WAAW,CAAC;gBAChC,UAAU,CAAC,QAAQ,CAAC,aAAa,CAAC;gBAClC,UAAU,CAAC,QAAQ,CAAC,oBAAoB,CAAC;gBACzC,UAAU,CAAC,QAAQ,CAAC,qBAAqB,CAAC,EAC1C,CAAC;gBACD,OAAO;oBACL,SAAS,EAAE,IAAI;oBACf,MAAM,EAAE,MAAM,EAAE,CAAC,IAAI,sCAAsC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI;iBAC/E,CAAC;YACJ,CAAC;QACH,CAAC;QAED,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,EAAY,EAAE,MAAoB,EAAE,MAAM,GAAG,KAAK;QAC/D,MAAM,gBAAgB,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;QAC7D,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC;QAE1C,uDAAuD;QACvD,MAAM,YAAY,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QACzF,IAAI,YAAY,EAAE,CAAC;YACjB,OAAO;QACT,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;YACzB,0EAA0E;YAC1E,MAAM,yBAAyB,GAAG;gBAChC,MAAM;gBACN,UAAU;gBACV,QAAQ;gBACR,OAAO;gBACP,SAAS;gBACT,SAAS;gBACT,QAAQ;gBACR,YAAY;aACb,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;YAE7B,IAAI,yBAAyB,EAAE,CAAC;gBAC9B,MAAM,IAAI,yBAAyB,CACjC,EAAE,CAAC,IAAI,EACP,MAAM,EACN,gBAAgB,EAChB,UAAU,CAAC,MAAM,IAAI,iCAAiC,CACvD,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,IAAwB;QAC5C,IAAI,CAAC,IAAI;YAAE,OAAO,EAAE,CAAC;QACrB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACjE,CAAC;QACD,OAAO,IAAI;aACR,KAAK,CAAC,QAAQ,CAAC;aACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;aAClC,MAAM,CAAC,OAAO,CAAC,CAAC;IACrB,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,IAAqB;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACnD,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAExE;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAY,EACZ,MAAoB,EACpB,KAAK,GAAG,KAAK,EACb,SAAgC,4BAA4B;IAE5D,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safety Guardrails Engine Data Types
|
|
3
|
+
*/
|
|
4
|
+
import { HostId } from "../slot/types.js";
|
|
5
|
+
export interface VmTarget {
|
|
6
|
+
vmid: number | string;
|
|
7
|
+
name?: string;
|
|
8
|
+
template?: boolean | number | string;
|
|
9
|
+
tags?: string[] | string;
|
|
10
|
+
notes?: string;
|
|
11
|
+
hostId?: HostId;
|
|
12
|
+
hypervisorType?: "proxmox" | "esxi";
|
|
13
|
+
isTemplate?: boolean;
|
|
14
|
+
isProtected?: boolean;
|
|
15
|
+
protectionReason?: string;
|
|
16
|
+
}
|
|
17
|
+
export type VmActionType = "status" | "config" | "rrddata" | "start" | "stop" | "shutdown" | "reboot" | "reset" | "suspend" | "destroy" | "delete" | "clone" | string;
|
|
18
|
+
export declare class ProtectedVmViolationError extends Error {
|
|
19
|
+
readonly code = "PROTECTED_VM_VIOLATION";
|
|
20
|
+
readonly vmid: number | string;
|
|
21
|
+
readonly vmName: string;
|
|
22
|
+
readonly action: string;
|
|
23
|
+
readonly reason: string;
|
|
24
|
+
constructor(vmid: number | string, vmName: string, action: string, reason: string);
|
|
25
|
+
}
|
|
26
|
+
export interface ProtectionCheckResult {
|
|
27
|
+
protected: boolean;
|
|
28
|
+
reason?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface SafetyGuardrailOptions {
|
|
31
|
+
customProtectedVmIds?: (number | string)[];
|
|
32
|
+
customProtectedNames?: string[];
|
|
33
|
+
customProtectedPatterns?: RegExp[];
|
|
34
|
+
customProtectedTags?: string[];
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/guardrails/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,OAAO,GACP,MAAM,GACN,UAAU,GACV,QAAQ,GACR,OAAO,GACP,SAAS,GACT,SAAS,GACT,QAAQ,GACR,OAAO,GACP,MAAM,CAAC;AAEX,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,IAAI,4BAA4B;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CASlF;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,sBAAsB;IACrC,oBAAoB,CAAC,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC3C,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,CAAC,EAAE,MAAM,EAAE,CAAC;IACnC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;CAChC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Safety Guardrails Engine Data Types
|
|
3
|
+
*/
|
|
4
|
+
export class ProtectedVmViolationError extends Error {
|
|
5
|
+
code = "PROTECTED_VM_VIOLATION";
|
|
6
|
+
vmid;
|
|
7
|
+
vmName;
|
|
8
|
+
action;
|
|
9
|
+
reason;
|
|
10
|
+
constructor(vmid, vmName, action, reason) {
|
|
11
|
+
const message = `PROTECTED_VM_VIOLATION: Cannot execute '${action}' on protected VM ${vmid} ('${vmName}'). Reason: ${reason}. Destructive/disruptive operations on protected infrastructure are strictly forbidden.`;
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = "ProtectedVmViolationError";
|
|
14
|
+
this.vmid = vmid;
|
|
15
|
+
this.vmName = vmName;
|
|
16
|
+
this.action = action;
|
|
17
|
+
this.reason = reason;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/guardrails/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgCH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IACzC,IAAI,GAAG,wBAAwB,CAAC;IAChC,IAAI,CAAkB;IACtB,MAAM,CAAS;IACf,MAAM,CAAS;IACf,MAAM,CAAS;IAExB,YAAY,IAAqB,EAAE,MAAc,EAAE,MAAc,EAAE,MAAc;QAC/E,MAAM,OAAO,GAAG,2CAA2C,MAAM,qBAAqB,IAAI,MAAM,MAAM,eAAe,MAAM,yFAAyF,CAAC;QACrN,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* VMware ESXi Hypervisor Driver
|
|
3
|
+
* Implements IHypervisorDriver for VMware ESXi standalone and vCenter managed hosts.
|
|
4
|
+
* Supports govc CLI execution and VMware REST/SOAP API fallback.
|
|
5
|
+
*/
|
|
6
|
+
import { IHypervisorDriver, HostCapacity, UnifiedVmRecord, CloneVmParams, ProvisionVmResult } from "../types.js";
|
|
7
|
+
import { EsxiHostConfig } from "../../credentials/types.js";
|
|
8
|
+
import { SafetyGuardrailEngine } from "../../guardrails/safety.js";
|
|
9
|
+
export interface EsxiVmSummary {
|
|
10
|
+
name: string;
|
|
11
|
+
path: string;
|
|
12
|
+
powerState: "poweredOn" | "poweredOff" | "suspended" | "unknown";
|
|
13
|
+
memoryMb: number;
|
|
14
|
+
cpuCores: number;
|
|
15
|
+
ipAddress?: string;
|
|
16
|
+
isTemplate: boolean;
|
|
17
|
+
annotation?: string;
|
|
18
|
+
tags?: string[];
|
|
19
|
+
}
|
|
20
|
+
export interface IEsxiClient {
|
|
21
|
+
readonly hostConfig: EsxiHostConfig;
|
|
22
|
+
getHostSummary(): Promise<{
|
|
23
|
+
cpuCores: number;
|
|
24
|
+
cpuUsageMhz?: number;
|
|
25
|
+
memoryTotalMb: number;
|
|
26
|
+
memoryUsedMb: number;
|
|
27
|
+
datastoreTotalGb: number;
|
|
28
|
+
datastoreFreeGb: number;
|
|
29
|
+
}>;
|
|
30
|
+
listVms(): Promise<EsxiVmSummary[]>;
|
|
31
|
+
getVm(vmName: string): Promise<EsxiVmSummary | null>;
|
|
32
|
+
cloneVm(sourceVmName: string, targetVmName: string, options?: {
|
|
33
|
+
memoryMb?: number;
|
|
34
|
+
cpuCores?: number;
|
|
35
|
+
datastore?: string;
|
|
36
|
+
network?: string;
|
|
37
|
+
}): Promise<{
|
|
38
|
+
success: boolean;
|
|
39
|
+
taskRef?: string;
|
|
40
|
+
vmName: string;
|
|
41
|
+
}>;
|
|
42
|
+
startVm(vmName: string): Promise<void>;
|
|
43
|
+
stopVm(vmName: string, force?: boolean): Promise<void>;
|
|
44
|
+
rebootVm(vmName: string): Promise<void>;
|
|
45
|
+
destroyVm(vmName: string): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Real govc execution client
|
|
49
|
+
*/
|
|
50
|
+
export declare class GovcClient implements IEsxiClient {
|
|
51
|
+
readonly hostConfig: EsxiHostConfig;
|
|
52
|
+
constructor(hostConfig: EsxiHostConfig);
|
|
53
|
+
private getGovcEnv;
|
|
54
|
+
private execGovc;
|
|
55
|
+
getHostSummary(): Promise<{
|
|
56
|
+
cpuCores: number;
|
|
57
|
+
cpuUsageMhz?: number;
|
|
58
|
+
memoryTotalMb: number;
|
|
59
|
+
memoryUsedMb: number;
|
|
60
|
+
datastoreTotalGb: number;
|
|
61
|
+
datastoreFreeGb: number;
|
|
62
|
+
}>;
|
|
63
|
+
listVms(): Promise<EsxiVmSummary[]>;
|
|
64
|
+
getVm(vmName: string): Promise<EsxiVmSummary | null>;
|
|
65
|
+
cloneVm(sourceVmName: string, targetVmName: string, options?: {
|
|
66
|
+
memoryMb?: number;
|
|
67
|
+
cpuCores?: number;
|
|
68
|
+
datastore?: string;
|
|
69
|
+
network?: string;
|
|
70
|
+
}): Promise<{
|
|
71
|
+
success: boolean;
|
|
72
|
+
taskRef?: string;
|
|
73
|
+
vmName: string;
|
|
74
|
+
}>;
|
|
75
|
+
startVm(vmName: string): Promise<void>;
|
|
76
|
+
stopVm(vmName: string, force?: boolean): Promise<void>;
|
|
77
|
+
rebootVm(vmName: string): Promise<void>;
|
|
78
|
+
destroyVm(vmName: string): Promise<void>;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* VMware ESXi Hypervisor Driver implementing polymorphic IHypervisorDriver
|
|
82
|
+
*/
|
|
83
|
+
export declare class EsxiDriver implements IHypervisorDriver {
|
|
84
|
+
readonly hostName: string;
|
|
85
|
+
readonly hypervisorType: "esxi";
|
|
86
|
+
readonly hostConfig: EsxiHostConfig;
|
|
87
|
+
private client;
|
|
88
|
+
private safetyEngine;
|
|
89
|
+
constructor(hostConfig: EsxiHostConfig, client?: IEsxiClient, safetyEngine?: SafetyGuardrailEngine);
|
|
90
|
+
get rawClient(): IEsxiClient;
|
|
91
|
+
getHostCapacity(): Promise<HostCapacity>;
|
|
92
|
+
listVms(): Promise<UnifiedVmRecord[]>;
|
|
93
|
+
getVm(vmIdOrName: string | number): Promise<UnifiedVmRecord | null>;
|
|
94
|
+
cloneVm(params: CloneVmParams): Promise<ProvisionVmResult>;
|
|
95
|
+
startVm(vmIdOrName: string | number): Promise<void>;
|
|
96
|
+
stopVm(vmIdOrName: string | number, force?: boolean): Promise<void>;
|
|
97
|
+
rebootVm(vmIdOrName: string | number): Promise<void>;
|
|
98
|
+
destroyVm(vmIdOrName: string | number): Promise<void>;
|
|
99
|
+
private isProtectedVmName;
|
|
100
|
+
private validateSafety;
|
|
101
|
+
private mapToUnifiedVm;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../../src/hypervisors/esxi/client.ts"],"names":[],"mappings":"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"}
|