From dea129b07638b2f3196caf81791e7786c28b216e Mon Sep 17 00:00:00 2001 From: host Date: Sun, 9 Aug 2026 22:10:18 +0300 Subject: [PATCH] =?UTF-8?q?feat(lxc):=20create=5Flxc=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=D0=BD=D0=B8=D0=BC=D0=B0=D0=B5=D1=82=20=D0=BF=D0=B0=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=20=D0=B8=D0=B7=D0=B2=D0=BD=D0=B5=20(=D0=B7=D0=B0?= =?UTF-8?q?=D0=B4=D0=B0=D1=91=D1=82=D1=81=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=BC)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/proxmox_client.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/backend/app/proxmox_client.py b/backend/app/proxmox_client.py index 42b4b50..5453511 100644 --- a/backend/app/proxmox_client.py +++ b/backend/app/proxmox_client.py @@ -26,7 +26,7 @@ def _client() -> ProxmoxAPI: def gen_password(length: int = 14) -> str: - """Генерирует пароль из букв и цифр.""" + """Генерирует пароль из букв и цифр (для VM-cloud-init, если пользователь не задал).""" alphabet = string.ascii_letters + string.digits return "".join(random.choice(alphabet) for _ in range(length)) @@ -57,6 +57,7 @@ def create_lxc( new_vmid: int, name: str, template_volid: str, + password: str, cores: int, memory_mb: int, disk_gb: int, @@ -67,16 +68,18 @@ def create_lxc( Шаги (каждый — отдельный запрос к Proxmox API): 1. Создаёт LXC через ``ostemplate`` (без запуска). - 2. Задаёт новый root-пароль через ``/passwd``. + 2. Задаёт root-пароль через ``/passwd``. 3. Создаёт rootfs указанного размера через ``/resize``. 4. Запускает контейнер через ``/status/start``. + ``password`` приходит из формы (клиент задаёт сам) и сохраняется в БД + для одноразового показа в карточке инстанса. + LXC создаётся ТОЛЬКО из архивного шаблона (vztmpl на storage). Клонирование существующего LXC по VMID не поддерживается. """ node = node or settings.pve_node px = _client() - password = gen_password() # 1. Создаём LXC через ostemplate. start=0 — не запускаем, чтобы успеть # задать пароль и диск нужного размера до старта. @@ -94,7 +97,7 @@ def create_lxc( ) _wait_task(px, node, upid) - # 2. Задаём новый root-пароль через отдельный endpoint /passwd. + # 2. Задаём пароль через отдельный endpoint /passwd. # Поле password в POST /lxc на некоторых версиях Proxmox игнорируется, # поэтому дублируем через /passwd — это идемпотентная операция. px.nodes(node).lxc(new_vmid).passwd.post(password=password)