42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
from enum import Enum
|
|
from sqlalchemy import String, Boolean, Integer, ForeignKey, Enum as SAEnum, Text
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from app.core.db import Base
|
|
|
|
class RouterMethod(str, Enum):
|
|
AUTO = "auto"
|
|
REST = "rest"
|
|
SSH = "ssh"
|
|
API = "api"
|
|
|
|
class Router(Base):
|
|
__tablename__ = "routers"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
name: Mapped[str] = mapped_column(String(200), unique=True, index=True)
|
|
host: Mapped[str] = mapped_column(String(255))
|
|
port_rest: Mapped[int] = mapped_column(Integer, default=443)
|
|
port_ssh: Mapped[int] = mapped_column(Integer, default=22)
|
|
port_api: Mapped[int] = mapped_column(Integer, default=8728)
|
|
verify_ssl: Mapped[bool] = mapped_column(Boolean, default=False)
|
|
preferred_method: Mapped[RouterMethod] = mapped_column(SAEnum(RouterMethod), default=RouterMethod.AUTO)
|
|
tags: Mapped[str] = mapped_column(Text, default="")
|
|
|
|
class CredentialMethod(str, Enum):
|
|
REST = "rest"
|
|
SSH = "ssh"
|
|
API = "api"
|
|
|
|
class RouterCredential(Base):
|
|
__tablename__ = "router_credentials"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
router_id: Mapped[int] = mapped_column(ForeignKey("routers.id", ondelete="CASCADE"), index=True)
|
|
method: Mapped[CredentialMethod] = mapped_column(SAEnum(CredentialMethod))
|
|
username: Mapped[str] = mapped_column(String(255))
|
|
secret_encrypted: Mapped[str] = mapped_column(Text)
|
|
extra_json: Mapped[str] = mapped_column(Text, default="{}")
|
|
|
|
router = relationship("Router")
|