Site Overlay

Ansible : Présentation et utilisation

Qu’est-ce qu’Ansible ? Comment s’en servir ? Quels concurrents ? Petit tour pour cibler un nouveau produit qui fait une forte impression depuis quelques temps.

Ansible est apparu en 2012. En octobre 2015, Red Hat annonce le rachat d’Ansible qui devient alors un produit phare de sa stack. Celui-ci s’intègre parfaitement dans les solutions de Red Hat et vient renforcer les arguments concernant la facilité de gestion d’un parc de serveurs.

Ansible est une solution permettant de réaliser des déploiements, l’exécution de tâches et la gestion de configuration sur plusieurs machines en même temps. Il est sans agent et utilise SSH pour mettre en place les actions à réaliser, elles-mêmes écrites en YAML.

Dans Ansible, il existe de nombreux produits qui peuvent perturber lorsqu’on commence. Vous entendrez peut-être parler de Ansible Playbook, Ansible Vault et Ansible Galaxy.

Deux choses à savoir :

  • Quand vous utilisez Ansible, vous utilisez des modules. Il existe une liste de modules déjà écrite, mais vous pouvez également écrire les vôtres. Vous devrez l’écrire en Python.
  • Vous devez donner une ou un groupe de domaine/IP où l’action doit être utilisée.

Exemple :

On va vérifier que notre machine est bien haut avec le module ping.

1

2

3

4

5

$ ansible localhost -m ping

localhost | SUCCESS =&gt ; {

 » changed « : faux,

 » ping « :  » pong « 

}

Pour utiliser autre chose que localhost, comme par exemple un ensemble de domaines, vous devez compléter le fichier /etc/ansible/hosts.

1

2

3

[baptiste-donaux.fr]

www.baptiste-donaux.fr

me.baptiste-donaux.fr

1

2

3

4

5

6

7

8

9

10

$ ansible -m ping baptiste-donaux.fr

me.baptiste-donaux.fr | success >&gt ; {

 » changé « : faux,

 » ping « :  » pong « 

}

www.baptiste-donaux.fr | success >&gt ; {

 » a changé « : faux,

 » ping « :  » pong « 

}

Et voilà comment on vérifie qu’un piscine de serveurs en bien haut . Voici la liste des modules présents de base.

Lire  Les meilleurs SSD pour les jeux en 2023

Une fois que l’on a compris comment fonctionne un module, on peut utiliser tous les autres modules de la même manière. Lorsqu’on utilise un module, on peut donner des arguments (argument -a).

Par exemple, comment exécuter une commande sur plusieurs.

1

2

3

4

5

6

$ ansible -m shell -a  » docker -version «  baptiste-donaux.fr

me.baptiste-donaux.fr | success | rc=0 >&gt ;

Docker version 1.12.1, build 23cf638

www.baptiste-donaux.fr | success | rc=0 >&gt ;

Docker version 1.12.1, build 23cf638

Mais également s’assurer qu’un paquet est bien installé.

1

2

3

4

$ ansible -m apt -a  » name=vim state=present «  www.baptiste-donaux.fr

www.baptiste-donaux.fr | success >&gt ; {

 » a changé « : faux

}

Ou tout simplement mettre à jour un ou des serveurs.

1

2

3

4

5

6

7

8

9

10

11

12

$ ansible -m apt -a  » update_cache=yes «  www.baptiste-donaux.fr

www.baptiste-donaux.fr | success >&gt ; {

 » a changé « : faux

}

$ ansible -m apt -a  » upgrade=dist «  www.baptiste-donaux.fr

www.baptiste-donaux.fr | success >&gt ; {

 » a changé « : faux,

 » msg « :  » Lecture des listes de paquets…nConstruction de l’arbre de dépendances…nLecture des informations d’état…n0 mis à jour, 0 nouvellement installé, 0 à supprimer et 0 non mis à jour.n « ,

 » stderr « :  » « ,

 » stdout « :  » Lecture des listes de paquets…nConstruction de l’arbre de dépendances…nLecture des informations d’état…n0 mis à jour, 0 nouvellement installé, 0 à supprimer et 0 non mis à jour.n « 

}

Gérer un parc de machines avec les commandes c’est déjà bien, et c’est surtout la base d’Ansible. Malgré cela, on imagine mal jouer un scénario en exécutant des commandes les unes à la suite des autres. Heureusement pour nous, ansible-playbook est là pour ça !

Playbook pour facilement gérer des tâches

Les scénarios s’écrivent en YAML. En voici un petit exemple.

Lire  Samsung Galaxy S23 vs iPhone 14 : Comment se comparent-ils ?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

– hôtes : baptiste-donaux.fr

tâches :

– nom : Ajouter une clé APT pour le dépôt Docker

apt_key :

keyserver :  » hkp://p80.pool.sks-keyservers.net:80 « 

id : 58118E89F3A912897C070ADBF76221572C52609D

– nom : Ajouter le dépôt APT Docker

apt_repository : repo=‘deb https://apt.dockerproject.org/repo debian-jessie main’ state=présent

– nom : Mise à jour du cache APT avec le nouveau dépôt

apt : update_cache=oui

– nom : Installer le paquet docker-engine s’il n’est pas installén’existe pas

apt : name=docker-engine state=present

– name : Activation et démarrage du service Docker

systemd : enabled=yes state=started name=docker

– name : Installer Python

apt : name=python state=present

– name : Installer PIP

apt : name=python-pip state=present

– name : docker-py dependency

pip : name=docker-py

– name : Pull Nginx image

docker_image : name=nginx pull=yes

– name : Créer un conteneur Nginx

docker_container :

name : proxy

image : nginx

published_ports :

–  » 80:80 « 

état : présent

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

$ ansible my_playbook.yml

PLAY [baptiste-donaux.fr] ******************************************************

TÂCHE [setup] *******************************************************************

ok : [baptiste-donaux.fr]

TASK [Add APT key for Docker repository] ***************************************

ok : [baptiste-donaux.fr]

TASK [Add APT Docker repository] ***********************************************

ok : [baptiste-donaux.fr]

TASK [Update APT cache with new repository] ************************************

ok : [baptiste-donaux.fr]

TASK [Install docker-engine package if it doesn‘t exist] ***********************

ok : [baptiste-donaux.fr]

TASK [Install Python] **********************************************************

ok : [baptiste-donaux.fr]

TASK [Install PIP] *************************************************************

ok : [baptiste-donaux.fr]

TASK [docker-py dependency] ****************************************************

ok : [baptiste-donaux.fr]

TASK [Pull Nginx image] ********************************************************

ok : [baptiste-donaux.fr]

TASK [Create a Nginx container] ************************************************

ok : [baptiste-donaux.fr]

PLAY RECAP *********************************************************************

baptiste-donaux.fr : ok=10 changed=0 unreachable=0 failed=0

Et voilà rien de plus simple. En plus d’exécuter un scénario complet sur un ensemble de serveurs, si l’un d’entre eux se retrouve en erreur, un fichier .retry sera créé et en relançant la commande, le scénario reprendra là où vous en étiez.

Lire  Comment réparer l'absence d'audio à la télévision sur un Steam Deck avec Windows

Relancer facilement votre scénario et reprennez où vous étiez arrêté

Galaxy et où stocker vos modules

Ansible-Galaxy est un Hub pour partager vos modules. Il fonctionne un peu à la manière de Hub Docker pour les images Docker.

Dans certains cas, vous aurez besoin de stocker dans vos scénarios des informations sensibles (mot de passe…). Plutôt que de stocker en clair ces informations, vous pouvez encoder/décoder ses fichiers.

Un petit exemple ne fera pas de mal.

1

2

3

4

– hôtes : localhost

tâches :

– shell : sshpass -p  » foo «  scp -r /bar baz@localhost:/qux

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

$ ansible-vault encrypt my_playbook.yml

Nouveau mot de passe du coffre-fort :

Confirmer le mot de passe du nouveau coffre :

Cryptage réussi

$ cat my_playbook.yml

$ANSIBLE_VAULT;1.1;AES256

34396264333338636331323838386331393664623065383463663661373436643764336536326662

6238626432373334356436613935306630376461633136650a316561316531323937633963643032

64643239616561653864346132356537656536313030656532373733316262663536396438383262

3463373265636232640a626364306666373665303633663630353132383764323530646438383737

31336163633631373162356339633739356461656130353533306137613436663333383137376366

62383533393262376362393565386133306432323266393034616331333932663266613739653538

36663666333938323961343231366266323430376234376363353662386366373061636434613763

35653139316465613562613834373434636238643661633434326661303438666233313732653338

3264

$ ansible-playbook my_playbook.yml -ask-vault-pass

Mot de passe du coffre-fort :

C'est simple de protéger vos playbooks avec Ansible Vault

Cet article a pour simple objectif de présenter Ansible et de montrer en quoi il peut simplifier vos tâches. N’hésitez pas à faire des retours, à améliorer et/ou corriger ce post.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *