Slide 1

Slide 1 text

1 axelerant.com How to write dynamic migrations Mohit Aghera, Nikunj Kotecha

Slide 2

Slide 2 text

2 axelerant.com About Us Mohit Aghera - Does development nowadays in Drupal 8 and at times Behat - Known on drupal.org as mohit_aghera - Known on twitter.com as @mohit_rocks Nikunj Kotecha - Does development nowadays in Drupal 8 and at times in Magento 2 - Known on drupal.org as nikunjkotecha - Known on twitter.com as @nikunjhk

Slide 3

Slide 3 text

3 axelerant.com Migrations: A brief introduction What Migrate API Provides: ● Migrate Data from source to destination ● Keeps track of record of migrated data ● Provides framework for writing migrations

Slide 4

Slide 4 text

4 axelerant.com Possible approaches for migration ● Migration templates ● Config Entities

Slide 5

Slide 5 text

5 axelerant.com Migration as Configuration entities ● Similar to any configurations ● Resides in [module]/config directory ● Typically names are given like “migrate.migration.node_page.yml”

Slide 6

Slide 6 text

6 axelerant.com Migration as Configuration entities Advantages: ● Easy to write and run ● No need to write specific logic to run unlike migration templates Disadvantages: ● Not much flexible ● Hard to change runtime ● Dynamic migration generation is not possible ● Can’t generate based on user inputs

Slide 7

Slide 7 text

7 axelerant.com Migration as templates ● Resides in [module]/migration_templates directory ● Names could match the migration id ● Typically names are given like “node_page.yml”

Slide 8

Slide 8 text

8 axelerant.com Migration as templates Advantages: ● Much more flexible than configuration entities for each variation ● Easy to change runtime ● Ability to generate dynamic migration using reusable templates

Slide 9

Slide 9 text

9 axelerant.com Dynamic Migrations ● Drupal 8 core uses templates to generate migration ● When we use Drupal 7 to Drupal 8 migration upgrader it will generate migrations dynamically and import content

Slide 10

Slide 10 text

10 axelerant.com Deriver plugins ● Works as a derivative for new migrations ● Helps to create migrations dynamically ● Extends DeriverBase class.

Slide 11

Slide 11 text

11 axelerant.com Writing Derivers ● Implement getDerivativeDefinitions() and write your logic.

Slide 12

Slide 12 text

12 axelerant.com Using Derivers Specify in migration template file.

Slide 13

Slide 13 text

13 axelerant.com Running migration

Slide 14

Slide 14 text

14 axelerant.com Use cases ● Migrating large amount of sites with similar architecture but different languages in each site (our use case, https://github.com/mohit-rocks/drupalcamp-goa) ● Core: Migrating D7 to D8 ● Core: Migrating Workbench Moderation to Content Moderation (https://www.drupal.org/project/wbm2cm) ● Migrating sites from Magento for instance with different attributes for each site ● And many more...

Slide 15

Slide 15 text

15 axelerant.com Thank you … for being here and allowing us to contribute and share our knowledge To summarise… ● We discussed how to make migrations more dynamic and less painful ● We saw an example of how to write derivers ● We saw advantages of doing it, it is done in Core and many contrib modules already

Slide 16

Slide 16 text

16 axelerant.com References Migration API : https://www.drupal.org/docs/8/api/migrate-api/migrate-api-overview Reference module : https://github.com/mohit-rocks/drupalcamp-goa