Untitled
unknown
plain_text
5 months ago
2.9 kB
1
Indexable
from fastapi import FastAPI, Form from fastapi.responses import HTMLResponse from proxmoxer import ProxmoxAPI from jinja2 import Template # Создание FastAPI приложения app = FastAPI() # Подключение к Proxmox через API proxmox = ProxmoxAPI('proxmox_ip', user='root@pam', password='your_password', verify_ssl=False) # HTML шаблон для отображения нод и формы для выбора ноды html_template = """ <html> <head> <title>Proxmox Node and VM Management</title> </head> <body> <h1>Select a Node to Create a Virtual Machine</h1> <h2>Available Nodes and VMs:</h2> <ul> {% for node in nodes %} <li>{{ node['name'] }}: {{ node['vm_count'] }} VM(s)</li> {% endfor %} </ul> <form action="/create_vm" method="post"> <label for="node">Choose a node:</label> <select name="node" id="node"> {% for node in nodes %} <option value="{{ node['name'] }}">{{ node['name'] }}</option> {% endfor %} </select> <br> <label for="vm_name">VM Name:</label> <input type="text" id="vm_name" name="vm_name" required> <br> <button type="submit">Create VM</button> </form> </body> </html> """ @app.get("/", response_class=HTMLResponse) async def read_root(): # Получаем список нод и количество ВМ на каждой ноде nodes_info = [] nodes = proxmox.nodes.get() for node in nodes: node_name = node['node'] vms = proxmox.nodes(node_name).qemu.get() vm_count = len(vms) nodes_info.append({"name": node_name, "vm_count": vm_count}) # Рендеринг HTML-страницы с информацией о нодах и формой для создания ВМ template = Template(html_template) return template.render(nodes=nodes_info) @app.post("/create_vm", response_class=HTMLResponse) async def create_vm(node: str = Form(...), vm_name: str = Form(...)): # Логика создания виртуальной машины vm_id = proxmox.cluster.nextid.get() # Получаем следующий доступный VM ID proxmox.nodes(node).qemu.post( vmid=vm_id, name=vm_name, cores=2, memory=2048, # Указываем параметры ВМ net0='virtio,bridge=vmbr0', ostype='l26' # Тип ОС, например, для Linux ) return f"<html><body><h1>VM '{vm_name}' successfully created on node {node}!</h1></body></html>" if __name__ == '__main__': import uvicorn uvicorn.run(app, host='0.0.0.0', port=8000)
Editor is loading...
Leave a Comment