Playbooks complexes – Restauration DokuWiki

On a vu dans l’article précédent l’installation d’un DokuWiki avec Ansible, voyons maintenant la restauration.

Utilisation du playbook : ansible-playbook restore_dokuwiki.yml -e ‘host=SRV-NEW’
Utilité du playbook : Installer ou upgrader DokuWiki à la dernière version stable
Playbook restore_dokuwiki.yml

---
- name: Restore dokuwiki
  hosts: "{{ host }}"
  handlers:
   - include: roles/handlers/main.yml

  vars:
    dotdeb_repo: True
    dotdeb_repo_version: wheezy
    vhost_file: roles/dokuwiki/templates/dokuwiki.j2
    vhost_name: dokuwiki
    dokuwiki_folder: /var/www/dokuwiki
    shorthost: SRV-DOKU
    host_web_orig: SRV-DOKU.leroideselephants.net
    mount_folder: /mnt/Sauvegarde
    smbsauvegarde: files/{{ shorthost }}_smbsauvegarde
    dest_smbsauvegarde: /root/.smbsauvegarde
    date: "{{ lookup('pipe', 'date -d yesterday +%d-%m-%Y') }}"

  roles:
   - dotdeb
   - nginx
   - php5-fpm
   - restore_dokuwiki

Explications : La première chose que l’on voit en action est bien le concept de rôle. On réutilise 3 rôles sur 4. La seconde chose que l’on voit est une présentation différente des variables (par rapport à install_dokuwiki.yml). Il n’y a ici pas besoin de renseigner deux fois la variable dokuwiki_folder. Vous constaterez également que lorsque le playbook jouera le rôle nginx que les noms des tasks donneront {{ dokuwiki_folder }} sans que les variables soient remplacées. Je vous présente ici deux manières différentes de présenter vos variables entre install_dokuwiki.yml et restore_dokuwiki.yml. Pour rappel, il y a 4 moyens de présenter les variables (je vous renvoie sur cet article) :
– vars (celle présentée dans restore_dokuwiki.yml)
– group_vars c’est-à-dire faire des fichiers group_vars/common et group_vars/{{ set_env }} qu’on appellera ainsi ansible-playbook monplaybook.yml -e set_env=prod. Vous remarquerez que les fichiers ne se terminent pas par .yml. Deimos préconise celle-ci, je suis d’accord mais la première préconisation dans mon esprit, c’est de faire simple et comme vous le voulez
– –extra-vars/-e (c’est-à-dire fournir la variable sur la ligne de commande, c’est ce que nous faisons en faisant -e ‘SRV-NEW’)
– role invocation (celle présentée dans install_dokuwiki.yml)

Comme vous le voyez, j’ai passé dotdeb_repo en True donc attention. shorthost est le nom court du serveur que je souhaite restaurer. host_web_orig est le nom long (c’est-à-dire avec le nom de domaine). Pourquoi ce nom ? Parce que j’aurais bientôt host_bdd_orig lorsque je ferai une restauration d’une base de données. host_web_orig et host_bdd_orig peuvent être identiques comme différents si le site est sur un serveur et la base de données (MySQL par exemple) sur un autre. mount_folder est le dossier que l’on crée pour faire le montage de notre NAS. smbsauvegarde est le fichier des identifiants pour monter le NAS et dest_smbsauvegarde la destination où l’on met le fichier smbsauvegarde. date est la variable la plus compliquée, il s’agit de la date d’hier sous la forme 30-01-2015 (à la française Monsieur !). Il paraît évident que pour des tests de restauration on reprenne la date d’hier. Evidemment si on en veut une plus lointaine, il suffit de faire DATE: 21-01-2015.

Mes noms de variables sont mauvais, un mélange de Français et d’Anglais, si vous avez des propositions je suis preneur. Je pense déjà à remplacer host_web_orig par host_web_source.

Le fichier roles/restore_dokuwiki/tasks/main.yml (rôle restore_dokuwiki)

---
- name: Copy file .smbsauvegarde
  copy: src={{ smbsauvegarde }} dest={{ dest_smbsauvegarde }} owner=root group=root mode=0600
  tags: restore_dokuwiki

- name: Create mount_folder directory
  file: path={{ mount_folder }} state=directory
  tags: restore_dokuwiki

- name: Create dokuwiki_folder directory
  file: path={{ dokuwiki_folder }} state=directory
  tags: restore_dokuwiki

- name: Mount NAS folder
  command: mount -o credentials={{ dest_smbsauvegarde }} //192.168.1.23/Sauvegarde/{{ shorthost }}/Backup {{ mount_folder }}
  tags: restore_dokuwiki

- name: Copy data in dokuwiki_folder
  shell: /usr/bin/rsync -rtp {{ mount_folder }}/Web/{{ host_web_orig }}_Web_{{ date }}/www/dokuwiki/* {{ dokuwiki_folder }}
  tags: restore_dokuwiki

- name: Fix dokuwiki_folder permissions
  file: path={{ dokuwiki_folder }} owner=www-data group=www-data mode=0755 state=directory recurse=yes
  tags: restore_dokuwiki

- name: Umount NAS folder
  command: umount {{ mount_folder }}
  tags: restore_dokuwiki

  notify: restart nginx

Explications : Cela me paraît également simple à comprendre même s’il est vrai qu’il faut cogiter un peu. Je vais juste parler de la commande rsync. Premièrement beaucoup d’entre vous remplaceront rsync -rtp par rsync -a et vous aurez raison, j’ai mis ce que j’utilise mais chacun gère différemment.

Détaillons dont la ligne rsync, cela fera : rsync -rtp DOSSIERDEMONNAS/Web/SRV-DOKU.leroideselephants.net_Web_30.01.2015/www/dokuwiki/* /var/www/dokuwiki.

Tout cela est bien compliqué ! A vrai dire non, cela correspond à mon organisation pour la sauvegarde par conséquent vous aurez probablement quelque chose de plus court et plus propre. Le dossier Web existe car dans mes sauvegardes j’ai également un dossier MySQL (contenant la sauvegarde MySQL) et un dossier Conf (contenant la totalité du dossier /etc du serveur entre autres choses) au même niveau.


Je me suis dit que tant qu’à parler de group_vars autant vous faire voir ce que ça pourrait donner (version simple avec juste common).

Utilisation du playbook : ansible-playbook restore_dokuwiki.yml -e ‘host=SRV-NEW’
Utilité du playbook : Installer ou upgrader DokuWiki à la dernière version stable
Playbook restore_dokuwiki.yml

---
- name: Restore dokuwiki
  hosts: "{{ host }}"
  handlers:
   - include: roles/handlers/main.yml
  vars_files:
   - group_vars/common

  roles:
   - dotdeb
   - nginx
   - php5-fpm
   - restore_dokuwiki

Le fichier group_vars/common (fichier de variables communes)

dotdeb_repo: True
dotdeb_repo_version: wheezy
vhost_file: roles/dokuwiki/templates/dokuwiki.j2
vhost_name: dokuwiki
dokuwiki_folder: /var/www/dokuwiki
shorthost: SRV-DOKU
host_web_orig: SRV-DOKU.leroideselephants.net
mount_folder: /mnt/Sauvegarde
smbsauvegarde: files/{{ shorthost }}_smbsauvegarde
dest_smbsauvegarde: /root/.smbsauvegarde
date: "{{ lookup('pipe', 'date -d yesterday +%d-%m-%Y') }}"

Les commentaires sont fermés.