CreaRack-SL

Device · Modelo racks

Entidadactiveverificado 2026-04-21#racks#model#device#saas

Device · Modelo racks

Propósito

Device representa un dispositivo físico instalado dentro de un Rack. Registra su posición en unidades U, metadatos de modelo en JSON, estado de monitorización y configuración de red con cifrado Fernet para IPs sensibles. Es el nodo central del editor: conecta la visualización de posición con los subsistemas de red, monitorización y terminal SSH.

Contrato

Campos:

CampoTipoNotas
rackFK(Rack, CASCADE)Rack contenedor; la organización se hereda
nameCharField(100)Nombre del dispositivo
u_positionIntegerFieldPosición inferior en unidades U
u_heightIntegerField(default=1)Altura en U
notesTextField(blank)Notas libres
model_dataTextField(default="{}")JSON con metadatos de modelo y puertos enriquecidos
statusCharFieldonline / offline / warning / unknown
last_status_checkDateTimeField(null)Última comprobación
management_configTextField(default="{}")JSON con IP (Fernet si empieza gAAAA), creds, vendor
groupsM2M(RackGroup)Grupos lógicos compartidos con el rack

Métodos y propiedades:

  • has_network_management — True si management_config tiene IP válida y enabled no es False.
  • management_ip — extrae y descifra IP (soporta claves ip_address, ip, host).
  • management_vendor — extrae vendor de management_config (default "generic").
  • _decrypt_if_needed(value) — detecta tokens Fernet (gAAAA…) y delega a CredentialManager.safe_decrypt.

Meta:

  • Índice compuesto idx_device_rack_upos sobre (rack, u_position).
  • __str__ devuelve "{name} in {rack}".

Dependencias entrantes

MóduloArchivoRelación
monitoring.MonitoringTargetmonitoring/models.pyFK("racks.Device", SET_NULL)
network.DeviceProfilenetwork/models.pylinked_device = FK("racks.Device", SET_NULL)
network.PortConnectionnetwork/models.pydevice y connected_device FKs
racks.ConfigBackupracks/models.pyFK(Device, CASCADE)
terminal/api/network.pyterminalLookup para SSH
terminal/views.pyterminalActualización de estado
network/api/devices.pynetworkCRUD config red
core/tasks.pycoreTareas Huey de monitorización
core/api/search.pycoreBúsqueda global

Dependencias salientes

  • racks.Rack — FK directa; organización se resuelve via rack__organization.
  • racks.RackGroup — M2M compartida con el rack.
  • core.security.CredentialManager — descifrado Fernet de IPs en management_config.
  • network.models.DeviceProfile — vinculado vía _try_link_device_profile (racks/services/racks.py).
  • network.services.auto_config.AutoConfigService — invocado tras crear Device con IP para auto-configurar Observatory.

Ejemplos

  • Creación bulk con link automático: RackService.bulk_update_devices hace Device.objects.bulk_create, luego _try_link_device_profile vincula DeviceProfile por profile_id o match de IP, inyecta puertos enriquecidos en model_data e inicia auto-config.
  • Validación de IP duplicada: check_duplicate_management_ip recorre management_config de todos los devices del tenant (caché bulk) y lanza ValueError si la IP ya está asignada.
  • Terminal SSH: terminal/api/network.py obtiene Device por id + rack__organization, extrae management_ip y management_vendor para abrir sesión SSH.
  • entity--racks--model--rack — contenedor directo; organización y soft-delete se heredan.
  • entity--racks--model--stencil — plantilla de la que puede derivar model_data.
  • entity--network--model--deviceprofile — perfil de red descubierto vinculable.
  • entity--monitoring--model--monitoringtarget — target auto-generado al crear Device con IP.

Véase también

  • [[entity—racks—model—rack]]
  • [[entity—racks—model—stencil]]
  • [[entity—network—model—deviceprofile]]
  • [[entity—monitoring—model—monitoringtarget]]