Este documento introduce la API de Migrate en Drupal 8. Explica qué es Migrate API y cómo permite migrar datos a Drupal 8 desde otros orígenes de datos. Describe los componentes clave de una migración, incluidos los plugins de origen, proceso y destino. Además, explica cómo preparar y ejecutar una migración, ya sea mediante Drush o la interfaz, y proporciona enlaces para obtener más información.
2. Sobre mí Me llamo Leandro Luvigne
Desarrollador Backend en SDOS
IRC: lluvigne
Drupal.org: lluvigne
Twitter: lluvigne
2
3. Índice
1. Que es Migrate API
2. Como preparar una migración
○ Herramientas adicionales.
○ Estructura de ficheros.
○ Archivo de configuración para definir
una migración.
○ Source plugins.
○ Process plugins.
○ Destination plugins.
3. Ejecución de una migración
○ Base de datos origen.
○ Otros orígenes de datos.
○ Ejecución con Drush.
○ Ejecución desde interfaz.
○ Ejecución de otras operaciones.
4. Demo
3
5. Que es Migrate API
● Servicios que nos proporcionan la
posibilidad de migrar datos a un Drupal 8
● A partir de Drupal 8 se incluye en core
○ Migrate API
○ Migrate Drupal
○ Migrate Drupal UI
● Se trata de servicios ETL: Extract -
Transform - Load
○ Extract
■ Source Plugins
○ Transform
■ Process Plugins
○ Load
■ Destination Plugins
5
7. Herramientas adicionales
● Migrate tools
○ Provee utilidades para gestionar y
ejecutar migraciones
○ Nuevos comandos Drush:
migrate-import
migrate-status
migrate-rollback
● Migrate plus
○ Ofrece más funcionalidad a Migrate
API
○ Permite definir migraciones como
entidades de configuración
○ Nuevo evento PREPARE_ROW
○ Nuevos plugins de tipo process,
source y destination
7
8. Estructura de ficheros
● Necesitaremos crear un módulo donde
definir la migración
● Lo mínimo que necesitamos para definir
una migración son los archivos de
configuración
● Si necesitamos customizar datos o definir
una entidad custom a crear, se pueden
definir plugins
MODULE_NAME
|-- config
| |-- install
| |-- Ficheros.YML
|-- src
| |-- Plugin
| |-- migrate
| |-- source
| | |-- Source.php (opcional)
| |-- destination
| | |-- Destination.php (opcional)
| |-- process
| | |-- Process.php (opcional)
|-- MODULE_NAME.info.yml
|-- MODULE_NAME.module (opcional)
8
9. Fichero de configuración de migración
● Se encuentran en: module_name/config/install
● Nomenclatura:
○ migrate_plus.migration.my_migration.yml
○ migrate_plus.migration_group.my_group.yml
● Estructura del fichero:
○ Información base de la migración
○ Origen de datos: source plugin a utilizar y su configuración
○ Procesamiento de datos: process plugins a utilizar
○ Destino: destination plugin a utilizar y su configuración
○ Dependencias: definir dependencias con otras migraciones
9
11. 11
Source plugin
● Componente encargado de extraer los datos del origen
● Existen plugins predefinidos en core
○ SqlBase: origen de datos en SQL
○ FieldableEntity: origen de datos Drupal (6 o 7)
● Podemos modificarlos extendiendo estos plugins
● Existen módulos que proveen nuevos source plugins (ej: migrate_source_csv)
● Ruta: /module_name/src/Plugin/migrate/source
● Track changes
13. Process key
● Componente que obtiene y transforma un dato antes de guardarlo
● En este apartado se indican los valores “destino:origen” para cada campo
● Por defecto siempre se utiliza el plugin ‘get’
● Principales plugins definidos:
○ Callback
○ Copy
○ MigrationLookup
○ SkipOnEmpty
○ DefaultValue
● Ruta: /module_name/src/Plugin/migrate/process
13
15. 15
Destination plugin
● Componente encargado del destino de los datos (entidad, tabla, etc.)
● Existen plugins para casi todo tipo de entidad en Core
○ Node
○ User
○ Block
○ Otros...
● También podemos definir plugins personalizados
● Ruta: /module_name/src/Plugin/migrate/destination
17. Base de datos origen
17
● Se ha de configurar en el settings.php o settings.local.php
● En cada archivo de configuración se ha de indicar la base de datos
○ key: database_name
● Si la base de datos la llamamos ‘migrate’ no hace falta indicar el nombre
explícitamente
18. Base de datos origen
$databases['migrate']['default'] = array (
'database' => ‘database_name’,
'username' => 'database_username',
'password' => 'username_password',
'prefix' => '',
'host' => 'HOST',
'port' => 'PORT,
'namespace' => 'DrupalCoreDatabaseDrivermysql',
'driver' => 'mysql',
);
18
19. Otros orígenes de datos
● XML, JSON, SOAP, etc.
● Uno de los más usados son las hojas CSV.
● El plugin es ofrecido por el módulo
migrate_source_csv.
19
● source:
plugin: csv
path: '/path/to/articles.csv'
delimiter: ','
enclosure: '"'
header_row_count: 1
keys:
- id
column_names:
0:
id: 'Unique Id'
1:
title: 'Title'
2:
body: 'Post body'
20. Ejecución con Drush
● Migrate Tools provee comandos para poder ejecutar y gestionar migraciones
● Lista de comandos:
○ migrate-status: Muestra el estado de todas las migraciones definidas
○ migrate-import: Ejecuta una migración o un grupo de migraciones
■ migrate-import NOMBREMIGRACION
■ migrate-import --group NOMBREGRUPO
■ migrate-import --update NOMBREMIGRACION
○ migrate-rollback: Deshace una migración o grupo de migraciones
○ migrate-reset-status: Reinicia el estado de una migración
○ migrate-stop: Detiene de forma limpia una migración
○ migrate-messages: Muestra los mensajes relacionados con el comando import
20
21. Ejecución desde interfaz
● La interfaz también la provee Migrate Tools
● Permite ejecutar las mismas operaciones que con Drush
● Aún está en desarrollo, aunque ya es funcional casi al 100%
● Falta algo de feedback en pantalla al ejecutar alguna operación
21
25. Enlaces de interés
25
● Código de ejemplo: https://github.com/lluvigne/example_migration
● Migrate API Overview:
https://www.drupal.org/docs/8/api/migrate-api/migrate-api-overview
● Migrating basic data:
https://evolvingweb.ca/blog/drupal-8-migration-migrating-basic-data-part-1