From 94185ac1e6448ec719ae117f00f94ad99958ea67 Mon Sep 17 00:00:00 2001 From: host Date: Sun, 9 Aug 2026 18:41:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=D1=8B=20LXC-?= =?UTF-8?q?=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD=D1=8B=20=D0=BF=D0=BE=20VMI?= =?UTF-8?q?D=20=D0=B8=D0=B7=20=D0=B8=D0=BD=D1=82=D0=B5=D1=80=D1=84=D0=B5?= =?UTF-8?q?=D0=B9=D1=81=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/AdminTemplates.jsx | 79 +++++++++++++-------------- 1 file changed, 38 insertions(+), 41 deletions(-) diff --git a/frontend/src/pages/AdminTemplates.jsx b/frontend/src/pages/AdminTemplates.jsx index 6d58c73..22871a6 100644 --- a/frontend/src/pages/AdminTemplates.jsx +++ b/frontend/src/pages/AdminTemplates.jsx @@ -37,8 +37,9 @@ export default function AdminTemplates() { } async function importVm(vm) { + const key = `vm-${vm.vmid}`; setError(""); - setImporting(`vm-${vm.vmid}`); + setImporting(key); try { await api.createTemplate({ name: vm.name || `VM-${vm.vmid}`, @@ -57,19 +58,19 @@ export default function AdminTemplates() { } } - async function importLxc(lxc) { + async function importLxc(archive) { + const key = `lxc-${archive.volid}`; setError(""); - const key = lxc.vmid ? `lxc-vmid-${lxc.vmid}` : `lxc-${lxc.volid}`; setImporting(key); try { await api.createTemplate({ - name: lxc.name || (lxc.vmid ? `LXC-${lxc.vmid}` : "LXC"), + name: archive.name, guest_type: "lxc", - source_vmid: lxc.vmid ? Number(lxc.vmid) : null, - source_template: lxc.vmid ? null : lxc.volid, - cores: lxc.cores || 1, - memory_mb: lxc.memory_mb || 1024, - disk_gb: lxc.disk_gb || 8, + source_vmid: null, + source_template: archive.volid, + cores: 1, + memory_mb: 1024, + disk_gb: 8, }); await refresh(); } catch (err) { @@ -140,44 +141,37 @@ export default function AdminTemplates() { {vmTemplates.length > 0 ? ( - - {vmTemplates.map((vm) => { - const key = `vm-${vm.vmid}`; - return ( - - - - - ); - })} - + {vmTemplates.map((vm) => { + const key = `vm-${vm.vmid}`; + return ( + + + + + ); + })}
VMIDИмяvCPURAM
{vm.vmid}{vm.name}{vm.cores}{vm.memory_mb} МБ
{vm.vmid}{vm.name}{vm.cores}{vm.memory_mb} МБ
) :

VM-шаблоны не найдены.

}
-

📦 LXC-шаблоны

+

📦 Архивные LXC-шаблоны

{lxcTemplates.length > 0 ? ( - - - {lxcTemplates.map((lxc, index) => { - const key = lxc.vmid ? `lxc-vmid-${lxc.vmid}` : `lxc-${lxc.volid || index}`; - const source = lxc.vmid ? "LXC-контейнер" : `${lxc.storage || "—"}: vzdump`; - return ( - - - - - - - - - ); - })} - + + {lxcTemplates.map((archive) => { + const key = `lxc-${archive.volid}`; + return ( + + + + + + + ); + })}
VMIDИмяИсточникvCPURAM
{lxc.vmid || "—"}{lxc.name}{source}{lxc.cores || 1}{lxc.memory_mb || `${lxc.size_mb || 0} МБ`}
ИмяХранилищеРазмер
{archive.name}{archive.storage || "—"}{archive.size_mb || 0} МБ
- ) :

LXC-шаблоны не найдены.

} + ) :

Архивные LXC-шаблоны не найдены.

}
)} @@ -188,8 +182,11 @@ export default function AdminTemplates() {
set("name", e.target.value)} required />
- {form.guest_type === "vm" ?
set("source_vmid", e.target.value)} placeholder="999" required />
- :
set("source_template", e.target.value)} placeholder="local:vztmpl/..." required />
} + {form.guest_type === "vm" ? ( +
set("source_vmid", e.target.value)} placeholder="999" required />
+ ) : ( +
set("source_template", e.target.value)} placeholder="local:vztmpl/..." required />
+ )}
set("description", e.target.value)} />
set("cores", e.target.value)} />
set("memory_mb", e.target.value)} />