From 9de9227ca25651917d279cac3cb68764b4ee5f4a Mon Sep 17 00:00:00 2001 From: host Date: Fri, 24 Jul 2026 00:49:37 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F:=20=D1=82=D0=BE=D0=BA=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=B2=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B?= =?UTF-8?q?=D0=B5=20=D0=BE=D0=BA=D1=80=D1=83=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?,=20template=5Fvmid=3D1000,=20+os=20import?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- proxmox_tools.py | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/proxmox_tools.py b/proxmox_tools.py index 3437866..44ec81b 100644 --- a/proxmox_tools.py +++ b/proxmox_tools.py @@ -10,24 +10,37 @@ Usage: tools = Tools() print(tools.connection()) print(tools.vm_create(vmid=200, name="ubuntu", ciuser="ubuntu", cipassword="1234567")) + +⚠️ Важно: токен PROXMOX_TOKEN_VALUE задаётся через переменную окружения! + export PROXMOX_TOKEN_VALUE="ваш-токен" """ import json +import os import re import time import requests # ============================================================ -# CONFIG - change as needed +# CONFIG — из переменных окружения (с запасными значениями) # ============================================================ -PROXMOX_HOST = "https://192.168.31.2:8006" -PROXMOX_USER = "root@pam" -PROXMOX_TOKEN_NAME = "openwebui-token" -PROXMOX_TOKEN_VALUE = "7aba7743-0133-494b-9dd7-9715f55e5dca" -VERIFY_SSL = False -DEFAULT_NODE = "pve" -DEFAULT_STORAGE = "local" -DEFAULT_BRIDGE = "vmbr0" +PROXMOX_HOST = os.getenv("PROXMOX_HOST", "https://192.168.31.2:8006") +PROXMOX_USER = os.getenv("PROXMOX_USER", "root@pam") +PROXMOX_TOKEN_NAME = os.getenv("PROXMOX_TOKEN_NAME", "openwebui-token") +PROXMOX_TOKEN_VALUE = os.getenv("PROXMOX_TOKEN_VALUE", "") +if not PROXMOX_TOKEN_VALUE: + raise RuntimeError( + "PROXMOX_TOKEN_VALUE not set! " + "Export it as environment variable, e.g.:\n" + " export PROXMOX_TOKEN_VALUE='7aba7743-0133-494b-9dd7-9715f55e5dca'" + ) + +VERIFY_SSL = os.getenv("PROXMOX_VERIFY_SSL", "false").lower() in ("true", "1", "yes") +DEFAULT_NODE = os.getenv("PROXMOX_NODE", "pve") +DEFAULT_STORAGE = os.getenv("PROXMOX_STORAGE", "local") +DEFAULT_BRIDGE = os.getenv("PROXMOX_BRIDGE", "vmbr0") +# Шаблон для клонирования VM (по умолчанию ID:1000 — cloud-init) +DEFAULT_TEMPLATE_VMID = int(os.getenv("PROXMOX_TEMPLATE_VMID", "1000")) # ============================================================ # INTERNAL HELPERS @@ -537,7 +550,7 @@ class Tools: def vm_create_from_template( vmid, name, - template_vmid=999, + template_vmid=DEFAULT_TEMPLATE_VMID, full=True, memory=None, cores=None, @@ -552,14 +565,14 @@ class Tools: ): """ Create a new VM by cloning from a template. - Default template: VM #999 (ubuntu-2404-ci). + Default template: VM #1000 (cloud-init). Cloud-init params (for guest OS user setup): ciuser: username in the guest (e.g. "ubuntu") cipassword: password for the user sshkeys: SSH public keys (newline-separated string) - FIXED: "start" parameter is NOT sent to /clone - + FIXED: "start" parameter is NOT sent to /clone — startup is done via separate API call after clone completes. """ try: @@ -663,7 +676,7 @@ class Tools: def vm_create( vmid, name, - template_vmid=999, + template_vmid=DEFAULT_TEMPLATE_VMID, memory=4096, cores=2, disk_size="32G", @@ -685,7 +698,7 @@ class Tools: Universal VM creation. Modes: - 1. From template (default): clones VM #999 (ubuntu-2404-ci) + 1. From template (default): clones VM #1000 (cloud-init) 2. From ISO: template_vmid=None, iso="local:iso/image.iso" Cloud-init params (for mode 1):