Introducción a Migrate
API
Drupal Sevilla - 02/2018
1
Sobre mí Me llamo Leandro Luvigne
Desarrollador Backend en SDOS
IRC: lluvigne
Drupal.org: lluvigne
Twitter: lluvigne
2
Í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
Que es Migrate API
4
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
Como preparar una migración
6
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
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
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
10
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
12
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
14
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
16
Cómo ejecutar una migración
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
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
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'
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
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
22
23
Demo
¿Preguntas?
24
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
Gracias!
26

Introducción a Migrate API en Drupal 8

  • 1.
  • 2.
    Sobre mí Mellamo Leandro Luvigne Desarrollador Backend en SDOS IRC: lluvigne Drupal.org: lluvigne Twitter: lluvigne 2
  • 3.
    Índice 1. Que esMigrate 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
  • 4.
  • 5.
    Que es MigrateAPI ● 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
  • 6.
    Como preparar unamigración 6
  • 7.
    Herramientas adicionales ● Migratetools ○ 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ónde 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
  • 10.
  • 11.
    11 Source plugin ● Componenteencargado 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
  • 12.
  • 13.
    Process key ● Componenteque 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
  • 14.
  • 15.
    15 Destination plugin ● Componenteencargado 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
  • 16.
  • 17.
    Base de datosorigen 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 datosorigen $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 dedatos ● 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
  • 22.
  • 23.
  • 24.
  • 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
  • 26.