@bldg-7/proxmox-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 +1033 -0
- package/dist/client/proxmox.d.ts +14 -0
- package/dist/client/proxmox.d.ts.map +1 -0
- package/dist/client/proxmox.js +82 -0
- package/dist/client/proxmox.js.map +1 -0
- package/dist/config/index.d.ts +4 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +24 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/schema.d.ts +31 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +32 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/formatters/index.d.ts +42 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +85 -0
- package/dist/formatters/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/middleware/index.d.ts +41 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +69 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +2 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/resources/index.d.ts +2 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +2 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/schemas/backup.d.ts +101 -0
- package/dist/schemas/backup.d.ts.map +1 -0
- package/dist/schemas/backup.js +43 -0
- package/dist/schemas/backup.js.map +1 -0
- package/dist/schemas/disk.d.ts +144 -0
- package/dist/schemas/disk.d.ts.map +1 -0
- package/dist/schemas/disk.js +60 -0
- package/dist/schemas/disk.js.map +1 -0
- package/dist/schemas/index.d.ts +7 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/network.d.ts +140 -0
- package/dist/schemas/network.d.ts.map +1 -0
- package/dist/schemas/network.js +56 -0
- package/dist/schemas/network.js.map +1 -0
- package/dist/schemas/node.d.ts +16 -0
- package/dist/schemas/node.d.ts.map +1 -0
- package/dist/schemas/node.js +12 -0
- package/dist/schemas/node.js.map +1 -0
- package/dist/schemas/snapshot.d.ts +116 -0
- package/dist/schemas/snapshot.d.ts.map +1 -0
- package/dist/schemas/snapshot.js +34 -0
- package/dist/schemas/snapshot.js.map +1 -0
- package/dist/schemas/vm.d.ts +330 -0
- package/dist/schemas/vm.d.ts.map +1 -0
- package/dist/schemas/vm.js +111 -0
- package/dist/schemas/vm.js.map +1 -0
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +142 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/backup.d.ts +35 -0
- package/dist/tools/backup.d.ts.map +1 -0
- package/dist/tools/backup.js +210 -0
- package/dist/tools/backup.js.map +1 -0
- package/dist/tools/cluster.d.ts +15 -0
- package/dist/tools/cluster.d.ts.map +1 -0
- package/dist/tools/cluster.js +82 -0
- package/dist/tools/cluster.js.map +1 -0
- package/dist/tools/command.d.ts +6 -0
- package/dist/tools/command.d.ts.map +1 -0
- package/dist/tools/command.js +26 -0
- package/dist/tools/command.js.map +1 -0
- package/dist/tools/disk.d.ts +45 -0
- package/dist/tools/disk.d.ts.map +1 -0
- package/dist/tools/disk.js +243 -0
- package/dist/tools/disk.js.map +1 -0
- package/dist/tools/index.d.ts +12 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +20 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/network.d.ts +35 -0
- package/dist/tools/network.d.ts.map +1 -0
- package/dist/tools/network.js +270 -0
- package/dist/tools/network.js.map +1 -0
- package/dist/tools/node.d.ts +15 -0
- package/dist/tools/node.d.ts.map +1 -0
- package/dist/tools/node.js +73 -0
- package/dist/tools/node.js.map +1 -0
- package/dist/tools/registry.d.ts +12 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +87 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/snapshot.d.ts +45 -0
- package/dist/tools/snapshot.d.ts.map +1 -0
- package/dist/tools/snapshot.js +249 -0
- package/dist/tools/snapshot.js.map +1 -0
- package/dist/tools/vm-create.d.ts +8 -0
- package/dist/tools/vm-create.d.ts.map +1 -0
- package/dist/tools/vm-create.js +129 -0
- package/dist/tools/vm-create.js.map +1 -0
- package/dist/tools/vm-lifecycle.d.ts +67 -0
- package/dist/tools/vm-lifecycle.d.ts.map +1 -0
- package/dist/tools/vm-lifecycle.js +319 -0
- package/dist/tools/vm-lifecycle.js.map +1 -0
- package/dist/tools/vm-modify.d.ts +25 -0
- package/dist/tools/vm-modify.d.ts.map +1 -0
- package/dist/tools/vm-modify.js +155 -0
- package/dist/tools/vm-modify.js.map +1 -0
- package/dist/tools/vm-query.d.ts +20 -0
- package/dist/tools/vm-query.d.ts.map +1 -0
- package/dist/tools/vm-query.js +166 -0
- package/dist/tools/vm-query.js.map +1 -0
- package/dist/types/index.d.ts +5 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/proxmox.d.ts +166 -0
- package/dist/types/proxmox.d.ts.map +1 -0
- package/dist/types/proxmox.js +2 -0
- package/dist/types/proxmox.js.map +1 -0
- package/dist/types/tools.d.ts +12 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +64 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/validators/index.d.ts +75 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +185 -0
- package/dist/validators/index.js.map +1 -0
- package/package.json +51 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { formatToolResponse, formatErrorResponse, } from '../formatters/index.js';
|
|
2
|
+
import { requireElevated } from '../middleware/index.js';
|
|
3
|
+
import { validateNodeName, validateVMID, validateStorageName, generateSecurePassword, } from '../validators/index.js';
|
|
4
|
+
import { listTemplatesSchema, createLxcSchema, createVmSchema, } from '../schemas/vm.js';
|
|
5
|
+
export async function listTemplates(client, _config, input) {
|
|
6
|
+
try {
|
|
7
|
+
const validated = listTemplatesSchema.parse(input);
|
|
8
|
+
const safeNode = validateNodeName(validated.node);
|
|
9
|
+
const safeStorage = validateStorageName(validated.storage);
|
|
10
|
+
const templates = (await client.request(`/nodes/${safeNode}/storage/${safeStorage}/content?content=vztmpl`, 'GET'));
|
|
11
|
+
let output = '📋 **Available LXC Templates**\n\n';
|
|
12
|
+
if (!templates || templates.length === 0) {
|
|
13
|
+
output += `No templates found on storage \`${safeStorage}\`.\n\n`;
|
|
14
|
+
output += `**Tip**: Download templates in Proxmox:\n`;
|
|
15
|
+
output += `1. Go to your node → Storage → ${safeStorage}\n`;
|
|
16
|
+
output += `2. Click "CT Templates"\n`;
|
|
17
|
+
output += `3. Download a template (e.g., Debian, Ubuntu)\n`;
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
for (const template of templates) {
|
|
21
|
+
const size = template.size
|
|
22
|
+
? formatBytes(template.size)
|
|
23
|
+
: 'N/A';
|
|
24
|
+
output += `• **${template.volid}**\n`;
|
|
25
|
+
output += ` Size: ${size}\n\n`;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return formatToolResponse(output);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
return formatErrorResponse(error, 'List Templates');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
export async function createLxc(client, config, input) {
|
|
35
|
+
try {
|
|
36
|
+
requireElevated(config, 'create LXC container');
|
|
37
|
+
const validated = createLxcSchema.parse(input);
|
|
38
|
+
const safeNode = validateNodeName(validated.node);
|
|
39
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
40
|
+
const password = validated.password || generateSecurePassword();
|
|
41
|
+
const isPasswordGenerated = !validated.password;
|
|
42
|
+
const body = {
|
|
43
|
+
vmid: parseInt(safeVmid, 10),
|
|
44
|
+
ostemplate: validated.ostemplate,
|
|
45
|
+
hostname: validated.hostname || `lxc-${safeVmid}`,
|
|
46
|
+
password,
|
|
47
|
+
memory: validated.memory || 512,
|
|
48
|
+
storage: validated.storage || 'local-lvm',
|
|
49
|
+
rootfs: `${validated.storage || 'local-lvm'}:${validated.rootfs || 8}`,
|
|
50
|
+
};
|
|
51
|
+
const result = await client.request(`/nodes/${safeNode}/lxc`, 'POST', body);
|
|
52
|
+
let output = `📦 **LXC Container Creation Started**\n\n` +
|
|
53
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
54
|
+
`• **Hostname**: ${body.hostname}\n` +
|
|
55
|
+
`• **Template**: ${validated.ostemplate}\n` +
|
|
56
|
+
`• **Memory**: ${body.memory} MB\n` +
|
|
57
|
+
`• **Storage**: ${body.storage}\n` +
|
|
58
|
+
`• **Root FS**: ${body.rootfs}\n`;
|
|
59
|
+
if (isPasswordGenerated) {
|
|
60
|
+
output += `• **🔐 Generated Password**: \`${password}\`\n`;
|
|
61
|
+
output += ` ⚠️ **SAVE THIS PASSWORD** - it will not be shown again!\n`;
|
|
62
|
+
}
|
|
63
|
+
output +=
|
|
64
|
+
`• **Task ID**: ${result}\n\n` +
|
|
65
|
+
`**Next steps**:\n` +
|
|
66
|
+
`1. Wait a moment for container to be created\n` +
|
|
67
|
+
`2. Start it with \`proxmox_start_lxc\`\n` +
|
|
68
|
+
`3. View status with \`proxmox_get_vm_status\`\n`;
|
|
69
|
+
return formatToolResponse(output);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return formatErrorResponse(error, 'Create LXC Container');
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export async function createVM(client, config, input) {
|
|
76
|
+
try {
|
|
77
|
+
requireElevated(config, 'create QEMU VM');
|
|
78
|
+
const validated = createVmSchema.parse(input);
|
|
79
|
+
const safeNode = validateNodeName(validated.node);
|
|
80
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
81
|
+
const storage = validated.storage || 'local-lvm';
|
|
82
|
+
const diskSize = validated.disk_size || '8G';
|
|
83
|
+
const sizeValue = diskSize.replace(/[^0-9]/g, '');
|
|
84
|
+
const body = {
|
|
85
|
+
vmid: parseInt(safeVmid, 10),
|
|
86
|
+
name: validated.name || `vm-${safeVmid}`,
|
|
87
|
+
memory: validated.memory || 512,
|
|
88
|
+
cores: validated.cores || 1,
|
|
89
|
+
sockets: validated.sockets || 1,
|
|
90
|
+
ostype: validated.ostype || 'l26',
|
|
91
|
+
net0: validated.net0 || 'virtio,bridge=vmbr0',
|
|
92
|
+
scsi0: `${storage}:${sizeValue}`,
|
|
93
|
+
};
|
|
94
|
+
if (validated.iso) {
|
|
95
|
+
body.ide2 = `${validated.iso},media=cdrom`;
|
|
96
|
+
body.boot = 'order=ide2;scsi0';
|
|
97
|
+
}
|
|
98
|
+
const result = await client.request(`/nodes/${safeNode}/qemu`, 'POST', body);
|
|
99
|
+
let output = `🖥️ **QEMU VM Creation Started**\n\n` +
|
|
100
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
101
|
+
`• **Name**: ${body.name}\n` +
|
|
102
|
+
`• **Memory**: ${body.memory} MB\n` +
|
|
103
|
+
`• **CPU**: ${body.sockets} socket(s), ${body.cores} core(s)\n` +
|
|
104
|
+
`• **Disk**: ${body.scsi0}\n` +
|
|
105
|
+
`• **Network**: ${body.net0}\n`;
|
|
106
|
+
if (validated.iso) {
|
|
107
|
+
output += `• **ISO**: ${validated.iso}\n`;
|
|
108
|
+
}
|
|
109
|
+
output +=
|
|
110
|
+
`• **Task ID**: ${result}\n\n` +
|
|
111
|
+
`**Next steps**:\n` +
|
|
112
|
+
`1. Wait a moment for VM to be created\n` +
|
|
113
|
+
`2. Start it with \`proxmox_start_vm\`\n` +
|
|
114
|
+
`3. View status with \`proxmox_get_vm_status\`\n`;
|
|
115
|
+
return formatToolResponse(output);
|
|
116
|
+
}
|
|
117
|
+
catch (error) {
|
|
118
|
+
return formatErrorResponse(error, 'Create QEMU VM');
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
function formatBytes(bytes) {
|
|
122
|
+
if (bytes === 0)
|
|
123
|
+
return '0 B';
|
|
124
|
+
const k = 1024;
|
|
125
|
+
const sizes = ['B', 'KB', 'MB', 'GB'];
|
|
126
|
+
const i = Math.floor(Math.log(bytes) / Math.log(k));
|
|
127
|
+
return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i];
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=vm-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-create.js","sourceRoot":"","sources":["../../src/tools/vm-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import type { ProxmoxApiClient } from '../client/proxmox.js';
|
|
2
|
+
import type { Config } from '../config/index.js';
|
|
3
|
+
import type { ToolResponse } from '../types/index.js';
|
|
4
|
+
import type { StartLxcInput, StartVmInput, StopLxcInput, StopVmInput, DeleteLxcInput, DeleteVmInput, RebootLxcInput, RebootVmInput, ShutdownLxcInput, ShutdownVmInput, PauseVmInput, ResumeVmInput } from '../schemas/vm.js';
|
|
5
|
+
/**
|
|
6
|
+
* Start an LXC container
|
|
7
|
+
* Requires elevated permissions
|
|
8
|
+
*/
|
|
9
|
+
export declare function startLxc(client: ProxmoxApiClient, config: Config, input: StartLxcInput): Promise<ToolResponse>;
|
|
10
|
+
/**
|
|
11
|
+
* Start a QEMU VM
|
|
12
|
+
* Requires elevated permissions
|
|
13
|
+
*/
|
|
14
|
+
export declare function startVM(client: ProxmoxApiClient, config: Config, input: StartVmInput): Promise<ToolResponse>;
|
|
15
|
+
/**
|
|
16
|
+
* Stop an LXC container (forceful)
|
|
17
|
+
* Requires elevated permissions
|
|
18
|
+
*/
|
|
19
|
+
export declare function stopLxc(client: ProxmoxApiClient, config: Config, input: StopLxcInput): Promise<ToolResponse>;
|
|
20
|
+
/**
|
|
21
|
+
* Stop a QEMU VM (forceful)
|
|
22
|
+
* Requires elevated permissions
|
|
23
|
+
*/
|
|
24
|
+
export declare function stopVM(client: ProxmoxApiClient, config: Config, input: StopVmInput): Promise<ToolResponse>;
|
|
25
|
+
/**
|
|
26
|
+
* Delete an LXC container
|
|
27
|
+
* Requires elevated permissions
|
|
28
|
+
*/
|
|
29
|
+
export declare function deleteLxc(client: ProxmoxApiClient, config: Config, input: DeleteLxcInput): Promise<ToolResponse>;
|
|
30
|
+
/**
|
|
31
|
+
* Delete a QEMU VM
|
|
32
|
+
* Requires elevated permissions
|
|
33
|
+
*/
|
|
34
|
+
export declare function deleteVM(client: ProxmoxApiClient, config: Config, input: DeleteVmInput): Promise<ToolResponse>;
|
|
35
|
+
/**
|
|
36
|
+
* Reboot an LXC container
|
|
37
|
+
* Requires elevated permissions
|
|
38
|
+
*/
|
|
39
|
+
export declare function rebootLxc(client: ProxmoxApiClient, config: Config, input: RebootLxcInput): Promise<ToolResponse>;
|
|
40
|
+
/**
|
|
41
|
+
* Reboot a QEMU VM
|
|
42
|
+
* Requires elevated permissions
|
|
43
|
+
*/
|
|
44
|
+
export declare function rebootVM(client: ProxmoxApiClient, config: Config, input: RebootVmInput): Promise<ToolResponse>;
|
|
45
|
+
/**
|
|
46
|
+
* Gracefully shutdown an LXC container
|
|
47
|
+
* Requires elevated permissions
|
|
48
|
+
*/
|
|
49
|
+
export declare function shutdownLxc(client: ProxmoxApiClient, config: Config, input: ShutdownLxcInput): Promise<ToolResponse>;
|
|
50
|
+
/**
|
|
51
|
+
* Gracefully shutdown a QEMU VM
|
|
52
|
+
* Requires elevated permissions
|
|
53
|
+
*/
|
|
54
|
+
export declare function shutdownVM(client: ProxmoxApiClient, config: Config, input: ShutdownVmInput): Promise<ToolResponse>;
|
|
55
|
+
/**
|
|
56
|
+
* Pause a QEMU VM (suspend)
|
|
57
|
+
* Note: LXC containers do not support pause
|
|
58
|
+
* Requires elevated permissions
|
|
59
|
+
*/
|
|
60
|
+
export declare function pauseVM(client: ProxmoxApiClient, config: Config, input: PauseVmInput): Promise<ToolResponse>;
|
|
61
|
+
/**
|
|
62
|
+
* Resume a paused QEMU VM
|
|
63
|
+
* Note: LXC containers do not support resume
|
|
64
|
+
* Requires elevated permissions
|
|
65
|
+
*/
|
|
66
|
+
export declare function resumeVM(client: ProxmoxApiClient, config: Config, input: ResumeVmInput): Promise<ToolResponse>;
|
|
67
|
+
//# sourceMappingURL=vm-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-lifecycle.d.ts","sourceRoot":"","sources":["../../src/tools/vm-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAqBtD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,aAAa,EACb,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAC1B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,WAAW,GACjB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,eAAe,GACrB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,YAAY,CAAC,CA2BvB;AAED;;;;GAIG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CA2BvB"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { formatToolResponse, formatErrorResponse, } from '../formatters/index.js';
|
|
2
|
+
import { requireElevated } from '../middleware/index.js';
|
|
3
|
+
import { validateNodeName, validateVMID } from '../validators/index.js';
|
|
4
|
+
import { startLxcSchema, startVmSchema, stopLxcSchema, stopVmSchema, deleteLxcSchema, deleteVmSchema, rebootLxcSchema, rebootVmSchema, shutdownLxcSchema, shutdownVmSchema, pauseVmSchema, resumeVmSchema, } from '../schemas/vm.js';
|
|
5
|
+
/**
|
|
6
|
+
* Start an LXC container
|
|
7
|
+
* Requires elevated permissions
|
|
8
|
+
*/
|
|
9
|
+
export async function startLxc(client, config, input) {
|
|
10
|
+
try {
|
|
11
|
+
// Check elevated permissions
|
|
12
|
+
requireElevated(config, 'start LXC container');
|
|
13
|
+
// Validate input
|
|
14
|
+
const validated = startLxcSchema.parse(input);
|
|
15
|
+
const safeNode = validateNodeName(validated.node);
|
|
16
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
17
|
+
// Call Proxmox API
|
|
18
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/status/start`, 'POST');
|
|
19
|
+
// Format success response
|
|
20
|
+
const output = `▶️ **LXC Container Start Initiated**\n\n` +
|
|
21
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
22
|
+
`• **Node**: ${safeNode}\n` +
|
|
23
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
24
|
+
`The container is starting. Use \`get_vm_status\` to check progress.`;
|
|
25
|
+
return formatToolResponse(output);
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
return formatErrorResponse(error, 'Start LXC Container');
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Start a QEMU VM
|
|
33
|
+
* Requires elevated permissions
|
|
34
|
+
*/
|
|
35
|
+
export async function startVM(client, config, input) {
|
|
36
|
+
try {
|
|
37
|
+
// Check elevated permissions
|
|
38
|
+
requireElevated(config, 'start VM');
|
|
39
|
+
// Validate input
|
|
40
|
+
const validated = startVmSchema.parse(input);
|
|
41
|
+
const safeNode = validateNodeName(validated.node);
|
|
42
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
43
|
+
// Call Proxmox API
|
|
44
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/status/start`, 'POST');
|
|
45
|
+
// Format success response
|
|
46
|
+
const output = `▶️ **VM Start Initiated**\n\n` +
|
|
47
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
48
|
+
`• **Node**: ${safeNode}\n` +
|
|
49
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
50
|
+
`The VM is starting. Use \`get_vm_status\` to check progress.`;
|
|
51
|
+
return formatToolResponse(output);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return formatErrorResponse(error, 'Start VM');
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Stop an LXC container (forceful)
|
|
59
|
+
* Requires elevated permissions
|
|
60
|
+
*/
|
|
61
|
+
export async function stopLxc(client, config, input) {
|
|
62
|
+
try {
|
|
63
|
+
// Check elevated permissions
|
|
64
|
+
requireElevated(config, 'stop LXC container');
|
|
65
|
+
// Validate input
|
|
66
|
+
const validated = stopLxcSchema.parse(input);
|
|
67
|
+
const safeNode = validateNodeName(validated.node);
|
|
68
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
69
|
+
// Call Proxmox API
|
|
70
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/status/stop`, 'POST');
|
|
71
|
+
// Format success response
|
|
72
|
+
const output = `⏹️ **LXC Container Stop Initiated**\n\n` +
|
|
73
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
74
|
+
`• **Node**: ${safeNode}\n` +
|
|
75
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
76
|
+
`The container is stopping. Use \`get_vm_status\` to confirm it's stopped.`;
|
|
77
|
+
return formatToolResponse(output);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
return formatErrorResponse(error, 'Stop LXC Container');
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Stop a QEMU VM (forceful)
|
|
85
|
+
* Requires elevated permissions
|
|
86
|
+
*/
|
|
87
|
+
export async function stopVM(client, config, input) {
|
|
88
|
+
try {
|
|
89
|
+
// Check elevated permissions
|
|
90
|
+
requireElevated(config, 'stop VM');
|
|
91
|
+
// Validate input
|
|
92
|
+
const validated = stopVmSchema.parse(input);
|
|
93
|
+
const safeNode = validateNodeName(validated.node);
|
|
94
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
95
|
+
// Call Proxmox API
|
|
96
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/status/stop`, 'POST');
|
|
97
|
+
// Format success response
|
|
98
|
+
const output = `⏹️ **VM Stop Initiated**\n\n` +
|
|
99
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
100
|
+
`• **Node**: ${safeNode}\n` +
|
|
101
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
102
|
+
`The VM is stopping. Use \`get_vm_status\` to confirm it's stopped.`;
|
|
103
|
+
return formatToolResponse(output);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
return formatErrorResponse(error, 'Stop VM');
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Delete an LXC container
|
|
111
|
+
* Requires elevated permissions
|
|
112
|
+
*/
|
|
113
|
+
export async function deleteLxc(client, config, input) {
|
|
114
|
+
try {
|
|
115
|
+
// Check elevated permissions
|
|
116
|
+
requireElevated(config, 'delete LXC container');
|
|
117
|
+
// Validate input
|
|
118
|
+
const validated = deleteLxcSchema.parse(input);
|
|
119
|
+
const safeNode = validateNodeName(validated.node);
|
|
120
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
121
|
+
// Call Proxmox API
|
|
122
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}`, 'DELETE');
|
|
123
|
+
// Format success response
|
|
124
|
+
const output = `🗑️ **LXC Container Deletion Started**\n\n` +
|
|
125
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
126
|
+
`• **Node**: ${safeNode}\n` +
|
|
127
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
128
|
+
`Deletion may take a moment to complete.`;
|
|
129
|
+
return formatToolResponse(output);
|
|
130
|
+
}
|
|
131
|
+
catch (error) {
|
|
132
|
+
return formatErrorResponse(error, 'Delete LXC Container');
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Delete a QEMU VM
|
|
137
|
+
* Requires elevated permissions
|
|
138
|
+
*/
|
|
139
|
+
export async function deleteVM(client, config, input) {
|
|
140
|
+
try {
|
|
141
|
+
// Check elevated permissions
|
|
142
|
+
requireElevated(config, 'delete VM');
|
|
143
|
+
// Validate input
|
|
144
|
+
const validated = deleteVmSchema.parse(input);
|
|
145
|
+
const safeNode = validateNodeName(validated.node);
|
|
146
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
147
|
+
// Call Proxmox API
|
|
148
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}`, 'DELETE');
|
|
149
|
+
// Format success response
|
|
150
|
+
const output = `🗑️ **VM Deletion Started**\n\n` +
|
|
151
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
152
|
+
`• **Node**: ${safeNode}\n` +
|
|
153
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
154
|
+
`Deletion may take a moment to complete.`;
|
|
155
|
+
return formatToolResponse(output);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return formatErrorResponse(error, 'Delete VM');
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Reboot an LXC container
|
|
163
|
+
* Requires elevated permissions
|
|
164
|
+
*/
|
|
165
|
+
export async function rebootLxc(client, config, input) {
|
|
166
|
+
try {
|
|
167
|
+
// Check elevated permissions
|
|
168
|
+
requireElevated(config, 'reboot LXC container');
|
|
169
|
+
// Validate input
|
|
170
|
+
const validated = rebootLxcSchema.parse(input);
|
|
171
|
+
const safeNode = validateNodeName(validated.node);
|
|
172
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
173
|
+
// Call Proxmox API
|
|
174
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/status/reboot`, 'POST');
|
|
175
|
+
// Format success response
|
|
176
|
+
const output = `🔄 **LXC Container Reboot Command Sent**\n\n` +
|
|
177
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
178
|
+
`• **Node**: ${safeNode}\n` +
|
|
179
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
180
|
+
`The container will restart momentarily.`;
|
|
181
|
+
return formatToolResponse(output);
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
return formatErrorResponse(error, 'Reboot LXC Container');
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Reboot a QEMU VM
|
|
189
|
+
* Requires elevated permissions
|
|
190
|
+
*/
|
|
191
|
+
export async function rebootVM(client, config, input) {
|
|
192
|
+
try {
|
|
193
|
+
// Check elevated permissions
|
|
194
|
+
requireElevated(config, 'reboot VM');
|
|
195
|
+
// Validate input
|
|
196
|
+
const validated = rebootVmSchema.parse(input);
|
|
197
|
+
const safeNode = validateNodeName(validated.node);
|
|
198
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
199
|
+
// Call Proxmox API
|
|
200
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/status/reboot`, 'POST');
|
|
201
|
+
// Format success response
|
|
202
|
+
const output = `🔄 **VM Reboot Command Sent**\n\n` +
|
|
203
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
204
|
+
`• **Node**: ${safeNode}\n` +
|
|
205
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
206
|
+
`The VM will restart momentarily.`;
|
|
207
|
+
return formatToolResponse(output);
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
return formatErrorResponse(error, 'Reboot VM');
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Gracefully shutdown an LXC container
|
|
215
|
+
* Requires elevated permissions
|
|
216
|
+
*/
|
|
217
|
+
export async function shutdownLxc(client, config, input) {
|
|
218
|
+
try {
|
|
219
|
+
// Check elevated permissions
|
|
220
|
+
requireElevated(config, 'shutdown LXC container');
|
|
221
|
+
// Validate input
|
|
222
|
+
const validated = shutdownLxcSchema.parse(input);
|
|
223
|
+
const safeNode = validateNodeName(validated.node);
|
|
224
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
225
|
+
// Call Proxmox API
|
|
226
|
+
const result = await client.request(`/nodes/${safeNode}/lxc/${safeVmid}/status/shutdown`, 'POST');
|
|
227
|
+
// Format success response
|
|
228
|
+
const output = `⏸️ **LXC Container Shutdown Command Sent**\n\n` +
|
|
229
|
+
`• **Container ID**: ${safeVmid}\n` +
|
|
230
|
+
`• **Node**: ${safeNode}\n` +
|
|
231
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
232
|
+
`This is a graceful shutdown. Use \`stop_lxc\` for forceful stop.`;
|
|
233
|
+
return formatToolResponse(output);
|
|
234
|
+
}
|
|
235
|
+
catch (error) {
|
|
236
|
+
return formatErrorResponse(error, 'Shutdown LXC Container');
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
/**
|
|
240
|
+
* Gracefully shutdown a QEMU VM
|
|
241
|
+
* Requires elevated permissions
|
|
242
|
+
*/
|
|
243
|
+
export async function shutdownVM(client, config, input) {
|
|
244
|
+
try {
|
|
245
|
+
// Check elevated permissions
|
|
246
|
+
requireElevated(config, 'shutdown VM');
|
|
247
|
+
// Validate input
|
|
248
|
+
const validated = shutdownVmSchema.parse(input);
|
|
249
|
+
const safeNode = validateNodeName(validated.node);
|
|
250
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
251
|
+
// Call Proxmox API
|
|
252
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/status/shutdown`, 'POST');
|
|
253
|
+
// Format success response
|
|
254
|
+
const output = `⏸️ **VM Shutdown Command Sent**\n\n` +
|
|
255
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
256
|
+
`• **Node**: ${safeNode}\n` +
|
|
257
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
258
|
+
`This is a graceful shutdown. Use \`stop_vm\` for forceful stop.`;
|
|
259
|
+
return formatToolResponse(output);
|
|
260
|
+
}
|
|
261
|
+
catch (error) {
|
|
262
|
+
return formatErrorResponse(error, 'Shutdown VM');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Pause a QEMU VM (suspend)
|
|
267
|
+
* Note: LXC containers do not support pause
|
|
268
|
+
* Requires elevated permissions
|
|
269
|
+
*/
|
|
270
|
+
export async function pauseVM(client, config, input) {
|
|
271
|
+
try {
|
|
272
|
+
// Check elevated permissions
|
|
273
|
+
requireElevated(config, 'pause VM');
|
|
274
|
+
// Validate input
|
|
275
|
+
const validated = pauseVmSchema.parse(input);
|
|
276
|
+
const safeNode = validateNodeName(validated.node);
|
|
277
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
278
|
+
// Call Proxmox API
|
|
279
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/status/suspend`, 'POST');
|
|
280
|
+
// Format success response
|
|
281
|
+
const output = `⏸️ **VM Pause Command Sent**\n\n` +
|
|
282
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
283
|
+
`• **Node**: ${safeNode}\n` +
|
|
284
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
285
|
+
`VM is now paused. Use \`resume_vm\` to resume.`;
|
|
286
|
+
return formatToolResponse(output);
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
return formatErrorResponse(error, 'Pause VM');
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Resume a paused QEMU VM
|
|
294
|
+
* Note: LXC containers do not support resume
|
|
295
|
+
* Requires elevated permissions
|
|
296
|
+
*/
|
|
297
|
+
export async function resumeVM(client, config, input) {
|
|
298
|
+
try {
|
|
299
|
+
// Check elevated permissions
|
|
300
|
+
requireElevated(config, 'resume VM');
|
|
301
|
+
// Validate input
|
|
302
|
+
const validated = resumeVmSchema.parse(input);
|
|
303
|
+
const safeNode = validateNodeName(validated.node);
|
|
304
|
+
const safeVmid = validateVMID(validated.vmid);
|
|
305
|
+
// Call Proxmox API
|
|
306
|
+
const result = await client.request(`/nodes/${safeNode}/qemu/${safeVmid}/status/resume`, 'POST');
|
|
307
|
+
// Format success response
|
|
308
|
+
const output = `▶️ **VM Resume Command Sent**\n\n` +
|
|
309
|
+
`• **VM ID**: ${safeVmid}\n` +
|
|
310
|
+
`• **Node**: ${safeNode}\n` +
|
|
311
|
+
`• **Task ID**: ${result || 'N/A'}\n\n` +
|
|
312
|
+
`VM is now resuming from paused state.`;
|
|
313
|
+
return formatToolResponse(output);
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
return formatErrorResponse(error, 'Resume VM');
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=vm-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-lifecycle.js","sourceRoot":"","sources":["../../src/tools/vm-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ProxmoxApiClient } from '../client/proxmox.js';
|
|
2
|
+
import type { Config } from '../config/index.js';
|
|
3
|
+
import type { ToolResponse } from '../types/index.js';
|
|
4
|
+
import type { CloneLxcInput, CloneVmInput, ResizeLxcInput, ResizeVmInput } from '../schemas/vm.js';
|
|
5
|
+
/**
|
|
6
|
+
* Clone an LXC container
|
|
7
|
+
* Requires elevated permissions
|
|
8
|
+
*/
|
|
9
|
+
export declare function cloneLxc(client: ProxmoxApiClient, config: Config, input: CloneLxcInput): Promise<ToolResponse>;
|
|
10
|
+
/**
|
|
11
|
+
* Clone a QEMU VM
|
|
12
|
+
* Requires elevated permissions
|
|
13
|
+
*/
|
|
14
|
+
export declare function cloneVM(client: ProxmoxApiClient, config: Config, input: CloneVmInput): Promise<ToolResponse>;
|
|
15
|
+
/**
|
|
16
|
+
* Resize an LXC container (memory and/or CPU cores)
|
|
17
|
+
* Requires elevated permissions
|
|
18
|
+
*/
|
|
19
|
+
export declare function resizeLxc(client: ProxmoxApiClient, config: Config, input: ResizeLxcInput): Promise<ToolResponse>;
|
|
20
|
+
/**
|
|
21
|
+
* Resize a QEMU VM (memory and/or CPU cores)
|
|
22
|
+
* Requires elevated permissions
|
|
23
|
+
*/
|
|
24
|
+
export declare function resizeVM(client: ProxmoxApiClient, config: Config, input: ResizeVmInput): Promise<ToolResponse>;
|
|
25
|
+
//# sourceMappingURL=vm-modify.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vm-modify.d.ts","sourceRoot":"","sources":["../../src/tools/vm-modify.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAatD,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,cAAc,EACd,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CAkCvB;AAED;;;GAGG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC,YAAY,CAAC,CAkCvB;AAED;;;GAGG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,cAAc,GACpB,OAAO,CAAC,YAAY,CAAC,CAoDvB;AAED;;;GAGG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,aAAa,GACnB,OAAO,CAAC,YAAY,CAAC,CAoDvB"}
|