Il peut être intéréssant de pouvoir créer à la voler des sites Drupal sur sa machine de dev.
Cet article n'a pas pour vocation de vous faire un cours sur Ansible mais de vous montrer un example de ce que j'ai fait pour me faciliter la vie.
https://gitlab.famillewallon.com/ansible-playbook/drupal-site-install
Tout d'abord voici l'arborescence de mon playbook
. ├── addsite ├── commerce ├── create.yml ├── delete-site ├── delete.yml └── drupal ├── tasks │ ├── create.yml │ ├── delete.yml │ └── main.yml ├── templates │ └── vhost.j2 └── vars └── main.yml.dist
addsite, commerce, delete-site: 3 scripts bash qui vont créer/supprimer mes sites
create.yml et delete.yml: sont mes playbook
drupal: mon rôle drupal/vars/main.yml.dist : à renommer en main.yml, contient les variables nécessaire à l'installation (dossier du site, information de connexion à la base...)
Voyons de plus près ce que fait ma tache create (drupal/tasks/create.yml dans mon rôle drupal
- Tout d'abord, on vérifie si la variable domaine existe (On la voit dans le script bash addsite) ainsi que la présence ou non de la base de données
- name: test if 'domain' variable exist fail: msg="this play requires 'domain' variable" when: domain is not defined - local_action: "shell mysql -u {{ db_user }} -p{{ db_pass }} -e 'SHOW DATABASES;' | grep -w {{ domain |regex_replace('-','_') }}" register: dbstatus failed_when: dbstatus.rc == 2 - name: check if {{ domain |regex_replace('-','_') }} database exists fail: msg="database {{ domain |regex_replace('-','_') }} exist" when: dbstatus.rc == 0
- On créer le vhost à l'aide du module template
- name: create vhost become: yes template: src: templates/vhost.j2 dest: "/etc/nginx/conf.d/{{ fqdn }}.conf" - name: restart nginx services become: yes service: name: nginx state: restarted
Le module template vas automatiquement générer un fichier (ici un vhost nginx) à l'aide du fichier source (src: templates/vhost.j2) Il se base sur le monteur jinja2 (proche de twig).
ex: server_name {{ fqdn }};
- Téléchargement de Drupal via le module composer
- name: download drupal with composer composer: command: create-project arguments: "{{ project }} {{ www_dir }}/{{ fqdn }}/ --stability dev" working_dir: "{{ www_dir }}"
La variable projet est défini en "extra-vars" dans le script bash (ex: drupal-composer/drupal-project, pour le projet drupal) Les autres variables sont défini dans drupal/vars/main.yml
- Téléchargement de module par défault que j'utilise dans mes projets
- name: Download extras modules with composer composer: command: require arguments: "drupal/{{ item }}" working_dir: "{{ www_dir }}/{{ fqdn }}/" with_items : "{{ module }}"
Ici on va utiliser with_items qui va permettre de télécharger ma liste de module
module: [ features, features_ui, devel, adminimal_admin_toolbar, module_filter, admin_toolbar_tools, ]
- Installation d'un site drupal via drush si
- name: Drush site install shell: "drush si --account-mail={{ email }} --account-name={{ drupal_username }} --account-pass={{ drupal_password }} --db-url=mysql://{{ db_user }}:{{ db_pass }}@localhost/{{ domain |regex_replace('-','_') }} --locale=fr --site-name={{ fqdn }} --site-mail={{ email }} -y"
- Et enfin on active les modules que j'utilise dans mes projets
- name: Activate extras modules shell: "drush en {{ item }} -y" args: chdir: "{{ www_dir }}/{{ fqdn }}/web" with_items : "{{ module }}"