Cet article est la suite de l'article n°1 présentant Ansible. Celui-ci a pour but de créer notre premier playbook.
En route !
Mon premier Playbook
Objectifs
Maintenant que l'on dispose de notre structure de base, on va configurer la liste des tâches permettant d'installer Tomcat8 sur un Ubuntu 12.04 à savoir:
- Installer le paquet OpenJDK 7 (le paquet se nomme openjdk-7-jdk)
- Créer un dossier permettant le téléchargement de l'archive de tomcat8 (dans /home/vagrant/archives)
- Télécharger tomcat8 depuis le miroir suivant
- Créer le dossier /opt/apache-tomcat appartenant à l'utilisateur vagrant
- Décompresser notre archive
- Créer un lien symbolique de /opt/apache-tomcat/apache-tomcat-8.0.0-RC1 à /opt/apache-tomcat/tomcat8
- Modifier le fichier server.xml
- Redémarrer tomcat à chaque fois que le fichier catalina.properties est modifié
Résolution
Étape 1: installer un paquet
On va créer une tâche permettant l'installation d'un paquet sur notre Ubuntu dans le fichier roles/tomcat8/tasks/main.yml:
- name: install package openJDK 7
apt: pkg=openjdk-7-jdk update_cache=yes
sudo: yes
Toutes les tâches nécessitent un nom qui sera affiché lors de l'exécution d'Ansible.
La deuxième ligne précise le module a utiliser à savoir ici le module "apt", on lui passe deux paramètres pkg (qui indique le nom du paquet à installer) et update_cache (qui va déclencher un apt-get update avant l'installation). Mais il existe d'autres options.
Enfin la dernière ligne indique qu'il faut lancer cette commande via sudo.
Testons maintenant notre première tâche via la commande suivante qui va exécuter notre playbook site.yml sur l'ensemble des machines de notre fichier production:
$ ansible-playbook -i production site.yml
Et le résultat (ça peut prendre un peu de temps):
Si vous avez des vaches qui s'affichent vous pouvez soit désinstaller le paquer cowsay soit exécuter la commande suivante:
PLAY [application-server] *****************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [install package openJDK 7] *********************************************
changed: [127.0.0.1]
PLAY RECAP ********************************************************************
127.0.0.1 : ok=2 changed=1 unreachable=0 failed=0
export ANSIBLE_NOCOWS=1
Étape 2: créer un dossier
Pour créer un dossier on ajoute juste une tâche à notre fichier main.yml en utilisant le module file:
On teste à nouveau et voilà le résultat:
- name: create archives folder
file: path=/home/vagrant/archives state=directory
On peut voir ici qu'Ansible ne ré-installe pas le package openJDK (statut: ok) mais créé par contre bien notre dossier (statut: changed).
PLAY [application-server] *****************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [install package openJDK 7] *********************************************
ok: [127.0.0.1]
TASK: [create archives folder] ************************************************
changed: [127.0.0.1]
PLAY RECAP ********************************************************************
127.0.0.1 : ok=3 changed=1 unreachable=0 failed=0
Pour les étapes suivantes je vais vous laisser travailler en ne vous donnant que le nom des modules à utiliser. Le fichier final main est indiqué à la fin de l'article.
Étape 3: télécharger une archive
Utiliser pour cela le module get_url.
Étape 4: créer un dossier
Voir l'étape 2 en ajoutant les options qui vont bien.
Étape 5: décompresser une archive
Utiliser pour cela le module command. Attention à bien utiliser l'option creates pour ne pas décompresser l'archive à chaque exécution d'Ansible.
Étape 6: créer un lien symbolique
Encore et toujours le module file avec les options dest et src ce coup-ci.
Étape 7: Modifier le fichier server.xml
Pour copier un fichier depuis notre dossier roles/tomcat8/files il suffit d'utiliser le module copy. Pour l'exemple le fichier local copié sur le serveur distant est le fichier server.xml classique auquel ont été enlevé les commentaires:
- name: Copy server.xml
copy: dest=/opt/apache-tomcat/tomcat8/conf/server.xml owner=vagrant group=vagrant src=roles/tomcat8/files/server.xml
Étape 8: Redémarrer automatiquement Tomcat
L'étape précédente nous a permis de modifier facilement la configuration de nos serveurs Tomcat. Néanmoins il faut après une modification de la conf redémarrer le serveur.
Pour réaliser cela nous allons ajouter un handler, une action qui ne sera exécutée que sur notification d'une autre action. Ainsi si le fichier de conf n'est pas modifié Tomcat ne sera pas redémarré.
On ajoute une ligne à notre tâche de l'étape 7 pour notifier notre handler:
Et on créé le fichier handler correspondant dans roles/tomcat8/handlers/main.yml:
- name: Copy server.xml
copy: dest=/opt/apache-tomcat/tomcat8/conf/server.xml owner=vagrant group=vagrant src=roles/tomcat8/files/server.xml
notify: restart tomcat
Voilà normalement lors de la prochaine modification du fichier server.xml notre tomcat sera redémarré. Pour tester nous pouvons rajouter une ligne vide dans le fichier roles/tomcat8/files/server.xml et relancer ansible-playbook:
- name: restart tomcat
shell: /opt/apache-tomcat/tomcat8/bin/shutdown.sh && /opt/apache-tomcat/tomcat8/bin/startup.sh
PLAY [application-server] *****************************************************
GATHERING FACTS ***************************************************************
ok: [127.0.0.1]
TASK: [install package openJDK 7] *********************************************
ok: [127.0.0.1]
TASK: [create archives folder] ************************************************
ok: [127.0.0.1]
TASK: [Download Tomcat 8] *****************************************************
ok: [127.0.0.1]
TASK: [Create tomcat directory] ***********************************************
ok: [127.0.0.1]
TASK: [Unzip tomcat] **********************************************************
skipping: [127.0.0.1]
TASK: [Create Tomcat symlink] *************************************************
ok: [127.0.0.1]
TASK: [Copy server.xml] *******************************************************
changed: [127.0.0.1]
NOTIFIED: [restart tomcat] ****************************************************
changed: [127.0.0.1]
PLAY RECAP ********************************************************************
127.0.0.1 : ok=8 changed=2 unreachable=0 failed=0
Fichier Final
Aller plus loin
Il est possible de faire encore plus de chose avec Ansible comme par exemple :Bref aller jeter un oeil à la doc qui bien qu'un peu fouillis contient l'essentiel.
Post 14/52