Migraciones a Drupal 8

Marco Villegas
marvil07

Intro

Acerca de

Marco Villegas
marvil07

Esta presentación está bajo una Licencia Creative Commons Attribution-ShareAlike 4.0 International.

Qué

* → D8 Aves

Cómo

  • insertar contenido via UI
  • sql
  • php
  • drupal apis
  • drupal 8 core migrate api

¿Nuevo, estable?

Contrib: migrate: D6, D7, ~2009.
The Economist.com data migration to Drupal (2010)

Core

$ git log --reverse -- core/modules/migrate/ |head -n5
commit 67f30bc0a1f0007f4725a87eb1f0b9525f5a9a8f
Author: Dries <dries@buytaert.net>
Date:   Wed Nov 20 17:08:56 2013 -0500
    
    Migrate in core #2125717 by mikeryan, chx, marvil07, bdone, jessehs, mpgeek, BTMash, fastangel, mongolito404, Moshe Weitzman, eliza411, YesCT, dawehner, cosmicdreams

Estable: 8.6.0 (Sep 2018)

Usos

  • Migrar desde otro sistema.
  • Upgrades, ej. D6 a D7.
  • Sincronización externa.

Arquitectura: Extract, Transform, Load (ETL)

Extraer: Origen

  • csv
  • json
  • xml
  • base de datos
  • sitio drupal 6, 7, 8
  • ...

Transformar: Procesar

  • Convertir datos
    E.g. RFC 2822 a timestamp
  • Limpiar
    E.g. font, blink, marquee
  • Mapear nuevos ids

Cargar: Destino

  • Entidades (contenido)
    E.g. nodos, usuarios.
  • Entidades (configuración)
    E.g. campos, vistas

Arquitectura: Drupal

Cómo

Migrate API ♥ Plugin API

+---------------------------------------------------+
|                  Migración                        |
| +---------+                       +------------+  |
| | Origen1 |  +---------------+    | Destino1   |  |
| |  idk1   |  | Mapeo campo I |    |  idkZ      |  |
| |  campo1 |  |   o.campo1    |    |  campoA    |  |
| |  campo2 |  |   d.campoB    |    |  campoB    |  |
| |  ...    |  +---------------+    |  ...       |  |
| +---------+                       +------------+  |
|               +-------------+                     |
|               | Mapeo o1-d1 |                     |
|               |   idk1      |                     |
|               |   idkZ      |                     |
|               +-------------+                     | 
+---------------------------------------------------+

Demo: Usuarios de otra base de datos

  • migrate_plus
  • migrate_tools

Cómo Extraer: Source Plugins

source:
  plugin: table
  key: demo
  table_name: usuarios
  id_fields:
    id:
      type: integer
  fields:
    - id
    - nombre
    - correo

Cómo Transformar: Process Plugins

process:
  name:
    plugin: skip_on_empty
    source: nombre
    method: row
    message: "No hay nombre"
  mail: correo

Cómo Cargar: Destination Plugins

destination:
  plugin: entity:user

Drupal a Drupal

Cómo

  • migrate_drupal

Demo: Drupal 7 a Drupal 8

Fácil, no tan fácil, difícil

Lo fácil

Migrar entidades:

  • Files
  • Roles
  • Users
  • Taxonomy
  • Nodes

No tan fácil

Migrar relaciones entre datos:

  • Roles dentro de usuarios
  • Términos en nodos
  • Entity Reference (ER) fields
  • Cuerpos: Markup (dom!)
  • Enlaces en Body

Lo difícil

  • Traducciones
  • Revisiones
  • Field Collections/Paragraphs

Un proceso

Quién

  • Cliente
  • Equipos de construcción
  • Equipo de Migración

Análisis

  • Todas las tablas
  • Todas las filas
  • Estructura: traducciones, revisiones, referencias, data anidada
  • ¿Sin soporte aún?

Mapeos

  • Lo trivial
  • Inferencias con bases
  • inconsistencias? documentar!
  • Flujo de preguntas

Iteraciones

  • Implementar mapeos.
  • Mostrar importación: sitio de staging.
  • Revisar.
  • Corregir/refinar.

Puesta en producción

  • Corrida de importación completa.
  • Pasar fuente de datos a sólo lectura.
  • Migrar la data restante.
  • Revisión de calidad.
  • Cambio.

Consejos

  • Entender la fuente, en serio.
  • Priorizar
  • Comunicación (mapeos)
  • No visible != sin importancia
  • Acceso a la data origen ASAP
  • Tomar tiempos de migración

Extras

Errores comunes

  • Estimación
    1'000,000 artículos con 3 campos
    vs.
    500 artículos con 5 campos,
    200 entradas de blog con 10 campos,
    400 reseñas con 4 campos

N migraciones x M campos x C complejidad x F mágico

Process: Migration Lookup

process:
  uid:
    plugin: migration_lookup
    migration: user
    source: node_uid

Documentación

  • Ejemplos en migrate_plus: been/wine

Más

  • Id Map
  • Derivatives
  • Dependencias
  • Highwater mark
  • ¿Huevo o gallina?: Stubs
  • ¿Necesitas algo? Comienza en migrate_plus

Excribiendo un plugin para migrate

Gracias

Agradecimientos

  • mikeryan
  • moshe weitzman
  • drewish

  • chx
  • phenaproxima
  • heddn
  • mikelutz
  • quietone

¿Preguntas?

Referencias