Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DCM-2018 Writing Dynamic Migrations

DCM-2018 Writing Dynamic Migrations

Drupalcamp Mumbai 2018
Writing Dynamic Migrations

E699d3eb01633cd53d59cdd28c1c252d?s=128

Mohit Aghera

April 28, 2018
Tweet

Transcript

  1. 1 axelerant.com How to write dynamic migration Mohit Aghera, Mitesh

    Patel
  2. 2 axelerant.com About Us Mohit Aghera - Back-end developer @Axelerant

    - Drupal.org: mohit_aghera - Twitter: @mohit_rocks Mitesh Patel - Back-end developer @Axelerant - Known as @miteshmap over internet.
  3. 3 axelerant.com Dynamic Migrations • What are dynamic migrations ?

    • Why do we need ?
  4. 4 axelerant.com Migrations : Recap

  5. 5 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
  6. 6 axelerant.com Migration Plugins • Source Plugins • Process Plugins

    • Destination Plugins
  7. 7 axelerant.com Migration Flow

  8. 8 axelerant.com Understanding Derivatives • Drupal 7 has “_info()” hooks

    • Wonder how do we generate multiple blocks with single block plugin ? • Drupal 8 has “Derivatives” • Allows to generate instances dynamically
  9. 9 axelerant.com How Derivatives works ? • Plugin manager uses

    “Discovery” mechanism • “DerivativeDiscoveryDecorator” decorator class
  10. 10 axelerant.com Define along with Plugin

  11. 11 axelerant.com Deriver Implementation SystemMenuBlock Deriver implementation:

  12. 12 axelerant.com Understanding Derivers Notable Examples: • SystemMenuBlock • BlockContentBlock

    • LanguageBlock And many more..
  13. 13 axelerant.com Possible approaches for migration • Migration templates •

    Config Entities
  14. 14 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”
  15. 15 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
  16. 16 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”
  17. 17 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
  18. 18 axelerant.com Derivers for Migration • Works as a derivative

    for new migrations • Helps to create migrations dynamically • Extends DeriverBase class.
  19. 19 axelerant.com Writing Derivers • Implement getDerivativeDefinitions() and write your

    logic.
  20. 20 axelerant.com Using Derivers Specify in migration template file.

  21. 21 axelerant.com Running migration

  22. 22 axelerant.com Use cases • Migrating large amount of sites

    with similar architecture but different languages in each site (our use case, https://github.com/miteshmap/drupal_migration_demo) • 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...
  23. 23 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
  24. 24 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