Распаковал архив Proxmox-VPS-Panel.rar и добавил содержимое в репозиторий
This commit is contained in:
@@ -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")
|
||||
Reference in New Issue
Block a user