Switching from file system configuration management to features on existing drupal site

In my last blog post, I outlined the best practices to manage the configuration management for the site. If you have read the previous post and wanted to follow the same on your site, this post will show you how to do Switching from file system configuration management to features on existing drupal site easily.

There's not any hard and fast way to change the configuration management for an existing Drupal site. Here are the steps in brief involved in to do the following:

  • Delete all of the old configuration except user roles and permissions
  • Export all configuration using features
  • Add update hooks to start using features

Delete all of the old configuration: Delete all the configuration which is present in your $config['sync'] directory except the user roles configuration.

Export all configuration using features: Export your configuration with features and make sure to leave the user roles and permissions and manage your user roles and permissions configuration via the Filesystem.

Add update hooks to start using features: Add update hooks to enable the new features.See the same hook_update_n below.

/**
 * Install features based config.
 */
function xyz_core_update_8017() {
  $features = [
    'xyz_f_alert',
    'xyz_f_appointment_request',
    'xyz_f_page',
    'xyz_f_blog',
    'xyz_f_career_area',
    'xyz_f_careers_landing_page',
    'xyz_f_common_formats',
    'xyz_f_doctor',
    'xyz_f_education_research',
    'xyz_f_event',
    'xyz_f_foundation',
    'xyz_f_job',
    'xyz_f_location',
    'xyz_f_news',
    'xyz_f_paragraphs',
    'xyz_f_person',
    'xyz_f_procedure',
    'xyz_f_related',
    'xyz_f_search',
    'xyz_f_site',
    'xyz_f_testimonial',
    'xyz_f_user',
  ];

  \Drupal::service('module_installer')->install(['features', 'config_update']);
  \Drupal::service('module_installer')->install(['xyz_bundle']);
  \Drupal::service('module_installer')->install($features);
}