Modelo VendorProfile (catálogo global de fabricantes y perfiles SNMP/HTTP)
Propósito
VendorProfile es el catálogo global y compartido de todos los fabricantes de equipo (Cisco, Arista, Juniper, etc.) en la instalación CreaRack Pro. Contiene:
- Patrones de detección (SNMP
sysDescr, HTTP headers/body, SSH outputs) - Expresiones regulares para extraer modelo y versión
- Mapping de OIDs para monitoring/discovery profundo
- Configuración SNMP/SSH por vendor
- MIBs compilados y custom
- Integración con asistente IA (Gemma 4)
Sin tenant-scoping: una entrada de VendorProfile es accesible y pollada por todas las orgs del SaaS. Por lo tanto, las mutaciones requieren rol admin (autorización s114).
Estructura
| Campo | Tipo | Notas |
|---|---|---|
slug | CharField | Identificador único, immutable (ej: cisco, arista) |
display_name | CharField | Nombre legible |
aliases | JSONField | Variantes de nombre |
snmp_communities | JSONField | Default community strings por modelo |
sys_descr_patterns | JSONField | Regexes para detectar vendor desde sysDescr |
sys_descr_model_regex | JSONField | Extraer modelo de sysDescr (editable) |
sys_descr_version_regex | JSONField | Extraer versión de sysDescr (editable) |
sys_object_id_prefix | CharField | OID del enterprise number (SNMP walk optimization) |
http_* | JSONField | Patrones HTTP (headers, body, firmware extraction) |
ssh_* | JSONField | Comandos y regexes SSH (show version, inventory, etc.) |
scrapli_platform | CharField | Nombre de platform en scrapli (si disponible) |
default_device_type | CharField | Tipo de dispositivo por defecto (router, switch, etc.) |
mib_modules | JSONField | Nombres de módulos ASN.1 que este vendor usa |
deep_discovery_oids | JSONField | OIDs para polling profundo (por categoría) |
monitoring_oids | JSONField | OIDs sugeridos para Zabbix/Prometheus |
priority | IntegerField | Orden de chequeo en detect_vendor_from_sys_descr |
is_active | BooleanField | Descartado / activo |
notes | TextField | Documentación libre |
Autorización (s114)
Endpoints de lectura (cualquier usuario autenticado)
GET /api/vendor-profiles→require_perm(network, view)verificado en routerGET /api/vendor-profiles/{slug}→ mismo
Endpoints de escritura (admin only)
POST /api/vendor-profiles→is_admin(request.user)(implicit en el decorador)PATCH /api/vendor-profiles/{slug}→is_admin(request.user)(implicit)
Cambio s114: Endpoints que mutaban el catálogo ahora exigen admin:
POST /api/vendor-profiles/{slug}/upload-mib→if not is_admin(request.user): return 403DELETE /api/vendor-profiles/{slug}/custom-mibs/{mib_id}→ admin onlyPOST /api/vendor-profiles/{slug}/custom-mibs/{mib_id}/apply-oids→ admin onlyPOST /api/vendor-profiles/{slug}/mib-assistant/analyze→ admin onlyPOST /api/vendor-profiles/{slug}/mib-assistant/apply→ admin only
Validaciones (s114)
Mass-assignment acotado
create_vendor_profile filtra el payload contra lista blanca VENDOR_UPDATABLE_FIELDS (constante a nivel módulo, en network/api/vendor.py):
VENDOR_UPDATABLE_FIELDS = {
"display_name", "aliases", "snmp_communities",
"sys_descr_patterns", "sys_descr_model_regex", "sys_descr_version_regex",
"sys_object_id_prefix", "http_server_patterns", "http_body_patterns",
"http_product_lines", "http_firmware_regex", "scrapli_platform",
"ssh_show_version_cmd", "ssh_show_interfaces_cmd", "ssh_show_inventory_cmd",
"ssh_model_regex", "ssh_version_regex", "default_device_type",
"device_type_keywords", "os_types", "mib_modules",
"deep_discovery_oids", "monitoring_oids", "priority", "is_active", "notes",
}
El slug se fija solo en create, no en update.
Validación de OID
En apply_custom_oids: cada OID se valida contra regex ^\.?\d+(\.\d+)*$ antes de persistir en el catálogo global (evita inyectar basura).
ReDoS mitigation
Las funciones de extracción de modelo/versión capan el sysDescr a 2048 caracteres antes de aplicar las regexes editables:
detect_vendor_from_sys_descr(sys_descr)→sys_descr = (sys_descr or "")[:_MAX_SYS_DESCR]get_model_from_sys_descr(slug, sys_descr)→ mismoget_version_from_sys_descr(slug, sys_descr)→ mismo
Paridad con el cap HTTP body[:2048].
Relacionadas
- CustomMib: MIBs compilados subidos por admin, asociados a este vendor
- DeviceProfile: Perfil de un dispositivo individual, linkado a un VendorProfile
- VendorRegistry (servicio): Carga y cachea los VendorProfiles en memoria, compila regexes
Véase también
- [[entity—network—model—device-profile]]
- [[entity—network—model—custom-mib]]
- [[entity—network—service—mib-manager]]
- [[entity—network—service—vendor-registry]]
- [[feature—network—sa3-auditoria-vendor-mib]]
- [[concept—saas—require-perm-network]]