PRESENTATION TITLE
GovCon 2017
Advanced Configuration Management In Drupal 8
AUG 2017
Advanced Configuration Management In Drupal 8 PRESENTATION TITLE - - PowerPoint PPT Presentation
GovCon 2017 Advanced Configuration Management In Drupal 8 PRESENTATION TITLE AUG 2017 Mike Potter SOFTWARE ARCHITECT Email: mpotter@phase2technology.com Drupal.org: mpotter Primary maintainer of Features, Features Override, Config
PRESENTATION TITLE
GovCon 2017
AUG 2017
SOFTWARE ARCHITECT
Mike Potter
Email: mpotter@phase2technology.com Drupal.org: mpotter
Features Override, Config Actions modules
Review Core Config Workflow Multiple Environments Overridding Config Features? Templates & Actions Summary
1 2 5 6 7 8 9
Drush Commands
3
Installing with Config
4
Pages Articles Comments Users
Drupal Database
Pages Articles Comments Users
CONTENT
Content Types Fields Views
Drupal Database
Site Info
Pages Articles Comments Users
CONTENT
Content Types Fields Views Site Info
CONFIG Drupal Database
Dev Staging/QA Production
CONFIG Config comes from Developers
Dev Staging/QA Production
CONTENT Content comes from Production Users
Features
filestack langcode: en status: true dependencies: config:Code
Pages Articles Comments Users
CONTENT
Content Types Fields Views Site Info
CONFIG Drupal Database
config export
filestack langcode: en status: true dependencies: config:config/sync config.yml files
Pages Articles Comments Users
CONTENT
Content Types Fields Views Site Info
CONFIG Drupal Database
Dev
Export config
filestack langcode: en status: true dependencies: config:config/sync directory
Staging/QA
Import config
Dev
filestack langcode: en status: true dependencies: config:Staging/QA
Production
Import config Export config
config/sync directory
$config_directories['sync'] = 'config/default';
drush config-export
drush config-import
(defaults to "default")
config/sync folder
unwanted config doesn't get added to git repo.
NOT BEST PRACTICE
config_install: config/sync
site using the profile.
https://www.drupal.org/node/2788777
Using a custom profile
drush site-install profile-name --config-dir=config/default
https://github.com/acquia/lightning/issues/387
So, avoid creating config in installer!
Using Drush si --config-dir
https://www.drupal.org/node/1613424
such as Lightning
maybe in favor of some similar core patches
What about config_installer
NOT BEST PRACTICE
uuid: 0e1861a0-8e9a-469b-97d7-33317d99d785 name: My Site Name mail: admin@example.com ...
# drush config-set system.site uuid <paste-uuid-here> Do you want to update uuid key in system.site config? (y/n): y
uuid: 0e1861a0-8e9a-469b-97d7-33317d99d785 name: My Site Name mail: admin@example.com ...
https://www.drupal.org/node/2628144
(based on ENV var)
drush csex instead of drush cex
https://blog.liip.ch/archive/2017/04/07/advanced-drupal-8-cmi-workflows.html
Dev Staging/QA Production
config-import
filestack langcode: en status: true dependencies: config:config/local directory
filestack langcode: en status: true dependencies: config:config/default directory
Dev Staging/QA Production
config-export
filestack langcode: en status: true dependencies: config:config/local directory
filestack langcode: en status: true dependencies: config:config/default directory
Dev Staging/QA Production
filestack langcode: en status: true dependencies: config:config/local directory
filestack langcode: en status: true dependencies: config:config/default directory
config-import
filestack langcode: en status: true dependencies: config:config/stage directory
Dev Staging/QA Production
filestack langcode: en status: true dependencies: config:config/local directory
filestack langcode: en status: true dependencies: config:config/default directory
config-export
filestack langcode: en status: true dependencies: config:config/stage directory
Dev Staging/QA Production
filestack langcode: en status: true dependencies: config:config/local directory
filestack langcode: en status: true dependencies: config:config/default directory
config-import
filestack langcode: en status: true dependencies: config:config/stage directory config/prod directory
filestack langcode: en status: true dependencies: config:Dev Staging/QA Production
filestack langcode: en status: true dependencies: config:config/local directory
filestack langcode: en status: true dependencies: config:config/default directory
filestack langcode: en status: true dependencies: config:config/stage directory config/prod directory
filestack langcode: en status: true dependencies: config:\Drupal::config('system.site');
\Drupal::configFactory()->getEditable('system.site');
"runtime" overrides in custom modules
(doesn't affect import/export)
Package configuration into modules.
new config uuids
to be re-usable
machine names
field.field.node.project_blog.project_image.yml langcode: en status: true dependencies: config:
module:
id: node.project_blog.project_image field_name: project_image entity_type: node bundle: project_blog label: 'Image Field' description: '' required: false translatable: true default_value: { } default_value_callback: '' settings: display_summary: true field_type: text_with_summary
field.field.node.project_blog.project_image.yml langcode: en status: true dependencies: config:
module:
id: node.project_blog.project_image field_name: project_image entity_type: node bundle: project_blog label: 'Image Field' description: '' required: false translatable: true default_value: { } default_value_callback: '' settings: display_summary: true field_type: text_with_summary
reusable?
"config template"
field_template.yml langcode: en status: true dependencies: config:
module:
id: node.@bundle@.@field_name@ field_name: @field_name@ entity_type: node bundle: @bundle@ label: 'Image Field' description: '' required: false translatable: true default_value: { } default_value_callback: '' settings: display_summary: true field_type: text_with_summary
source: field_template.yml @bundle@: "project_blog" @field_name@: "project_image" dest: field.field.node.@bundle@.@field_name@
source: field_template.yml @bundle@: "project_blog" @field_name@: "project_image" dest: field.field.node.@bundle@.@field_name@ value: label: "My Project Image Field" description: "Project-specific description" required: true
from existing config
without the downsides
single common project template
for reusable functionality instead of Features