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.