Volver a la wiki

Auto-Provision — Technical Guide

Auto-Provision — Technical Guide

Sistema completo de descubrimiento y aprovisionamiento automático de dispositivos de red. Versión: Fase 1-10 completadas | Fase 8 (SNMPv3) completada en v1.0.37


1. Overview

Qué hace Auto-Provision

Auto-Provision descubre dispositivos de red en una subred, identifica vendor/modelo/capacidades via SNMP/SSH/HTTP, y los provisiona automáticamente en Rack Editor, Observatory y Wireless Monitor.

Requisito: Local Agent

En producción (SaaS en Hetzner), el servidor no puede alcanzar IPs privadas (192.168.x.x). Todo el descubrimiento SNMP/HTTP se enruta a través del Local Agent (localhost:5050) instalado en la red del cliente.

┌──────────┐    ┌────────────────┐    ┌──────────────┐    ┌──────────┐
│  Browser │───▶│   SaaS API     │───▶│  Local Agent │───▶│  Device  │
│          │    │  (Hetzner)     │    │  (localhost) │    │ (SNMP)   │
└──────────┘    └────────────────┘    └──────────────┘    └──────────┘
                        │                     │
                   Enrichment            ICMP / SNMP
                   Business Logic        SSH / HTTP

Dos modos de descubrimiento

ModoDescripciónTiempo típico
Single DeviceDescubrimiento completo de 1 IP (6 etapas)~5-10s
Subnet ScanCIDR /20-/30, ping sweep + bulk enrich~1-2 min para /24

Conceptos clave

ConceptoDescripción
DeviceProfileModelo con ~40 campos que almacena todo lo descubierto de un dispositivo
VendorProfileBase de datos centralizada de vendors (17 curated + 1,600 IANA)
Confidence Score0-100% basado en completitud de datos descubiertos
Deep DiscoveryDescubrimiento extendido con MIBs vendor-specific (hardware, VLANs, wireless)

2. API Reference

Base URL: /api/network/

2.1 Discovery Endpoints

POST /auto-provision/discover

Descubrimiento completo de un dispositivo (6 etapas).

Request (DiscoverRequest):

{
  "ip": "192.168.1.10",
  "snmp_community": "public",
  "snmp_version": "v2c",
  "snmp_v3_username": null,
  "snmp_v3_auth_protocol": null,
  "snmp_v3_auth_key": null,
  "snmp_v3_priv_protocol": null,
  "snmp_v3_priv_key": null,
  "ssh_username": "admin",
  "ssh_password": "password",
  "mac_address": "AA:BB:CC:DD:EE:FF",
  "vendor_hint": "Cisco",
  "rtt_ms": 25.5,
  "quick_mode": false,
  "snmp_data": {},
  "http_data": {}
}

Solo ip es requerido. Todos los demás campos son opcionales.

Vendor autodetect: El vendor/platform se resuelve automáticamente desde SNMP sysDescr/sysObjectID durante el discovery. Si no hay datos SNMP, se usa como fallback el stencil_name del Device vinculado en el Rack Editor. El campo device_type se ha eliminado del request — ya no se selecciona manualmente.

SNMPv3 example (authPriv):

{
  "ip": "10.0.0.1",
  "snmp_version": "v3",
  "snmp_v3_username": "snmpuser",
  "snmp_v3_auth_protocol": "SHA256",
  "snmp_v3_auth_key": "authPassphrase",
  "snmp_v3_priv_protocol": "AES128",
  "snmp_v3_priv_key": "privPassphrase"
}

Con snmp_version: "v3", el pipeline no rota communities — usa directamente las credenciales USM proporcionadas.

Response (200): DeviceProfileOut — ver Schema completo.

Errores: 400 si el host no es alcanzable.


POST /auto-provision/bulk-enrich

Enriquecimiento rápido de múltiples hosts (post-ping sweep).

Request (BulkEnrichRequest):

{
  "hosts": [
    { "ip": "192.168.1.100", "mac": "AA:BB:CC:00:00:01", "vendor_hint": "Xirrus", "rtt_ms": 15.2, "snmp_data": null, "http_data": null },
    { "ip": "192.168.1.101", "mac": "AA:BB:CC:00:00:02", "vendor_hint": "Cambium", "rtt_ms": 18.5 }
  ],
  "snmp_community": "public",
  "snmp_version": "v2c",
  "snmp_v3_username": null,
  "snmp_v3_auth_protocol": null,
  "snmp_v3_auth_key": null,
  "snmp_v3_priv_protocol": null,
  "snmp_v3_priv_key": null
}

Response (200): Lista de DeviceProfileOut.

Concurrencia: Max 5 paralelos (semáforo). Usa quick_mode=True para velocidad (~2s/device vs ~7s).


POST /auto-provision/bulk-discover

Descubrimiento de subred completa (backend-only, sin Agent).

Request (BulkDiscoverRequest):

{
  "subnet": "192.168.1.0/24",
  "snmp_community": "public",
  "snmp_version": "v2c",
  "max_concurrent": 20
}

Los 3 endpoints de discovery aceptan los mismos 6 campos SNMPv3 opcionales (snmp_version, snmp_v3_username, snmp_v3_auth_protocol, snmp_v3_auth_key, snmp_v3_priv_protocol, snmp_v3_priv_key).

Response (200): Lista de DeviceProfileOut para hosts alcanzables.

Soporta CIDR /20 a /30.


POST /auto-provision/profiles/{id}/deep-discover

Descubrimiento extendido con MIBs vendor-specific (hardware, wireless, environment).

Response (200):

{
  "status": "dispatched",
  "profile_id": 42,
  "mode": "ws"
}

Límite: Máximo 200 OIDs por vendor (prioridad: hardware > wireless > ssids > clients).


GET /auto-provision/profiles/{id}/deep-discover-status

Estado del job de deep discovery.

Response (200):

{ "status": "running", "done": 1, "failed": 0 }

Valores de status: idle, running, complete, failed.


2.2 Profile Management

GET /auto-provision/profiles

Lista todos los DeviceProfiles con filtros opcionales.

Query params:

Response (200): Lista paginada de DeviceProfileOut.


GET /auto-provision/profiles/{id}

Detalle completo de un DeviceProfile.


PUT /auto-provision/profiles/{id}

Actualizar campos básicos (correcciones manuales).

Request (ProfileUpdateRequest):

{
  "hostname": "core-router-1",
  "vendor": "Cisco",
  "model": "ISR 4451",
  "serial_number": "FDO211900XYZ"
}

DELETE /auto-provision/profiles/{id}

Eliminar DeviceProfile. No elimina Device ni MonitoringTarget vinculados.


GET /device-profile/by-device/{device_id}

Buscar DeviceProfile vinculado a un Device del Rack Editor.


2.3 Configuration Endpoints

POST /auto-provision/profiles/{id}/configure-observatory

Auto-crear MonitoringTarget en Observatory.

Response (200):

{
  "success": true,
  "target_id": 123,
  "target_name": "192.168.1.10",
  "snmp_enabled": true,
  "selected_interfaces_count": 2,
  "message": "MonitoringTarget configured successfully"
}

Acciones automáticas:

  1. Crea MonitoringTarget (o actualiza existente)
  2. Habilita ping (siempre) + SNMP (si soportado)
  3. Auto-selecciona interfaz física primaria para bandwidth polling (ver §6.1)
  4. Copia monitoring_oids y fast_poll_oids del VendorProfile al config del target
  5. Notifica Agent via WebSocket (update_targets)

POST /auto-provision/profiles/{id}/suggest-stencil

Sugiere stencil del Rack Editor por fuzzy matching vendor/modelo.

Response (200):

{
  "stencil_id": 42,
  "stencil_name": "Cisco ISR 4451-X",
  "manufacturer": "Cisco",
  "confidence": 85,
  "u_height": 2,
  "suggested": true
}

GET /auto-provision/profiles/{id}/validation

Validar calidad y completitud del perfil.

Response (200):

{
  "valid": false,
  "score": 65,
  "issues": ["Low confidence score (65%)", "No interfaces detected"],
  "recommendations": ["Re-run with SNMP/SSH credentials", "Run configure-observatory"]
}

POST /auto-provision/profiles/{id}/propagate-ports

Propagar interfaces SNMP al Rack Editor Device (formato enriched ports).

Response (200):

{
  "profile_id": 42,
  "linked_device_id": 123,
  "interfaces_count": 8,
  "propagated": true,
  "ports_created": 8
}

POST /device-profile/{id}/read-port-config

Leer configuración de puertos via SNMP Q-BRIDGE-MIB o SSH.

Request (ReadPortConfigRequest):

{
  "protocol": "auto",
  "ssh_username": "admin",
  "ssh_password": "password"
}

Response (200):

{
  "portCount": 48,
  "sfpCount": 4,
  "readMethod": "snmp",
  "ports": {
    "Ethernet1": {
      "name": "Ethernet1",
      "adminStatus": "up",
      "operStatus": "up",
      "vlan": 100,
      "description": "Uplink to Core",
      "speed": "10G",
      "mode": "trunk"
    }
  }
}

POST /device-profile/{id}/refresh-interfaces

Re-escanear ifTable SNMP sin redescubrimiento completo.


2.4 Vendor Profile Endpoints

GET /vendor-profiles/

Lista todos los VendorProfiles. Query param: active_only (bool, default true).


GET /vendor-profiles/{slug}/

Detalle de un VendorProfile.


POST /vendor-profiles/

Crear VendorProfile (admin only).

Request (VendorProfileInput):

{
  "slug": "arista",
  "display_name": "Arista Networks",
  "aliases": ["arista"],
  "snmp_communities": ["arista"],
  "sys_descr_patterns": ["Arista"],
  "sys_object_id_prefix": "1.3.6.1.4.1.30065",
  "scrapli_platform": "arista_eos",
  "default_device_type": "switch",
  "os_types": ["eos"],
  "priority": 10,
  "is_active": true
}

PUT /vendor-profiles/{slug}/

Actualizar VendorProfile (admin only).


GET /vendor-profiles/communities

Obtener todas las comunidades SNMP de todos los vendors (deduplicadas). Usado por el Agent para discovery.


2.5 Custom MIB Endpoints

POST /vendor-profiles/{slug}/upload-mib

Subir y compilar MIB custom. multipart/form-data, max 2MB.

Response (200):

{
  "id": 1,
  "module_name": "MY-CUSTOM-MIB",
  "compiled": true,
  "extracted_oids": [
    { "name": "myObj1", "oid": "1.3.6.1.4.1.9999.1.1.1.1", "type": "get" }
  ]
}

GET /vendor-profiles/{slug}/custom-mibs

Lista MIBs custom del vendor.


DELETE /vendor-profiles/{slug}/custom-mibs/{mib_id}

Eliminar MIB y limpiar OIDs asociados.


POST /vendor-profiles/{slug}/custom-mibs/{mib_id}/apply-oids

Aplicar OIDs seleccionados al deep discovery del vendor.

Request:

{
  "category": "custom",
  "oids": [
    { "name": "myObj1", "oid": "1.3.6.1.4.1.9999.1.1.1.1", "type": "get" }
  ]
}

Máximo 200 OIDs totales por vendor (MAX_DEEP_DISCOVERY_OIDS).


2.6 MAC OUI Lookup

POST /mac/oui-lookup

Lookup batch de MACs a vendor via IEEE OUI database (38,893 entries).

Request:

{ "macs": ["AA:BB:CC:DD:EE:FF", "00:1A:6B:00:00:01"] }

Response (200):

{
  "results": {
    "AA:BB:CC:DD:EE:FF": "Apple Inc.",
    "00:1A:6B:00:00:01": "Cisco Systems Inc."
  }
}

Máximo 500 MACs por request.


3. Data Schemas

3.1 DeviceProfileOut

Schema completo de respuesta para perfiles de dispositivos.

CampoTipoDescripción
idintID del perfil
ip_addressstrDirección IP
mac_addressstr?Dirección MAC
hostnamestr?Hostname del dispositivo
vendorstr?Nombre del vendor
modelstr?Modelo
serial_numberstr?Número de serie
os_typestr?Tipo de OS (ios, eos, junos, etc.)
os_versionstr?Versión del OS
device_typestrTipo: router, switch, firewall, access_point, other
supports_snmpboolSoporte SNMP detectado
supports_sshboolSoporte SSH detectado
interface_countintInterfaces descubiertas
confidence_scoreintScore 0-100
discovery_methodstrMétodo: ping, snmp, ssh, http
suggested_stencil_idint?Stencil sugerido
stencil_confidenceintConfianza del stencil match
is_linked_to_observatoryboolTiene MonitoringTarget
is_linked_to_rack_editorboolTiene Device en rack
linked_device_namestr?Nombre del Device vinculado
linked_rack_namestr?Nombre del Rack
discovered_atdatetimeFecha de descubrimiento
last_verifieddatetime?Última verificación
deep_snmp_datadictDatos SNMP extendidos por categoría
mib_modules_loadedlistMódulos MIB cargados
has_deep_databoolDeep discovery completado
snmp_communitystr?Comunidad SNMP
snmp_versionstr?Versión SNMP (v2c, v3)
snmp_v3_usernamestr?SNMPv3 USM username
snmp_v3_auth_protocolstr?SNMPv3 auth (MD5, SHA, SHA256…)
snmp_v3_priv_protocolstr?SNMPv3 priv (DES, AES128…)
snmp_sys_descrstr?sysDescr OID
snmp_sys_object_idstr?sysObjectID OID
snmp_uptimeint?sysUptime (centésimas de segundo)
interfacesdictInterfaces de ifTable
lldp_neighborslistVecinos LLDP
cdp_neighborslistVecinos CDP
firmware_versionstr?Versión de firmware
capabilitieslistCapacidades (BRIDGE, ROUTER, etc.)
vendor_slugstr?Slug normalizado del vendor

Source: network/api/common.py → DeviceProfileOut

3.2 VendorProfileOut

CampoTipoDescripción
slugstrIdentificador único
display_namestrNombre legible
aliaseslistNombres alternativos
snmp_communitieslistComunidades SNMP vendor-specific
sys_descr_patternslistPatrones regex para sysDescr
sys_object_id_prefixstrPrefijo OID enterprise
scrapli_platformstrPlataforma para SSH
default_device_typestrTipo por defecto
device_type_keywordsdictKeywords → device_type
mib_moduleslistMódulos MIB
deep_discovery_oidsdictOIDs por categoría
monitoring_oidsdictOIDs para monitoreo continuo
priorityintPrioridad (1-99 curated, 100+ IANA)
is_activeboolActivo

Source: network/api/vendor.py → VendorProfileOut


4. Discovery Pipeline

El servicio DeviceDiscoveryService ejecuta 6 etapas secuenciales:

Stage 1: ICMP Ping    → Verificar alcanzabilidad + RTT
Stage 2: SNMP Probing → sysDescr, sysObjectID, ifTable, hardware OIDs
Stage 3: SSH Fallback  → show version/inventory/interfaces (si SNMP falla)
Stage 4: LLDP/CDP     → Descubrimiento de vecinos
Stage 5: Stencil Match → Fuzzy matching con stencils del Rack Editor
Stage 6: Confidence    → Calcular score 0-100%

Stage 2: SNMP Probing (detalle)

SNMPv2c (default):

  1. Community rotation → Prueba la community proporcionada, luego las del vendor detectado, luego fallbacks genéricos
  2. sysObjectID → Lookup O(1) en VendorProfileRegistry por prefijo enterprise
  3. sysDescr → Regex matching contra VendorProfile.sys_descr_patterns
  4. ifTable walk → Nombres, tipos, velocidades, MTUs de todas las interfaces
  5. Hardware OIDs → CPU, memoria total (HOST-RESOURCES-MIB)

SNMPv3 (cuando snmp_version == 'v3'):

  1. Credenciales directas → Usa UsmUserData con las credenciales proporcionadas (NO rota communities)
  2. Auth builder → build_snmp_auth() en network/services/device_discovery/snmp_auth.py construye el objeto de autenticación
  3. Mismo pipeline → sysObjectID, sysDescr, ifTable, hardware — los datos son idénticos a v2c
  4. Si falla → Retorna error snmpv3_auth_failed (no fallback a v2c automático)

Confidence Scoring

Dato descubiertoPuntos
Ping success+10
SNMP response+20
sysDescr match+10
Modelo detectado+15
Vendor detectado+10
Hostname detectado+5
Interfaces > 0+5
Hardware data+5
LLDP/CDP data+5
SNMP method verification+5
Máximo100

Deep Discovery (Stage 7, on-demand)

Activado via POST /profiles/{id}/deep-discover:

  1. Descarga MIBs vendor-specific via pysmi (on-demand)
  2. Ejecuta SNMP walks/gets extendidos por categoría
  3. Categorías: hardware, vlans, wireless, clients, ssids, cpu, memory, environment
  4. Almacena resultados en DeviceProfile.deep_snmp_data (JSONField)

Source: network/services/device_discovery.py → DeviceDiscoveryService


5. Frontend Wizard

Módulos

static/js/network/auto_provision/
├── discovery.js      (~650 LOC) — Lógica de discovery single/subnet
├── results.js        (~400 LOC) — Tabla de resultados + modal de detalle
├── actions.js        (~350 LOC) — Acciones batch (assign racks, wireless)
├── deep_discovery.js (~500 LOC) — MIB upload, OID probe
└── sessions.js       (~200 LOC) — Persistencia localStorage, keepalive

Orquestados por auto_provision.js (AutoProvisionWizard class).

Wizard de 3 pasos

Step 1: Discovery

Step 2: Results

Step 3: Actions

Persistencia


6. Integrations

Con Observatory

DeviceProfile → POST /configure-observatory → MonitoringTarget creado
                                              ├── ping_enabled: true
                                              ├── snmp_enabled: true (si soportado)
                                              ├── config.snmp_interface: <ifIndex>
                                              ├── config.selected_interfaces: [{ifIndex, ifDescr, ifSpeed, ifOperStatus}]
                                              ├── config.monitoring_oids: {...}  (de VendorProfile)
                                              └── config.fast_poll_oids: {...}   (de VendorProfile)

El Agent recibe notificación via WebSocket (update_targets) y añade el target a sus loops de monitoreo.

6.1 Pipeline de selección de interfaz SNMP (snmp_interface)

El campo snmp_interface determina qué ifIndex usa el Agent para polling de bandwidth (ifInOctets/ifOutOctets). La selección automática sigue este pipeline:

Discovery (Agent)          AutoConfigService (SaaS)           Agent Sentinel
─────────────────          ────────────────────────           ──────────────
1. SNMP ifTable walk  ──►  2. _select_primary_interface()  ──►  3. Polls ifIndex
   Guarda interfaces        Heurística vendor-agnostic          OIDs: ifHCInOctets.{ifIndex}
   en DeviceProfile         Elige interfaz física                     ifInOctets.{ifIndex}
   (dict: ifIndex→data)     Guarda en config.snmp_interface          ifInErrors.{ifIndex}
                                                                      ifInDiscards.{ifIndex}

Paso 2 — Heurística de _select_primary_interface() (network/services/auto_config.py):

  1. Excluye interfaces virtuales: wds, bridge, br-, lo, loopback, null, vlan, tunnel, tun, tap, bond, lag, port-channel, management, mgmt, iap, bvi, nve, stack, cpu, internal, unrouted
  2. Prefiere interfaces físicas ethernet: gig, eth, ge-, xe-, te-, fa, gigabitethernet, fastethernet, tengigabitethernet
  3. Ordena por: physical first → UP status (ifOperStatus=1) → mayor velocidad (ifSpeed)
  4. Retorna el primer candidato como config.snmp_interface

Ejemplo — Xirrus XR4820 (XR11):

Interfaces descubiertas:
  ifIndex=1  wds1      (virtual, excluida)
  ifIndex=20 gig2      100 Mbps, UP
  ifIndex=28 gig1      1000 Mbps, UP  ← Seleccionada (physical, UP, highest speed)

config.snmp_interface = 28

Quirks por vendor (documentados en MULTI_VENDOR_SNMP_GUIDE.md §4):

Vendor/ModeloifIndex gig1ifIndex gig2Notas
Xirrus XR48472820HC counters siempre 0, usa legacy
Xirrus XR4836/XR48303323Mismo quirk HC
Xirrus XR63024—Single uplink
Xirrus XD4-24025—Single uplink
Xirrus XD2-2409—Single uplink
Cambium XE3-45 o 8—HC counters funcionan

Propagación al Agent:

Con Rack Editor

DeviceProfile → "Add to Rack" → Floating panel en Rack Editor
                                 ├── auto-fill name + management_config (IP)
                                 ├── auto-select stencil sugerido
                                 └── propagate interfaces → enriched port format

Formato enriched: {label, live: {vlan, description, speed, mode}, desired: {...}}.

Con Wireless Monitor

DeviceProfile (device_type=access_point) → "Send to Wireless" → /monitoring/wireless/

Deep SNMP data (radios, SSIDs, clients) se renderiza en la vista de detalle del AP.

Con Local Agent

Flujo de 5 fases para discovery desde producción:

FaseEndpoint AgentDescripción
1POST /network/ping-icmpPing sweep (lista de IPs)
2POST /network/arp-tableMAC addresses de ARP
3POST /network/snmp-discoverSNMP bulk (sysDescr, ifTable)
4POST /network/http-fingerprintHTTP headers + body
5SaaS API /bulk-enrichEnrichment final + scoring

7. Vendor Support

Detección de vendor (prioridad)

  1. sysObjectID → Enterprise OID prefix lookup (más fiable)
  2. sysDescr → Regex patterns (fallback SNMP)
  3. Device stencil_name → Fallback from linked Rack Editor Device (when SNMP unavailable)
  4. HTTP fingerprint → Server headers + body patterns (14 vendors)
  5. MAC OUI → IEEE OUI database (38,893 entries, último recurso)

Vendor autodetect pipeline: El vendor se resuelve siempre automáticamente. En discovery.py, se consulta primero el DeviceProfile (SNMP data). Si no tiene vendor, se busca el Device vinculado en el Rack Editor y se extrae el vendor del stencil_name. El resultado se persiste de vuelta al DeviceProfile.vendor. El selector manual de vendor se ha eliminado del SSH Config modal y del wizard de discovery.

Base de datos de vendors

TipoCantidadPrioridad
Curated (detallados)1710-90
IANA-imported (básicos)~1,600100

Vendors curated: Xirrus, Cambium, Cisco, Juniper, Arista, Huawei, HP, Ubiquiti, MikroTik, Fortinet, Palo Alto, Ruckus, Meraki, Dell, Netgear, TP-Link, ZyXEL.

Crear vendor custom

POST /api/network/vendor-profiles/
{
  "slug": "my-vendor",
  "display_name": "My Vendor",
  "sys_object_id_prefix": "1.3.6.1.4.1.99999",
  "snmp_communities": ["myvendor"],
  ...
}

Source: network/services/vendor_registry.py → VendorProfileRegistry


8. Troubleshooting

ProblemaCausa probableSolución
Confidence 10-20%SaaS no alcanza IPs privadasVerificar que el Local Agent está conectado (Observatory → Fleet)
SNMP timeoutCommunity incorrecta o SNMP deshabilitadoProbar community del vendor; verificar ACL SNMP del dispositivo
Cambium 10% confidenceHTTP-only sin SNMPConfigurar community Cambium o habilitar SNMP en el AP
Xirrus ifTable vacíaInterfaces virtuales filtradasNormal — solo gig1/gig2 son físicas; wds/bridge/iap son virtuales
Deep Discovery 0 resultadosAgent WS desconectadoVerificar WS en Fleet Manager; usar POST /saas/reconnect en Agent
Stencil no encontradoVendor/modelo no tiene stencilCrear stencil manualmente en Rack Editor
Bulk scan lento (>2min /24)Daphne timeoutVerificar --http-timeout 300 en docker-compose
SynchronousOnlyOperationFK resolver en async contextUsar _id fields estáticos en schemas (ya corregido en DeviceProfileOut)
Agent SNMP silently failspysnmp no incluido en buildVerificar pysnmp en build_agent.bat hidden-imports

Confidence por vendor (tipico)

VendorCon SNMPSin SNMPNotas
Xirrus70-75%10-20%Requiere community xirrus o public
Cambium65%20-30% (HTTP)Enterprise OID .17713.22
Cisco80-90%30-40% (SSH)Mejor soporte SNMP/SSH
Palo Alto20%20%SNMP limitado; mejor via SSH
VMware ESXi20%20%Solo SNMP básico

9. Source Files Reference

Backend

ArchivoDescripción
network/api/discovery.pyEndpoints de discovery
network/api/profiles.pyCRUD de perfiles + configuración
network/api/vendor.pyCRUD de vendors + custom MIBs
network/api/common.pySchemas Pydantic (DeviceProfileOut, etc.)
network/services/device_discovery.pyDeviceDiscoveryService — pipeline 6 etapas
network/services/auto_config.pyAutoConfigService — configure observatory + suggest stencil
network/services/vendor_registry.pyVendorProfileRegistry — L1/L2 cache + lookups
network/services/port_config_reader.pyPortConfigReader — SNMP Q-BRIDGE + SSH parsing
network/services/mib_manager.pyMibManager — pysmi download/compilation
network/services/oui_lookup.pyMAC OUI vendor lookup
network/models.pyDeviceProfile, VendorProfile, CustomMib

Frontend

ArchivoDescripción
static/js/network/auto_provision.jsClase principal AutoProvisionWizard
static/js/network/auto_provision/discovery.jsLógica de discovery
static/js/network/auto_provision/results.jsTabla de resultados
static/js/network/auto_provision/actions.jsAcciones batch
static/js/network/auto_provision/deep_discovery.jsMIB upload + OID probe
static/js/network/auto_provision/sessions.jsPersistencia localStorage
templates/terminal/index.htmlModal wizard (HTML)
static/css/pages/auto_provision.cssEstilos del wizard

Documentación relacionada

DocumentoContenido
archive/plans/AUTO_PROVISION_PLAN.mdPlan original de implementación (fases 1-10)
archive/plans/PORT_CONFIG_MANAGEMENT_PLAN.mdPlan de Port Config (fases A-D)
architecture/WIRELESS_MONITOR.mdWireless Monitor que consume deep_snmp_data
backend/MULTI_VENDOR_SNMP_GUIDE.mdMulti-vendor SNMP: vendor profiles, OIDs, quirks por modelo
backend/LOCAL_AGENT.mdAgent Sentinel: loops SNMP, bandwidth polling, target sync

10. Dependencias

PaqueteVersiónLicenciaUso
pysnmp≥7.1.22,<8.0.0BSDSNMP operations
pysnmp-mibs≥0.1.6BSDStandard MIBs
pysmi-lextudio≥1.4.3,<2.0.0BSD-2-ClauseMIB compilation
scrapli2024.7.30MITMulti-vendor SSH
scrapli-community2024.7.30MITCommunity SSH drivers
icmplib(bundled)MITICMP ping

Última actualización: 18-03-2026 Mantenido por: Equipo CreaRack

Véase también

Subir