Ansible

https://www.ansible.com
https://www.ansiblefordevops.com/

automation, outil de conf de gestion des infra (souvant via ssh, donc ne necessite pas d'avoir un agent qui tourne coté srv). Ansible utilise YAML (Yet Another Markup Language).

Ansible Playbook permet d'automatiser l'install et la conf de Drupal.

install (non testé)

https://www.digitalocean.com/community/tutorials/how-to-create-an-ansible-playbook-to-automate-drupal-installation-on-ubuntu-14-04

Si pas dans ppa, l'ajouter et l'installer, puis créer un dossier pour le Playbook (par ex: mkdir ~/MyPlaybooks/drupal_setup ).

Créer le fichier ansible hosts (chaque playbook a un fichier hosts qui contient les serveurs à utiliser, tous accessibles via ssh) : vi ~/MyPlaybooks/drupal_setup/hosts

[drupal_hosts]
localhost
drupal_server_ip

création d'un role pour maj apt-get

mkdir ~/MyPlaybooks/drupal_setup/roles
mkdir ~/MyPlaybooks/drupal_setup/roles/update

Chaque role a 1 ou x taches, on crée un dossier pour toutes les taches associées à ce role, on y crée le fichier main.yml (indique à Ansible que faire quand il execute ce role) =>

mkdir ~/MyPlaybooks/drupal_setup/roles/update/tasks
nano ~/MyPlaybooks/drupal_setup/roles/update/tasks/main.yml

contenu de main.yml (attention, un simple espace mal placé est génant)

---

- name: apt-get update the server
  apt: update_cache=yes

Enfin, créer le role pour conf de PHP :

pour le role php: mkdir ~/MyPlaybooks/drupal_setup/roles/php
Ici, install avec apache (en installant php, apache suit)

nano ~/MyPlaybooks/drupal_setup/roles/php/tasks/main.yml
 

---

- name: Install PHP and associated packages
  apt: name=php5 state=latest

- name: Install PHP GD library
  apt: name=php5-gd state=latest
  notify:
    - Restart Apache

mkdir ~/MyPlaybooks/drupal_setup/roles/php/handlers
nano ~/MyPlaybooks/drupal_setup/roles/php/handlers/main.yml
 

---

- name: Restart Apache
  service: name=apache2 state=restarted

Création du role pour conf de MySQL

mkdir -p ~/MyPlaybooks/drupal_setup/roles/mysql/tasks
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/setup.yml
 

---

- name: Install MySQL server
  apt: name=mysql-server state=latest

- name: Install Apache module for MySQL authentication
  apt: name=libapache2-mod-auth-mysql state=latest

- name: Install MySQL module for PHP
  apt: name=php5-mysql state=latest

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/create_db.yml
 

---
- name: Install Python MySQLdb
  apt: name=python-mysqldb state=latest

- name: Create the Drupal database
  mysql_db: db={{ db_name }} state=present

- name: Create the Drupal user
  mysql_user: >
    name={{ db_user }}
    password={{ db_password }}
    priv={{ db_name }}.*:ALL
    host=localhost

les chaines dans  {{ }} sont des variables. Ici, on a 3 var: {{ db_user }}, {{ db_password}} et {{ db_name }} qu'on va définir plus loin.

ce role a 2 taches.
nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/main.yml
 

---

- include: setup.yml
- include: create_db.yml

création du role pour installer drupal

On va installer git sur l'hote distant (necessaire car on va utiliser le module git d'ansible, pour cloner la dernière version stable de drupal), créer les fichiers settings.php et services.yml et enfin modifier les perms.

mkdir -p ~/MyPlaybooks/drupal_setup/roles/drupal/tasks
nano ~/MyPlaybooks/drupal_setup/roles/drupal/tasks/main.yml
 

---

- name: Install git
  apt: name=git state=latest

- name: Clone Drupal
  git: >
    repo=http://git.drupal.org/project/drupal.git
    dest=/var/www/html/drupal/
    update=no

- name: Create settings.php
  command: cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php

- name: Create services.yml
  command: cp /var/www/html/drupal/sites/default/default.services.yml /var/www/html/drupal/sites/default/services.yml

- name: Update permissions of settings.php
  file: path=/var/www/html/drupal/sites/default/settings.php mode=777

- name: Update permissions of services.yml
  file: path=/var/www/html/drupal/sites/default/services.yml mode=777

- name: Update permissions of files directory
  file: >
    path=/var/www/html/drupal/sites/default/files
    mode=777
    state=directory
    recurse=yes

Créer un fichier pour utiliser tous les roles

On y indique les hotes qui vont lancer ce playbook, que sudo doit etre utilisé pour lancer toutes les taches du playbook, initialiser les variables par défaut, lancer tous les roles

nano ~/MyPlaybooks/drupal_setup/site.yml
 

---

- hosts: drupal_hosts

  sudo: yes

  vars:
    - db_name: drupal
    - db_user: drupal_user
    - db_password: drupal_db_pass

  roles:
    - update
    - php
    - mysql
    - drupal

connexion ssh

avant de lancer le playbook, ajouter les entrées des hotes dans ~/.ssh/known_hosts en lancant kk ssh (listés dans ~/MyPlaybooks/drupal_setup/hosts):

ssh localhost
ssh drupal_sudo_user@drupal_server_ip

drupal_sudo_user et pw doivent etre les meme sur tous les srv (localhost compris).

Ou encore, au lieu d'utiliser des pw, copier la clé publique ssh de l'utilisateur sudo du srv ansible vers le fichier authorized_keys des srv, de l'utilisateurs sudo drupal
note: ci dessous, utiliser alors ansible-playbook -i hosts site.yml -K

lancer le playbook

avec -k on demande le pw ssh ; -K pour le pw sudo

cd ~/MyPlaybooks/drupal_setup/
ansible-playbook -i hosts site.yml -kK

Avant de lancer ce script pour une nouvelle install (new srv), retirer les IP des srv déja installé dans ~/MyPlaybooks/drupal_setup/hosts - ou on écrase son install drupal :)

install drupal

la conf db se trouve dans la section "vars" du fichier ~/MyPlaybooks/drupal_setup/site.yml

http://your_server_ip/drupal

bien vérifier l'install sur les srv

nettoyage de la liste des hosts

par précaution (ne pas effacer les drupal), retirer les hosts de ~/MyPlaybooks/drupal_setup/hosts

un soucis ?

YAML n'aime pas les espaces, tab...

si erreur "fatal: [server-name] => Using a SSH password instead of a key is not possible because Host Key checking " -> il manque une entrée dans  ~/.ssh/known_hosts

logo drush