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)