Le blog de Genma
Vous êtes ici : Accueil » Informatique » GNU/Linux, Logiciels Libres » Jouons avec Ansible et Virtualbox

Jouons avec Ansible et Virtualbox

D 11 septembre 2017     H 09:00     A Genma     C 1 messages   Flattr cet article Logo Tipee

TAGS : Ansible Virtualisation

Prérequis : ce billet nécessite de connaître Virtualbox, savoir installer et connaître les commandes de base de Debian et avoir des bases en Ansible.

Virtualbox

Virtualbox est là pour me permettre d’avoir différentes machines Debian. J’en ai créer une par défaut, avec une installation minimale de Debian, j’ai ajouté SSH et y ai ajouté ma clef SSH de mon utilisateur de ma machine hôte.

J’ai deux machines virtuelles,
- debianAnsible01
- debianAnsible02

Chacune de ces machines a deux cartes réseaux :
- une carte eth0 en mode NAT : l’accès Internet de la machine hôte est alors partagé, je peux faire des mises à jour etc. La machine virtuelle voit Internet mais n’est pas vu du réseau local (elle est derrière un NAT qui est géré par VirtualBox). Retour ligne manuel
- une carte eth1 en mode Réseau Privé hôte sur vbonet0 : la machine est visible et voit la machine hôte et réciproquement. Cette interface réseau me sert pour me connecter en SSH depuis ma machine hôte sur la machine virtuelle.

Les IP des machines sur l’interface eth1 (qui sera utilisée par Ansible) sont donc :
- 192.168.56.102 Debian_Ansible01
- 192.168.56.103 Debian_Ansible02

On liste les machines de VirtualBox

$ VBoxManage list vms |grep Debian
"Debian_Ansible01" {f7e91481-b0db-4583-a2de-c3d04e81e4e3}
"Debian_Ansible02" {e0449d42-682f-41d0-be73-1816c0b8f334}

Ansible

Pour avoir une présentation détaillée et comprendre Ansible, je vous invite à lire le journal de Skhaen sur LinuxFr : Journal Déploiement et automatisation avec Ansible - partie 1

Je pars de l’étape où Ansible est installé sur ma machine hôte (qui fait tourner VirtualBox).

J’ai créé un fichier /etc/ansible/hosts

[virtualboxDebian]
Debian_Ansible01
Debian_Ansible02

Et dans mon fichier /etc/hosts j’ai les lignes

192.168.56.102 Debian_Ansible01
192.168.56.103 Debian_Ansible02

Jouons un peu

Démarrage des machines depuis la ligne de commande

VBoxManage startvm Debian_Ansible01
VBoxManage startvm Debian_Ansible02

Ping des différentes machines

$ ansible -m ping all --one-line
Debian_Ansible01 | SUCCESS => {"changed": false, "ping": "pong"}
Debian_Ansible02 | SUCCESS => {"changed": false, "ping": "pong"}

Pour avoir l’uptime des machines

$ ansible all -m command -u genma --args "uptime" --one-line
Debian_Ansible01 | SUCCESS | rc=0 | (stdout)  10:50:16 up 29 min,  1 users,  load average: 0,00, 0,01, 0,03
Debian_Ansible02 | SUCCESS | rc=0 | (stdout)  10:50:16 up 25 min,  1 users,  load average: 0,00, 0,01, 0,05

Remarque : l’option —one-line permet d’avoir le retour json sur une seule ligne et non sur plusieurs.

Ajout des paquets aux VM

Pour avoir des paquets d’installer sur tout les serveurs, Ansible me permet de l’automatiser facilement.
On commence par éditer un fichier /etc/ansible/roles/debian_complete_installation.yml pour y mettre le bloc suivant :

---
- hosts: all
 remote_user: root

 tasks:
 - name: install common packages for all servers
   apt:
     update_cache=yes
     state=latest
     name={{item}}
   with_items:
   - curl
   - htop
   - sudo
   - tar
   - unzip
   - vim
   - wget
   - whois
   - screen

Après l’avoir enregistré, il suffit de lancer la commande suivante pour installer cette liste de paquets sur tout les serveurs :

ansible-playbook -i hosts /etc/ansible/roles/debian_complete_installation.yml

Mises à jour des VM via Ansible

Pour mettre à jour les VM via Ansible, on créer un fichier de template
/etc/ansible/roles/genma_apt_update.yml

---
- hosts: all
 remote_user: root

 tasks:
 - name: update and upgrade apt packages        
   apt:
     update_cache=yes
     state=latest
     upgrade=yes

Mise à jour des VM via Ansible
Après l’avoir enregistré, il suffira de lancer la commande suivante pour installer cette liste de paquets sur tout les serveurs :

ansible-playbook -i hosts /etc/ansible/roles/genma_apt_update.yml

Rappel : mon ficher hosts ne contient que mes machines Ansible pour l’instant.

Si on se connecte dans la VM, on voit bien que le apt-get update et upgrade a été lancé (on a les processus correspondant qui tournent).

Ansible renvoit sur la ligne de commande :

ansible-playbook -i hosts /etc/ansible/roles/genma_apt_update.yml
PLAY [all] *********************************************************

TASK [Gathering Facts] *********************************************
ok: [Debian_Ansible01]
ok: [Debian_Ansible02]

TASK [update and upgrade apt packages] ******************************
changed: [Debian_Ansible01]
changed: [Debian_Ansible02]

PLAY RECAP **********************************************************
Debian_Ansible01            : ok=2    changed=1    unreachable=0    failed=0  
Debian_Ansible02           : ok=2    changed=1    unreachable=0    failed=0  

Ansible et plusieurs groupes dans le hosts

Si mon fichier /etc/ansible/hosts contient plusieurs groupes et que je ne veux lancer un playbook que sur un groupe dédié, l’option est de la forme

--extra-vars="hosts=virtualboxDebian"

La commande pour lancer les mises à jour sera donc

{{Eteindre les machines}}

Pour éteindre les machines, là encore, on passe par un playbook Ansible
<strong>/etc/ansible/roles/genma_shutdown.yml</strong>
<code>
---
- hosts: all
 remote_user: root

 tasks:
   - name: shutdown
     command: /sbin/shutdown -h now

   - name: wait go down
     local_action: wait_for host={{ ansible_ssh_host }} port=22 state=stopped

Et quand on le lance :

ansible-playbook -i hosts /etc/ansible/roles/genma_shutdown.yml

PLAY [all] *********************************************************

TASK [Gathering Facts] *********************************************************
ok: [Debian_Ansible02]
ok: [Debian_Ansible01]

TASK [shutdown] *********************************************************

Sauvegarde de l’état des machines via un Snapshot Virtualbox

Prise de snapshot

VBoxManage snapshot Debian_Ansible01 take snapshot_VM_MAJ_par_Ansibe_OK
VBoxManage snapshot Debian_Ansible02 take snapshot_VM_MAJ_par_Ansibe_OK

Conclusion

Un premier tutoriel assez simple qui montre, je l’espère les possibilités d’Ansible, que personnellement je serai amené à utiliser de plus en plus régulièrement. D’autres tutoriaux seront donc amenés à être publier au fur et à mesure de mon apprentissage.

 Les Tags - mots clefs de ce article

logo clef

 Vous aimez cet article? Soutenez le blog et partagez-le ;-)

Logo Tipee Flattr icon  Facebook icon  Twitter icon  Diapora icon   Licence Creative Commons

1 Messages

  • Je gère environ 150 serveurs linux avec Ansible. Pour rien au monde, je le supprimerai !

    Tu peux aussi utiliser Vagrant pour créer de bout en bout ta VM, puis lancer tes configurations. Deployer des applications, c’est aussi facile.
    Bref de multiples possibilités : L’effort fait pour un serveur, est le même pour 1000


Un message, un commentaire ?
modération a priori

Ce forum est modéré a priori : votre contribution n’apparaîtra qu’après avoir été validée par un administrateur du site.

Qui êtes-vous ?
Votre message

Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Conférences

Médiathèques vous recherchez un conférencier sur l’éducation populaire et l’hygiène numérique? Jetez un coup d’oeil à mon CV

Date des prochaines conférences?
Cliquer ici

Rechercher sur le blog

Liens

Logo Flattr Logo Gmail Logo Twitter
Logo RSS Logo Linkedin Logo GitHub
Logo Gitlab Logo Mastodon
Logo Diaspora

Soutenir ce blog?

Logo Tipee Logo Liberapay

Licence

Licence Creative Commons

Derniers articles

1.  Kimi no na wa - Your Name

2.  Conférence Du pseudonymat au pseudonyme

3.  Yunohost - Pourquoi les ports 80 et 25 sont ils toujours utilisés ?

4.  Lifehacking - Trois écrans : réel confort, luxe ou superflu ?

5.  Etre autodidacte

6.  Virtualbox comme outil dans le cadre de formations

7.  Yunohost, Virtualbox, Interfaces réseaux

8.  Lifehacking - TinyTask

9.  Lifehacking - Mes astuces pour faire ma veille ciblée

10.  Le blog kanjian.fr


Date de mise à jour :

Le 22 novembre 2017