templates: add netmiko_device_type for automation tools

Common template field (schema + templates table column + Alembic
migration) holding the Netmiko device type (e.g. 'cisco_xr', 'nokia_srl')
so Netmiko/Nornir based tooling can look up how to reach a node's CLI
without hard-coded vendor mappings. Free-form lowercase string on
purpose: Netmiko's platform list evolves independently of GNS3.
This commit is contained in:
YueGuobin committed 2026-08-21 21:41:35 +08:00
1 parent 254721dbda
commit 9260108f53
4 files changed
+37 -2

No files matched your search

+1
View File
@@ -35,6 +35,7 @@ class Template(BaseTable):
symbol = Column(String)
builtin = Column(Boolean, default=False)
usage = Column(String)
netmiko_device_type = Column(String)
template_type = Column(String)
tags = Column(JSON)
compute_id = Column(String)
@@ -0,0 +1,26 @@
"""add netmiko_device_type to templates table
Revision ID: b3c7e2a91d4f
Revises: 8f2a1c4e9d3b
Create Date: 2026-08-16 10:00:00.000000
"""
from alembic import op
import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'b3c7e2a91d4f'
down_revision = '8f2a1c4e9d3b'
branch_labels = None
depends_on = None
def upgrade() -> None:
op.add_column('templates', sa.Column('netmiko_device_type', sa.String()))
def downgrade() -> None:
op.drop_column('templates', 'netmiko_device_type')
@@ -48,6 +48,11 @@ class TemplateBase(BaseModel):
template_type: Optional[NodeType] = None
compute_id: Optional[str] = None
usage: Optional[str] = ""
netmiko_device_type: Optional[str] = Field(
None,
description="Device type for Netmiko-based automation tools (e.g. 'cisco_xr' or 'nokia_srl')",
pattern=r"^[a-z0-9_]+$",
)
tags: Optional[List[str]] = Field(
default_factory=list,
description="User-defined metadata tags (e.g. 'vendor:cisco' or 'model:7200')"