Stencil · Modelo racks
Stencil · Modelo racks
Propósito
Stencil es la plantilla visual de un dispositivo de rack. Encapsula la imagen representativa y los metadatos de altura por defecto para que el editor visual pueda renderizar el dispositivo sin datos reales de instancia. Soporta dos modos: global (organization=None, semilla del sistema visible para todos los tenants) y custom por tenant (subida manual o importación Visio .vssx/.vss/.vdx).
Contrato
Campos:
| Campo | Tipo | Notas |
|---|---|---|
name | CharField(100) | Nombre del stencil |
image_path | CharField(200) | Ruta relativa a MEDIA_ROOT o URL absoluta; expuesto como image en la API |
default_u_height | IntegerField(default=1) | Altura en unidades de rack |
manufacturer | CharField(100) | Fabricante; usado en fuzzy matching durante discovery |
category | CharField(100, default="General") | Campo string legacy (pendiente FK) |
extra_data | TextField(default="{}") | JSON libre para metadatos adicionales |
organization | FK(Organization, null) | null=True indica stencil global de sistema |
Métodos y propiedades:
image_url(property) — URL pública: siimage_pathes relativa antepone/media/; si es absoluta o empieza con/la retorna tal cual; vacío si el campo está vacío.__str__— retornaname.
Meta:
- Índice compuesto
idx_stencil_org_catsobre(organization, category).
Dependencias entrantes
| Módulo | Archivo | Uso |
|---|---|---|
LibraryService | racks/services/library.py | list_stencils, create_custom_stencil, import_visio |
library API router | racks/api/library.py | Endpoints REST stencils |
stencil_matching | network/services/device_discovery/stencil_matching.py | Fuzzy match durante discovery |
auto_config | network/services/auto_config.py | Sugiere stencil al Rack Editor vía suggested_stencil_id |
backup_service | core/services/backup_service.py | Serializa stencils custom en exports |
backup/restore API | racks/api/export/backup.py, restore.py | Ciclo de exportación e importación de rack |
blueprints schema | blueprints/api/schemas.py | Resuelve Stencil por nombre |
| Migración semilla | racks/migrations/0011_default_stencil_pack.py | Siembra 25 stencils globales |
Dependencias salientes
core.models.Organization— FK con CASCADE;null=Truepara stencils de sistema.racks.utils.visio_parser.VisioParser— usado porLibraryService.import_visiopara extraer masters.racks.utils.vss_converter.VSSConverter— convierte.vsslegado a.vssx.django.core.files.storage.default_storage— almacena imágenes bajostencils/<org_id>/<uuid>.<ext>.
Ejemplos
- Stencil global de sistema:
Stencil(name="Cisco Catalyst 9300", manufacturer="Cisco", category="Switches", default_u_height=1, organization=None). - Custom importado desde Visio: creado por
LibraryService.import_visioconcategory="Imported"eimage_path="stencils/<org_id>/<uuid>_master.png". - Fuzzy match en discovery:
match_stencil(vendor="Cisco", model="C9300-48P")→Stencil.objects.filter(manufacturer__icontains="Cisco", name__icontains="C9300-48P")devuelve{"stencil_id": 12, "confidence": 100, "reason": "Exact match"}.
Related
entity--racks--model--device— tomadefault_u_heightdel stencil seleccionado.entity--racks--model--rack— editor consume el catálogo de stencils.entity--core--model--organization— alcance de aislamiento;null= compartido global.
Véase también
- [[entity—racks—model—device]]
- [[entity—racks—model—rack]]
- [[entity—core—model—organization]]