CreaRack-SL

VendorProfile · Modelo network

Entidadactiveverificado 2026-04-21#network#model#vendor#snmp#multi-vendor

VendorProfile · Modelo network

Propósito

VendorProfile es la fuente única de verdad multi-vendor. Almacena, por cada fabricante de red, el conjunto completo de señales de detección (OIDs SNMP, patrones sysDescr, fingerprinting HTTP), comandos SSH, MIBs requeridas y OIDs de monitoreo continuo/fast-poll. Scope global (no por organización): un único registro Cisco, Juniper, Cambium, etc. compartido por todas las organizaciones. Añadir soporte para un vendor nuevo NO requiere tocar código — basta crear/editar un VendorProfile vía admin o API.

Contrato

Campos:

CampoTipoNotas
slugSlugField(50, unique)Clave de lookup (cisco, xirrus)
display_nameCharField(100)Nombre visible
aliasesArrayField(CharField)Para get_slug_for_vendor_name (OUI, “Inc.”)
snmp_communitiesArrayField(CharField)Communities vendor-específicas en discovery
sys_descr_patternsArrayField(CharField)Regex para detectar vendor en sysDescr
sys_descr_model_regexCharField(500)Regex group 1 → modelo desde sysDescr
sys_descr_version_regexCharField(500)Regex group 1 → versión OS
sys_object_id_prefixCharField(255)Prefijo OID empresa (1.3.6.1.4.1.9 Cisco); lookup O(1)
mib_modulesArrayField(CharField)MIBs para deep discovery
deep_discovery_oidsJSONFieldOIDs por categoría (hardware/cpu/memory/vlans)
monitoring_oidsJSONFieldOIDs para monitoreo continuo Sentinel
fast_poll_oidsJSONFieldOIDs ligeros fast-poll 15s
http_server_patternsArrayField(CharField)Patrones lowercase contra HTTP Server header
http_body_patternsArrayField(CharField)Patrones lowercase contra HTTP body
http_product_linesJSONFieldkeyword → product line
http_firmware_regexCharField(500)Regex group 1 → firmware
scrapli_platformCharField(50, default="generic")Plataforma Scrapli (cisco_ios…)
ssh_show_version_cmdCharField(200)Comando show version
ssh_show_interfaces_cmdCharField(200)Comando interfaces
ssh_show_inventory_cmdCharField(200)Comando inventario
ssh_model_regexCharField(500)Regex IGNORECASE group 1 → modelo
ssh_version_regexCharField(500)Regex IGNORECASE group 1 → versión
default_device_typeCharField(50, choices)router/switch/firewall/access_point
device_type_keywordsJSONFieldtipo → lista de keywords para inferencia
os_typesArrayField(CharField)OS conocidos (IOS, IOS-XE, NX-OS)
priorityIntegerFieldOrden detección; menor = primero (específicos ≈10, genéricos ≈50)
is_activeBooleanFieldVendors inactivos se saltan
notesTextFieldNotas internas

Meta:

  • Tabla: vendor_profiles.
  • Orden: ["priority", "display_name"].
  • Sin partición por organización (scope global).

Dependencias entrantes

ArchivoCapaUso
network/services/vendor_registry.pyServicio/cachéLee todos los activos; caché L1 in-process con regex pre-compilados + L2 Valkey TTL 1h
network/apps.pySignalpost_save/post_delete → vendor_registry.invalidate()
network/api/vendor.pyAPI RESTCRUD completo + edición OIDs y MIBs
network/services/device_discovery/auto_classifier.pyDiscoveryFallback a genérico si no hay match
network/services/mib_assistant.pyIAPropone OIDs tras confirmación usuario
terminal/api/sentinel.pySentinelLee fast_poll_oids para configurar 15s por vendor
network.models.CustomMibModeloFK vendor_profile CASCADE

Dependencias salientes

  • django.contrib.postgres.fields.ArrayField — requiere PostgreSQL.
  • django.core.cache (Valkey) — vendor_registry persiste payload TTL 1h.
  • Sin FKs salientes; modelo raíz.

Ejemplos

# Detección desde sysObjectID (O(1))
vendor = vendor_registry.detect_vendor_from_sys_object_id("1.3.6.1.4.1.9.1.1208")
# → {"slug": "cisco", "scrapli_platform": "cisco_ios", ...}

# Detección desde sysDescr (regex ordenados por priority)
vendor = vendor_registry.detect_vendor_from_sys_descr("Cisco IOS Software, Version 15.6")

# OIDs fast-poll 15s
oids = vendor_registry.get_fast_poll_oids("xirrus")
# → {"connected_clients": {"oid": "1.3.6.1.4.1...", "type": "gauge"}}

# OUI a slug
slug = vendor_registry.get_slug_for_vendor_name("Cambium Networks Limited")
# → "cambium"
  • entity--network--model--deviceprofile — consume VendorProfile vía registry en discovery.
  • entity--network--model--custommib — FK a VendorProfile; extiende MIBs.
  • concept--network--auto-provision — usa VendorProfile como lookup en cada fase del pipeline.

Véase también

  • [[entity—network—model—deviceprofile]]
  • [[entity—network—model—custommib]]
  • [[concept—network—auto-provision]]