начата логика создания сервера

This commit is contained in:
Georgiy Syralev
2025-09-18 17:49:06 +03:00
parent cce9e7b996
commit f254597b1a
11 changed files with 440 additions and 234 deletions

View File

@@ -0,0 +1,60 @@
import axios from 'axios';
import dotenv from 'dotenv';
dotenv.config();
const PROXMOX_API_URL = process.env.PROXMOX_API_URL;
const PROXMOX_TOKEN_ID = process.env.PROXMOX_TOKEN_ID;
const PROXMOX_TOKEN_SECRET = process.env.PROXMOX_TOKEN_SECRET;
export async function createProxmoxContainer({ os, tariff, user }: any) {
try {
const node = process.env.PROXMOX_NODE;
const diskTemplate = process.env.PROXMOX_DISK_TEMPLATE;
if (!node || !diskTemplate) {
return { status: 'fail', message: 'Не указаны PROXMOX_NODE или PROXMOX_DISK_TEMPLATE в .env' };
}
const vmId = Math.floor(10000 + Math.random() * 89999);
const res = await axios.post(
`${PROXMOX_API_URL}/nodes/${node}/qemu`,
{
vmid: vmId,
name: `user${user.id}-vm${vmId}`,
ostype: os.code || 'l26',
cores: tariff.cores || 2,
memory: tariff.memory || 2048,
storage: diskTemplate,
},
{
headers: {
'Authorization': `PVEAPIToken=${PROXMOX_TOKEN_ID}=${PROXMOX_TOKEN_SECRET}`,
'Content-Type': 'application/json'
}
}
);
if (res.data && res.data.data) {
return { status: 'ok', proxmoxId: vmId, message: 'Сервер создан на Proxmox', proxmox: res.data.data };
}
return { status: 'fail', message: 'Не удалось создать сервер на Proxmox', details: res.data };
} catch (err) {
return { status: 'fail', message: 'Ошибка создания сервера на Proxmox', error: err };
}
}
export async function checkProxmoxConnection() {
try {
const res = await axios.get(
`${PROXMOX_API_URL}/version`,
{
headers: {
'Authorization': `PVEAPIToken=${PROXMOX_TOKEN_ID}=${PROXMOX_TOKEN_SECRET}`
}
}
);
if (res.data && res.data.data) {
return { status: 'ok', message: 'Соединение с Proxmox установлено', version: res.data.data.version };
}
return { status: 'fail', message: 'Не удалось получить версию Proxmox' };
} catch (err) {
return { status: 'fail', message: 'Ошибка соединения с Proxmox', error: err };
}
}