fix: IP → 192.168.1.20, tasks limit via slice, abort on failed clone
This commit is contained in:
1 parent
676b55edb2
commit
1fe5b65826
1 file changed
+13
-6
@@ -1,8 +1,8 @@
|
|||||||
"""
|
"""
|
||||||
title: Proxmox Tools (Kybinka)
|
title: Proxmox Tools (Kybinka)
|
||||||
author: (your name)
|
author: (your name)
|
||||||
description: Инструменты для управления Proxmox VE (сервер Kybinka, 192.168.1.10): LXC (создание, старт, стоп, удаление), VM (клонирование из шаблона, создание из ISO, управление), мониторинг (ноды, хранилище, ресурсы, задачи).
|
description: Инструменты для управления Proxmox VE (сервер Kybinka, 192.168.1.20): LXC (создание, старт, стоп, удаление), VM (клонирование из шаблона, создание из ISO, управление), мониторинг (ноды, хранилище, ресурсы, задачи).
|
||||||
version: 1.0.0
|
version: 1.0.1
|
||||||
"""
|
"""
|
||||||
import time
|
import time
|
||||||
import requests
|
import requests
|
||||||
@@ -14,8 +14,8 @@ from typing import Optional
|
|||||||
class Tools:
|
class Tools:
|
||||||
class Valves(BaseModel):
|
class Valves(BaseModel):
|
||||||
proxmox_host: str = Field(
|
proxmox_host: str = Field(
|
||||||
default="https://192.168.1.10:8006",
|
default="https://192.168.1.20:8006",
|
||||||
description="Базовый URL API Proxmox (например, https://192.168.1.10:8006)",
|
description="Базовый URL API Proxmox (например, https://192.168.1.20:8006)",
|
||||||
)
|
)
|
||||||
proxmox_user: str = Field(
|
proxmox_user: str = Field(
|
||||||
default="root@pam",
|
default="root@pam",
|
||||||
@@ -293,12 +293,14 @@ class Tools:
|
|||||||
def kybinka_tasks(self, limit: int = 10, node: Optional[str] = None) -> str:
|
def kybinka_tasks(self, limit: int = 10, node: Optional[str] = None) -> str:
|
||||||
"""Последние задачи на ноде.
|
"""Последние задачи на ноде.
|
||||||
Args:
|
Args:
|
||||||
limit: Максимум задач.
|
limit: Максимум задач (клиентский срез).
|
||||||
node: Имя ноды. По умолчанию — нода из настроек.
|
node: Имя ноды. По умолчанию — нода из настроек.
|
||||||
"""
|
"""
|
||||||
node = node or self.valves.default_node
|
node = node or self.valves.default_node
|
||||||
try:
|
try:
|
||||||
items = self._api("GET", f"/nodes/{node}/tasks", params={"limit": limit})
|
items = self._api("GET", f"/nodes/{node}/tasks")
|
||||||
|
if limit:
|
||||||
|
items = items[:limit]
|
||||||
if not items:
|
if not items:
|
||||||
return f"Нет задач на {node}"
|
return f"Нет задач на {node}"
|
||||||
out = [f"Задачи на {node}:"]
|
out = [f"Задачи на {node}:"]
|
||||||
@@ -695,6 +697,11 @@ class Tools:
|
|||||||
if ok
|
if ok
|
||||||
else f" WARN Клонирование могло не завершиться: {msg}"
|
else f" WARN Клонирование могло не завершиться: {msg}"
|
||||||
)
|
)
|
||||||
|
# Критично: если клон не завершился — не продолжаем
|
||||||
|
if not ok:
|
||||||
|
out.append(" ABORT: клонирование не завершилось, пропускаем config/start")
|
||||||
|
return "\n".join(out)
|
||||||
|
|
||||||
config_params = {}
|
config_params = {}
|
||||||
if memory is not None:
|
if memory is not None:
|
||||||
config_params["memory"] = memory
|
config_params["memory"] = memory
|
||||||
|
|||||||
Reference in new issue
Block a user