feat(lxc): create_lxc принимает пароль извне (задаётся пользователем)
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user