Je partage ici mes progrès dans l’utilisation d’Ansible.
Introduction
Sur l’article où je faisais mes débuts avec Ansible et celui ou je mets cela en application, je n’avais pas de structure particulière : tous étaient dans un seul et même fichier.
Depuis, je me suis relancé sur le sujet. J’arrive maintenant à configurer plusieurs tâches et utiliser des variables et c’est ce que je vous partage ici.
Contexte
Dans ce tutoriel, on va définir plusieurs rôles que l’ont va appliqué sur un seul est même hôte.
De ce fait, je me positionne dans un dossier avec les fichiers suivants :
- Fichier
hosts.yml
---
all:
hosts:
192.168.92.17:
ansible_python_interpreter: /usr/bin/python3
ansible_user: root
- Fichier
playbook.yml
---
- name: "Azerty"
hosts: all
roles:
- un-role
#- un-autre
Vous l’aurez compris, on va créer des rôles qui auront des noms pas très originaux.
Premier rôle
On créer alors notre premier rôle avec la commande ansible-galaxy init un-role
.
On obtient alors un dossier un-role
avec l’arborescence suivante :
├── defaults
│ └── main.yml
├── files
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── tasks
│ └── main.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
Lors du lancement du playbook (comme configuré dans la partie précédente),
Ansible va exécuter les tâches contenues dans tasks/main.yml
.
On va alors y définir deux actions :
- Copier un fichier
- Installer de paquets
- name: Copie du script
copy:
src: mon_script.sh
dest: /usr/local/sbin/mon_script
mode: u=rwx,g=rwx,o=r
On voit que cette tâche copie le fichier mon_script.sh
en tant que mon_script
dans le dossier /usr/local/sbin
de l’hôte.
Mais à quelle endroit fait référence le dossier source
(celui ou se trouve mon_script.sh
) ?
Tous simplement le dossier files
!
Il vous suffit donc de placer vos fichiers dans ce dossier pour pouvoir
les référencer rapidement. Vous pouvez aussi y mettre une arborescence.
- name: Installation de trucs
apt: name={{ item }} state=latest
loop: "{{ une_liste_de_trucs }}"
L’installation de paquets me permet de vous montrer un autre aspect d’Ansible :
les variables. En effet, l’élément en
Mustache
(soit une_liste_de_trucs
) est à définir dans le fichier vars/main.yml
.
Comme ceci :
une_liste_de_trucs:
- sl
- cmatrix
- cowsay
- toilet
Ou comme cela :
une_liste_de_trucs: ["sl", "cmatrix", "cowsay", "toilet"]
Vous pouvez alors tester cela en revenant dans le dossier racine
(parent de un-role
) avec la commande :
ansible-playbook -i hosts.yml playbook.yml
Second rôle
ansible-galaxy init un-autre
cd un-autre
L’intérêt de faire un autre rôle et de vous présenter autre chose.
On va ici organiser les tâches dans plusieurs fichiers que l’on va ensuite
inclure dans le tasks/main.yml
Fichier tasks/premiere.yml
- name: Copie de 1.txt
copy:
src: un/1.txt
dest: /tmp/1.txt
mode: u=r,g=r,o=r
Fichier tasks/deuxieme.yml
- name: Copie de 2.txt
copy:
src: deux/2.txt
dest: /tmp/2.txt
mode: u=r,g=r,o=r
Les fichiers ont donc respectivement les chemins d’accès suivants :
un-autre/files/un/1.txt
un-autre/files/deux/2.txt
L’appel de ces deux fichiers dans un-autre/tasks/main.yml
se fait de la
manière suivante :
---
# tasks file for un-autre (tasks/main.yml)
- name: Première tâche
include_tasks: un-autre/tasks/premiere.yml
- name: Deuxième tâche
include_tasks: un-autre/tasks/deuxieme.yml
Bizarrement, il faut donner le chemin relatif à la racine du playbook
(pas comme pour les fichiers de dossier files
)…
Tags
Un moment donné, vous allez surement avoir un playbook assez long :
- name: "Azerty"
hosts: all
roles:
- un-role
- un-autre
- encore-un-autre
- avant-avant-dernier
- avant-dernier
- dernier
Lors d’ajout de chose mineure dans un rôle,
il est probable que vous souhaiteriez seulement lancer
ce rôle et pas les autres pour rien.
Pour ma part, je commentais les autres rôles dans le
fichier playbook.yml
et je le lançais.
On peut rendre cela un peu mieux en ajoutant un tag
à ces rôles. Reprenons le playbook.yml
de la manière suivante :
- name: "Azerty"
hosts: all
roles:
- {role: 'un-role', tags: 'un-role'}
- {role: 'un-autre', tags: 'un-autre'}
- {role: 'encore-un-autre', tags: 'encore-un-autre'}
- {role: 'avant-avant-dernier', tags: 'avant-avant-dernier'}
- {role: 'avant-dernier', tags: 'avant-dernier'}
- {role: 'dernier', tags: 'dernier'}
Ainsi, on peut lancé un rôle en utilisant sont tag :
ansible-playbook -i hosts.yml playbook.yml --tags avant-dernier
On peut aussi utiliser plusieurs tags en les séparant par des virgules.
Outroduction
Je suis loin d’avoir un bon niveau en Ansible mais je progresse.
Du coup, il y aura surement un “Stage 3” quand j’aurai des trucs
plus complexes à faire.
Bien à vous ! :wink: