Post on 13-Apr-2017
CMI e Features per D8SVILUPPO CODE-DRIVEN E RIUSABILITÀ DEL CODICE:
Speaker: Adriano Cori @bmeme
Di cosa parleremo
CONFIGURATION MANAGEMENT INITIATIVE1PRESENTAZIONE
GESTIONE DELLE CONFIGURAZIONI
WORKFLOW DI SVILUPPO IN DRUPAL
IL RUOLO DI FEATURES IN DRUPAL 8
ESEMPI DI UTILIZZO DEL CMI
Le novità di Drupal 8
ALCUNI DEI CAMBIAMENTI PIÙ IMPORTANTI:2INTRODUZIONE
• Symfony2 • YAML • Twig • Entity • hook_skywalker• Nuovi moduli Core
Le novità di Drupal 8
IL CALCIOMERCATO DELLA “DRUPAL CORE F.C.”2INTRODUZIONE • Entity reference
• Entity translation • Migrate • UUID • Views • VBO • …
• Nuovi moduli Core
• Features ?
Configur
ation
Manageme
nt Initi
ative
Keep calm and
Drupal ottoottoosho
CONFIGURATION MANAGEMENT INITIATIVE
IN COSA CONSISTE PRATICAMENTE?3CMI
E’ lo strumento che ci consente di gestire le configurazioni della nostra istanza Drupal, dandoci la possibilità di tracciarne i cambiamenti e di rilasciarle nei vari ambienti dell’applicazione.
configurazioni
CONFIGURAZIONI IN DRUPAL 7
VARIABLES
3CMI
Drupal 7 consente di memorizzare dati più o meno complessi all’interno della tabella variable sotto forma di valori serializzati (value) identificabili da una chiave (name).
Le operazioni di CRUD delle variabili sono rese disponibili da queste tre funzioni:
• variable_set($name, $value);• variable_get($name, $default_value);• variable_del($name);
configurazioni
CONFIGURAZIONI IN DRUPAL 7
3CMIconfigurazioni
CONFIGURAZIONI IN DRUPAL 7
VARIABLES
3CMI
In Drupal 7 le configurazioni possono essere gestite nei seguenti modi: - manualmente - hook_install() / hook_update_N() - settings.php - Features
configurazioni
CONFIGURAZIONI IN DRUPAL 7
GESTIONE MANUALE
3CMI
Consiste nel riportare nei vari ambienti dell’applicazione ogni configurazione che è stata fatta nel proprio ambiente di sviluppo locale.configurazioni
“Ma piuttosto cambio lavoro!”
• Error-prone • Impossibilità di tener
traccia dei cambiamenti
• All’aumentare delle configurazioni da apportare, aumenta l’effort
CONFIGURAZIONI IN DRUPAL 7
HOOK_INSTALL() / HOOK_UPDATE_N()
3CMI
Consiste nel settare il valore di una o più variabili in fase di installazione del proprio modulo oppure quando si esegue lo script di aggiornamento update.php
configurazioni
“Vabbè ma famme un esempio pratico su”
3CMIconfigurazioni
“Ma piuttosto cambio lavoro!”
CONFIGURAZIONI IN DRUPAL 7
GRANDI POTENZIALITÀ MA CI SONO DEI CONTRO:
3CMI
- per le variabili più complesse (views, fields, ecc..) l’export potrebbe risultare non così semplice.
- necessità di un developer per poter esportare le configurazioni sul codice.
- rischio di avere una serie infinita di hook_update_N() all’interno del mio file *.install per gestire eventuali aggiornamenti delle configurazioni.
- impossibilità di tracciare eventuali modifiche apportate dagli utenti del sito rispetto alle configurazioni riportate sul codice.
configurazioni
CONFIGURAZIONI IN DRUPAL 7
SETTINGS.PHP
3CMI
E’ possibile settare il valore di qualsiasi variabile all’interno del file settings.php, utilizzando l’array $conf, andando così a sovrascrivere i valori precedentemente salvati sul database.
configurazioni
CONFIGURAZIONI IN DRUPAL 7
SETTINGS.PHP
3CMI
- utile quando si vuol configurare un set di variabili in base all’ambiente in cui ci si trova.
- necessità di un developer per poter esportare le configurazioni all’interno del file.
configurazioni
“Ma mo’ che è sta zozzeria?”
“Ma piuttosto cambio lavoro!”
CONFIGURAZIONI IN DRUPAL 7
CONFIGURAZIONI IN DRUPAL 7
FEATURES
3CMIconfigurazioni
CONFIGURAZIONI IN DRUPAL 7
FEATURES
3CMI
Features è un modulo contrib che nasce con l’intento iniziale di racchiudere, all’interno di unità funzionali, un set di configurazioni da poter riutilizzare su istanze diverse di Drupal.
E’ diventato, in realtà, un modulo che genera moduli, all’interno dei quali vengono messe le configurazioni del nostro sito e che ci offre la possibilità di tener traccia dei cambiamenti avvenuti su tali configurazioni.
E’ il sistema di gestione delle configurazioni più utilizzato su Drupal 7 (per mancanza di alternative).
configurazioni
CONFIGURAZIONI IN DRUPAL 8
CONFIGURATIONS
3CMI
Drupal 8 consente di memorizzare dati più o meno complessi all’interno della tabella config sotto forma di valori serializzati (data) identificabili da una chiave (name) ed un raggruppamento (collection).
COSA CAMBIA • Le configurazioni in Drupal 8 possono essere
memorizzate su files invece che sul DB • I file di configurazione sono scritti in formato
YAML (.yml) • Possibilità di tener traccia dei cambiamenti
utilizzando sistemi di versioning del codice
configurazioni
CONFIGURAZIONI IN DRUPAL 8
3CMIconfigurazioni
CONFIGURAZIONI IN DRUPAL 8
3CMIconfigurazioni
CONFIGURATION STORAGE MECHANISMS
DatabaseStorage
FilesystemStorage
Active config config/active
Sync config/sync config/sync
Staging config/staging
active: contiene le configurazioni attualisync: contiene le configurazioni che devono essere sincronizzate con active
3CMIconfigurazioni
“Ma piuttosto cambio lavoro!”
CONFIGURAZIONI IN DRUPAL 8
DATABASE STORAGE MECHANISM
FILESYSTEM STORAGE MECHANISM
STORAGE MECHANISMSMSMSMSMS
CONFIGURAZIONI IN DRUPAL 8
DRUPAL 8 INTRODUCE NUOVI TIPI DI CONFIGURAZIONI:
3CMI
• Simple configurations (config_object) • Sono quanto di più avvicinabile al sistema di variabili di
Drupal 7. • Sono oggetti configurativi per la gestione di
impostazioni di base che risultino in valori booleani, interi, stringhe ecc.
• Configuration Entities (config_entity) • Memorizzano oggetti configurativi creati dagli utenti
del sito (es: “image style”) • State API
• Sono le configurazioni che memorizzano informazioni sullo stato del sistema.
• Non abbiamo interesse a rilasciarle su ambienti diversi (es: la data dell’ultimo passaggio del cron)
configurazioni
CONFIGURAZIONI IN DRUPAL 8
3CMIconfigurazioni
OGNI MODULO PUÒ DEFINIRE LE PROPRIE CONFIGURAZIONI
install e schema sono le directory che fanno al caso nostro
CONFIGURAZIONI IN DRUPAL 8
CONFIG FILE
3CMIconfigurazioni
SCHEMA FILE
CONFIG FILE
SCHEMA FILE
CONFIG FILE
SCHEMA FILE
CONFIGURAZIONI IN DRUPAL 8
3CMIconfigurazioni
SCHEMA FILE
“The primary reason schema files were introduced into Drupal 8 is multilingual
support. A tool was needed to identify all translatable strings within the shipped
configuration.
The secondary reason is to provide actual translation forms for configuration based on your data and to expose translatable configuration pieces to external tools.”
- fonte: Drupal 8 Configuration Management -
…PERCHÉ?
CONFIGURATION OBJECTS• accessibili tramite il servizio configFactory • per accedere in modifica alle configurazioni bisogna
caricare la versione modificabile del file. • clear() rimuove un elemento dal config_object. • save() non deve essere mai chiamato dopo il delete() • delete() cancella l’intero config_object
CONFIGURAZIONI IN DRUPAL 8
• \Drupal::config($name) == \Drupal::configFactory()->get($name)
CONFIGURATION ENTITIES• entity_load(), entity_create(), entity_save(),
ecc sono tutte funzioni deprecate • si accede alle istanze delle entity sfruttando
il metodo statico ::load() • get() set() e delete() vi ricordano qualcosa?
CONFIGURAZIONI IN DRUPAL 8
4WORKFLOW DI SVILUPPO IN DRUPAL
Building Development
Configurations Management
Packaging
Deploy
Configurations Management
WORKFLOW DI SVILUPPO IN DRUPAL
D7
FeaturesFeature create/update
Deploy
Feature revert
COME UTILIZZARE ACTIVE E SYNC
active sync
exportdevelopment
active sync
importproduction
Deploy
4WORKFLOW DI SVILUPPO IN DRUPAL
WORKFLOW DI SVILUPPO IN DRUPAL
Building Development
4WORKFLOW DI SVILUPPO IN DRUPAL
PURTROPPO LA VITA VERA È UN’ALTRA COSA…
WORKFLOW DI SVILUPPO IN DRUPAL
possibile soluzione PURTROPPO LA VITA VERA È UN’ALTRA COSA…
WORKFLOW DI SVILUPPO IN DRUPAL
ALLINEARE SVILUPPO CON PRODUZIONE
active sync
export
development
active sync
import
production
Download Export
4WORKFLOW DI SVILUPPO IN DRUPAL
WORKFLOW DI SVILUPPO IN DRUPAL
La domanda sorge spontanea…
“Ho capito ma… e mo’ co Ficiur che ce faccio?!”
5IL RUOLO DI FEATURES IN DRUPAL 8
IL RUOLO DI FEATURES IN DRUPAL 8
FEATURESFeatures è un modulo contrib che nasce con l’intento iniziale di racchiudere, all’interno di unità funzionali, un set di configurazioni da poter riutilizzare su istanze diverse di Drupal.
E’ diventato, in realtà, un modulo che genera moduli, all’interno dei quali vengono messe le configurazioni del nostro sito e che ci offre la possibilità di tener traccia dei cambiamenti avvenuti su tali configurazioni.
E’ il sistema di gestione delle configurazioni più utilizzato su Drupal 7 (per mancanza di alternative).
5IL RUOLO DI FEATURES IN DRUPAL 8
ESEMPI DI UTILIZZO DEL CMI
Nei seguenti esempi, dati due ambienti completamente identici, che chiameremo Development e Production, vedremo come funziona in pratica il flusso di lavoro descritto precedentemente, in entrambe le direzioni (dev -> prod; prod -> dev)
6ESEMPI DI UTILIZZO DEL CMI
“Daje va, famme sogna’…”