Распаковал архив Proxmox-VPS-Panel.rar и добавил содержимое в репозиторий

This commit is contained in:
root
2026-07-24 15:10:47 +00:00
parent 0372e2c5f1
commit ac74a700ce
37 changed files with 2353 additions and 0 deletions
+81
View File
@@ -0,0 +1,81 @@
import enum
from datetime import datetime
from sqlalchemy import (
Column, Integer, String, Boolean, DateTime, ForeignKey, Enum,
)
from sqlalchemy.orm import relationship
from .database import Base
class Role(str, enum.Enum):
admin = "admin"
client = "client"
class GuestType(str, enum.Enum):
vm = "vm"
lxc = "lxc"
class InstanceStatus(str, enum.Enum):
creating = "creating"
running = "running"
stopped = "stopped"
error = "error"
deleting = "deleting"
deleted = "deleted"
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True, nullable=False)
password_hash = Column(String, nullable=False)
role = Column(Enum(Role), default=Role.client, nullable=False)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime, default=datetime.utcnow)
instances = relationship("Instance", back_populates="owner")
class Template(Base):
"""Шаблон VPS: связывает тарифный план с исходным Proxmox-шаблоном (VM template / CT template)."""
__tablename__ = "templates"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
description = Column(String, default="")
guest_type = Column(Enum(GuestType), nullable=False)
# VMID шаблона в Proxmox, с которого делаем клон (для VM) или CT template volid (для LXC, напр. local:vztmpl/....tar.zst)
source_vmid = Column(Integer, nullable=True) # для VM-шаблонов (клонирование)
source_template = Column(String, nullable=True) # для LXC (путь к .tar.zst шаблону)
cores = Column(Integer, default=1)
memory_mb = Column(Integer, default=1024)
disk_gb = Column(Integer, default=10)
is_active = Column(Boolean, default=True)
instances = relationship("Instance", back_populates="template")
class Instance(Base):
__tablename__ = "instances"
id = Column(Integer, primary_key=True, index=True)
name = Column(String, nullable=False)
vmid = Column(Integer, unique=True, index=True, nullable=False)
node = Column(String, nullable=False)
guest_type = Column(Enum(GuestType), nullable=False)
status = Column(Enum(InstanceStatus), default=InstanceStatus.creating)
root_password = Column(String, nullable=True)
ciuser = Column(String, nullable=True) # хранится только для LXC при создании, чтобы показать один раз
owner_id = Column(Integer, ForeignKey("users.id"))
template_id = Column(Integer, ForeignKey("templates.id"))
created_at = Column(DateTime, default=datetime.utcnow)
owner = relationship("User", back_populates="instances")
template = relationship("Template", back_populates="instances")