Backup & Restore - CreaRack Pro
Backup & Restore - CreaRack Pro
Documento: Guia completa de la funcion de backup/restore Ultima actualizacion: 20-08-2026
Resumen
El sistema de backup exporta toda la configuracion del tenant (organizacion) como un archivo ZIP que contiene un backup_data.json con todos los datos y una carpeta uploads/ con imagenes de stencils y planos.
Endpoints
| Endpoint | Metodo | Descripcion |
|---|---|---|
/api/racks/backup/full | GET | Descarga backup ZIP completo |
/api/racks/restore/full | POST | Restaura desde ZIP (upload) |
Acceso: Solo usuarios admin de la organizacion.
Que incluye el Backup
Datos incluidos (16 modelos)
| # | Modelo | Clave JSON | Campos principales |
|---|---|---|---|
| 1 | Organization | organization | name, address, logo_path, settings |
| 2 | RackGroups | groups | name, color |
| 3 | DeviceGroups | device_groups | name, color |
| 4 | BoxCategories | box_categories | name |
| 5 | Stencils | stencils | name, category, image_path, manufacturer, default_u_height |
| 6 | Racks | racks | name, location, height_u, status, notes, power_consumption, is_template, deleted_at |
| 7 | Devices | racks[].devices | name, u_position, u_height, notes, model_data, status, management_config |
| 8 | Blueprints (Maps) | blueprints | name, image_path, scale, bg_opacity, routing_mode, dark_mode, cable_spread/curvature/width |
| 9 | BlueprintPlacements | blueprints[].placements | rack_id, pos_x, pos_y, rotation, style_props |
| 10 | MapAnnotations | blueprints[].annotations | type, data (JSON) |
| 11 | ConfigBackups | config_backups | config_text, backup_type, vendor (ultimos 5 por device) |
| 12 | ScriptTemplates | script_templates | name, description, script_content, language |
| 13 | Scripts | scripts | name, vendor, category, description, commands |
| 14 | MonitoringTargets | monitoring_targets | name, ip_address, ping/snmp/http_enabled, interval, config |
| 15 | MonitoringAlerts | monitoring_alerts | name, condition_type, threshold, severity |
| 16 | DeviceProfiles | device_profiles | ~53 campos: ip, vendor, model, SNMP, SSH, interfaces, deep_snmp_data, assigned_page (Ficha Central), role, location, notes, manual_fields, group_ids, creds propias de la ficha (v1.72.1)… |
Archivos incluidos
| Contenido | Ruta en ZIP |
|---|---|
| Datos JSON | backup_data.json |
| Imagenes de stencils | uploads/stencils/ |
| Imagenes de planos/maps | uploads/backgrounds/ |
| Logos de organizacion | uploads/logos/ |
Tipos de MapAnnotation (cables y otros)
| type | Descripcion | Contenido de data |
|---|---|---|
rack_connection | Cable entre racks | {"from": rack_id, "to": rack_id} |
wall | Muro/pared | Coordenadas JSON |
text | Etiqueta de texto | Texto + posicion |
zone | Zona/area coloreada | Coordenadas + color |
Que NO incluye el Backup
| Modelo | Razon |
|---|---|
| User / Cuentas | Seguridad: no se exportan credenciales |
| AlertEvent | Historial de alertas (datos de tiempo real) |
| MetricSample / AggregatedMetric | Metricas historicas (almacenadas en VictoriaMetrics) |
| VendorProfile | Datos globales del sistema, no especificos del tenant |
| AgentInstance | Runtime: se re-registra automaticamente al conectar |
| SystemLog | Auditoria interna del sistema |
| Datos de localStorage | Curvas Bezier manuales de cables, layouts de dashboard |
Comportamiento de la Restauracion
Reglas generales
- IDs nuevos: Todos los modelos reciben PKs nuevas al restaurar. Los IDs del backup se descartan.
- Merge, no replace: Los datos se anaden junto a los existentes. NO se borran datos previos.
- Remapeo de FKs: Se mantienen tablas de mapeo (
rack_map,device_map, etc.) para preservar integridad referencial. - Deduplicacion: Modelos con restriccion
uniqueusanget_or_create()— no se duplican: RackGroup, DeviceGroup, ScriptTemplate, MonitoringTarget, DeviceProfile (por nombre/IP).
Remapeo de IDs en cables
Los cables (rack_connection) contienen rack IDs en su campo data ({"from": 17, "to": 71}).
Al restaurar, estos IDs se remapean automaticamente a los nuevos rack IDs del entorno destino.
Si alguno de los racks referenciados no existe en el backup, el cable se omite silenciosamente.
Flujo de restauracion (orden)
1. Organization (metadata)
2. RackGroups → rack_group_map
3. DeviceGroups → device_group_map
4. BoxCategories → box_category_map
5. Stencils → stencil_map
6. Racks + Devices → rack_map + device_map
7. Blueprints + Placements + Annotations (cables remapeados)
8. ConfigBackups (rack_id + device_id remapeados)
9. ScriptTemplates (get_or_create por nombre)
10. Scripts
11. MonitoringTargets (get_or_create por nombre+IP)
12. MonitoringAlerts (target_id remapeado)
13. DeviceProfiles (get_or_create por IP; assigned_page + campos manuales + creds propias + grupos, v1.72.1)
14. Archivos uploads/ (extraidos al MEDIA_ROOT)
Uso desde la UI
Ruta actualizada 18-08-2026 (verificada por Edu al exportar): el menu vive ahora en Configuration → File Operations, no en el dropdown Config del Dashboard.
Exportar Backup
- Configuration → File Operations → Full System Backup
- Se descarga un archivo
crearack_backup_<org>_YYYYMMDD_HHMMSS.zip
Restaurar Backup
- Configuration → File Operations → opcion de restore
- Seleccionar archivo ZIP
- Confirmar restauracion
- Los datos se anaden a la organizacion actual
⚠️ Restaurar el mismo backup DOS veces duplica racks, devices y blueprints (medido 18-08-2026 en STAGE con backup real: 100→200 racks, 212→424 devices, 4→8 blueprints). Solo deduplican stencils, grupos, monitoring targets (nombre+IP), device profiles y script templates. Regla: un backup se restaura UNA vez por organizacion — salvo que uses el restore selectivo (task #236, disponible desde v1.71.0): el modal deja elegir que racks entran, muestra un desplegable “What’s inside this backup” con el inventario completo de la maleta, y desde v1.73.0 tambien puedes marcar cero racks para traer solo los dominios transversales (stencils, grupos, monitorizacion, Signage, ITSM) sin duplicar nada de rack. Detalle en [[feature—racks—restore-selectivo-v171]] y [[entity—racks—service—apply-full-restore-from-zip]]. El JSON incluye ademas la clave
ai_prompts(no listada en la tabla de 16 modelos de arriba).
Notas tecnicas
- Archivo principal:
racks/api/export/backup.py(backup) yracks/api/export/restore.py(restore) - Tamano tipico: ZIP de ~50KB-5MB dependiendo de imagenes
- Formato JSON:
backup_data.jsoncon indentacion de 2 espacios - Compatibilidad: El restore tolera campos faltantes con defaults
- Config Backups: Solo los ultimos 5 snapshots por device se incluyen
Historial de bugs corregidos
| Fecha | Bug | Fix |
|---|---|---|
| 20-02-2026 | Cables de maps no aparecian al restaurar en otro entorno | Rack IDs dentro de rack_connection data no se remapeaban. Anadido remapeo from/to via rack_map |
| 20-08-2026 (v1.72.1, task #236, PR #400) | assigned_page y 12 campos mas de DeviceProfile (Ficha Central: role/location/notes/manual_fields/grupos + creds SNMPv3/SSH propias de la ficha) no se exportaban — las fichas Wireless/UPS/DSM llegaban vacias tras un restore | Campos anadidos al serializador de backup y al restore; ZIPs legacy sin assigned_page lo derivan del device_type (derive_assigned_page). Cazado por Edu en el click-test del ensayo. Detalle en [[entity—racks—service—run-full-backup]] y [[entity—racks—service—apply-full-restore-from-zip]] |
| 20-08-2026 (v1.73.0, task #236, PR #402) | Restaurar con 0 racks marcados (solo dominios transversales) se interpretaba como “sin seleccion” y disparaba un restore completo — if rack_ids: trataba la lista vacia igual que None, tanto en el endpoint como en la tarea Huey | Cambiado a rack_ids is not None en apply_full_restore_from_zip y en run_full_restore; nuevo flag selective en el endpoint para que el cliente declare la seleccion vacia explicitamente. Detalle en [[entity—racks—service—apply-full-restore-from-zip]] |
Mantenido por: Equipo CreaRack
Véase también
- [[crearack-tech—guides—disaster-recovery]]
- [[crearack-tech—admin—cache-and-database]]
- [[crearack-tech—backend—database-architecture]]
- [[runbook—infra—rotate-mcp-token]]
- [[entity—core—model—organization]]
- [[entity—racks—service—run-full-backup]]
- [[entity—racks—service—apply-full-restore-from-zip]]
- [[feature—racks—restore-selectivo-v171]]