2. Une formation
Introduction
1. Installation et configuration
2. Définition des concepts de base
3. Le format YAML
4. Maitrise des inventaires
5. Méthodes de connexion
6. Introduction aux commandes ad-hoc
7. Maîtrise des Playbooks
8. La puissance d’ansible: Les rôles
9. Découvrir les modules d’ansible
10. Informations complémentaires et bonnes pratiques
Conclusion
Plan de la formation
3. Une formation
Public concerné
Administrateur systèmes Linux
Ingénieurs DevOps, Cloud et automatisation
Exploitants souhaitant mette en œuvre Ansible
Curieux qui ont envie de découvrir Ansible
Passage obligé pour apprendre la CaaC
13. Une formation
Objectifs
Décrire la configuration
Appliquer la configuration de manière
automatique
Conserver l’historique
Apporter des changements documentés
Détecter et corriger les configurations non
conformes
14. Une formation
Outils de gestion
Groupes et sous-groupes
Modification des configurations
Nouveaux paramètres
Automatisation
Ordre de priorité
Mesures correctives
15. Une formation
Outils de gestion
Accélérer les modifications et les
déploiements
Diminuer les risques d’erreurs humaines
Maintenir l’état du système
17. Création d’Ansible
Une formation
Développeur : Michael DeHaan
Première version : 23 avril 2012
Environnement : GNU/Linux, Unix-like,
Windows
Type : Gestionnaire de configuration
Licence : GNU GPL
Site web : https://ansible.com
18. Descriptif général d’Ansible
Une formation
Simple et agentless
Protocole de connexion : SSH
Type de fichiers : YAML
Les nouvelles versions : Tous les 4 mois
22. Une formation
Compétences requises
Le titulaire de la certification est capable
d'accomplir les tâches suivantes
Utiliser des inventaires
Créer des playbooks
Utiliser des playbooks pour configurer des systèmes.
Créer des fichiers de configuration personnalisés
pour les hôtes
Créer des rôles Ansible
Utiliser Ansible Vault pour protéger les données
sensibles
24. Prérequis
Une formation
Machine Linux/Unix disposant de
connexion SSH
Avoir tous les accès administrateur « Root »
Nœud de control
Python 2 (version 2.6 ou ultérieure)
Python 3 (versions 3.5 ou ultérieure)
Nœud géré
Ansible établit une connexion via SSH
25. Une formation
Un paquet communautaire appelé ansible
Un langage et un runtime minimalistes
appelés ansible-core
Installer les paquets
26. Installer la dernière version avec le gestionnaire de paquets de
votre système d'exploitation
Installer les paquets
Installer le paquet communautaire
Installer avec pip
27. Une formation
Installation de ansible-core
Installer ansible-core (version 2.11 et plus)
ou ansible-base (version 2.10) avec pip
Installer ansible-core à partir des sources du
dépôt GitHub
Installer les paquets
28. Installer Ansible sur des systèmes
d’exploitation spécifiques
Une formation
Anass IDI
34. Une formation
Mettre à jour Ansible
Pour effectuer une mise à niveau
Supprimer la version d'Ansible installée,
puis passer à la dernière version
$ pip uninstall ansible
$ pip install ansible
36. Règles de préséance
Paramètres de configuration
Les options de ligne de commande
Mots-clé du Playbook
Variables
La plus basse
La plus élevée
37. Paramètres de configuration
• /etc/ansible/ansible.cfg : configuration globale format INI
• /etc/ansible/hosts : inventaire
• /etc/ansible/roles : répertoire contenant les rôles
38. Une formation
La configuration suit l’ordre de priorité suivant
Le fichier dont le chemin d’accès absolu est indiqué
par ANSIBLE_CONFIG
ansible.cfg
~/.ansible.cfg
etc/ansible/ansible.cfg
Paramètres de configuration
39. Options de ligne de commande
Options de la ligne de commande
La configuration
• Mots-clés des playbooks
• Les variables de l'inventaire
• Les variables des playbooks
40. Une formation
Options de ligne de commande
Plusieurs valeurs à un paramètre qui n’accepte
qu’une seule
$ ansible -u mike -m ping myhost -u carol
Certains paramètres permettent plusieurs valeurs
$ ansible -i /path/inventory1 -i
/path/inventory2 -m ping all
41. Une formation
Mots-clés du playbook
Play (le plus général)
Blocks/includes/imports/roles
Tâches (les plus spécifiques)
42. Une formation
Exemple
hôtes : tous
connexion : ssh
tâches :
- name : Cette tâche utilise ssh.
ping :
- nom : Cette tâche utilise paramiko.
connexion : paramiko
ping :
43. Variables
Variables de connexion
• Mots-clé du playbook
• Option de ligne de commande
• Paramètres de configuration
=
Variables supplémentaires : -- extra-vars
44. Une formation
Sécurité d ’Ansible
Ansible ne chargera pas automatiquement un fichier
de configuration à partir du répertoire de travail
actuel si le répertoire est inscriptible dans le monde
entier
47. Nœuds
Nœuds de contrôle: machine sur laquelle Ansible est exécuté
Nœuds managés: machine sur laquelle Ansible effectue une suite de tâches
Nœud de
contrôle
Nœud de
contrôle
App3
App3
App2
App2
App1
App1
Nœuds
managés
48. Inventaire
Une liste de nœuds gérés
Nœud de
contrôle
App3
App2
App1
Nœuds
managés
App1 :
[192.168.31.1]
App2 :
[192.168.31.25]
App3 :
[192.168.31.33]
Inventaire
51. Plays
Exécute une suite de tâches sur un ou plusieurs hosts, ou un ou plusieurs
groupes
Format : YAML
Playbook : fichier contenant un ou plusieurs plays
Playbook
Plays
56. Une formation
Rôles
Un rôle Ansible est un composant indépendant qui
permet de réutiliser des étapes de configuration
communes
Les rôles ont pour vocation de devenir génériques,
réutilisables et personnalisables grâce aux variables
59. Le format YAML
Une formation
Date d’apparition : 2001
Invention de : Clark EVANS
Objectif : Représenter les informations par code
et de façon lisible
60. Exemple
Une formation
Brownies.yml
---
recette: Brownies aux noix : 1
ingrédients:
- ingrédient: Farine: 70g
- ingrédient: chocolat noir
quantité: 200g
étapes:
- Mélanger le tout
- Allumer le four
- Laisser 30 minutes sous 180 degrès
# en variante, ajouter du sucre tendre
61. Bases
Une formation
Extension: .yml ou .yaml
Commencer le fichier par ---
Finir par . . .
Les commentaires commencent par #
Membres de listes commencent par –
Clé : Valeur
68. Définition d’un inventaire
Une formation
Pour appliquer des playbooks, Ansible a besoin
de connaître la liste des instances sur lesquelles
il effectuera des changements
Pour cela, il utilise un système d’inventaire
69. Composition de l’inventaire
Une formation
La liste des hôtes avec leurs informations de
connection (DNS, ip, utilisateur, …)
Des groupes fonctionnels regroupant des
instances (app, webserver, bdd, …)
70. Emplacement d’un inventaire
Une formation
Les fichiers de configuration d’Ansible se trouvent dans le
répertoire /etc/ansible :
/etc/ansible/ansible.cfg
/etc/ansible/hosts
/etc/ansible/roles Inventaire
72. Inventaire statique
Récupérer manuellement toutes les
adresses IP des machines
Construire l’inventaire
Ce type de supporte pas de mise à l’échelle
automatiquement en cas de changement
73. Inventaire dynamique
Une formation
Si le fichier d’inventaire est exécutable
On parle alors de script d’inventaire :
{ "test":
{ "hosts":
[ "test1.example.com" ,
"test2.example.com" ]
}
}
81. Les variables
Une formation
Chaque host peut avoir ses propres variables
Chaque host peut redéfinir la configuration
d’Ansible
Les variables et paramètres définis dans l’inventaire
sont prioritaires par rapport au Playbook
82. Affectation d’une variable
[atlanta]
host1 http_port=80 maxRequestsPerChild=808
host2 http_port=303 maxRequestsPerChild=909
atlanta:
host1:
http_port: 80
maxRequestsPerChild: 808
host2:
http_port: 303
maxRequestsPerChild: 909
Format INI
Format YAML
83. Les alias
Une formation
A chaque fois, pour déployer un playbook sur un nœud
managé, au lieu de saisir son adresse IP on met en place
un alias à savoir my_host :
my_host ansible_ssh_host=192.168.0.18 [webservers]
my_host
85. Méthodes de connexion
OpenSSH natif
ControlPersist Paramiko
Autres méthodes de connexion
Plugin de connexion
Ansible-pull
86. Utilisateur distant
Possibilité de définir un utilisateur différent du nœud de contrôle
Pourquoi
Effectuer des tâches avec
certains privilèges
Le mot-clé « become »
Comment
89. Introduction au protocole SSH
Une formation
SSH = Secure Shell (Port 22)
Assurer la connexion à distance des utilisateurs à
d'autres systèmes
Accéder à l’intérieur de son serveur distant pour
effectuer des configurations ou actions
93. Etapes fondamentales
Install
• Installer Ansible sur le nœud de contrôle
Config
• Configurer SSH sur le nœud géré
• Ajouter un inventaire
Test
• Tester la connexion
94. Installer Ansible sur le nœud de contrôle
EC2 de
contrôle
EC2 gérée
Ansible
NB : l’activation du port 22 au niveau du groupe de sécurité est primordiale
Python
95. Configurer SSH
Une formation
Configurer l'agent SSH
$ ssh-agent bash
$ ssh-add ~/.ssh/id_rsa
Ajouter le fichier de clé privée
$ ssh-agent bash
$ ssh-add ~/.ssh/keypair.pem
Méthode 1
96. Configurer SSH
EC2 de
contrôle
EC2 gérée
$ssh-keygen
$sudo nano
.ssh/authorized_keys
Génération d’une clé
Configuration des clés autorisées
Méthode 2
97. Ajouter un inventaire
EC2 de
contrôle
$sudo nano
/etc/ansible/hosts
/etc/ansible/hosts
[hosts]
host1 ansible_ssh_host= IP_ADDRESS
/etc/ansible/hosts
[hosts]
host1 ansible_ssh_host= IP_ADDRESS
98. Exécution contre le nœud de contrôle
Une formation
Commande pour exécuter contre le nœud de contrôle
$ ansible localhost -m ping -e
'ansible_python_interpreter="/usr/bin/env
python"'
99. Tester la connexion
Le module ping permet de savoir si la communication avec toutes les machines
indiquées dans l’inventaire se fait correctement :
$ ansible all -m ping
host1 | SUCCESS => {
"changed": false,
"ping": "pong
}
Commande
Résultat
102. Propriétés des commandes ad-hoc
Une formation
Exécute une seule tâche en ligne de commande
Ne nécessite pas de Playbook
Utile pour tester une tâche ou exécuter une action
simple
$ ansible [pattern] -m [module] -a "[module
options]"
103. Cas d’utilisation des commandes ad-hoc
Redémarrer des
serveurs
Copier des fichiers
Gérer des paquets
104. Pratiquer les cas d’utilisation
des commandes ad-hoc
Une formation
Anass IDI
105. Redémarrer les serveurs
• Ajouter le groupe à l’inventaire
Etape 1
• dentification SSH active
Etape 2
• Lancer la commande de
redemarrage
Etape 3
106. Redémarrer les serveurs
Une formation
Redémarrer tous les serveurs du groupe
$ ansible atlanta -a "/sbin/reboot«
Redémarrer les serveurs avec 10 fourches parallèles
$ ansible atlanta -a "/sbin/reboot" -f 10
/usr/bin/ansible
Se connecter sous un autre utilisateur
$ ansible atlanta -a "/sbin/reboot" -f 10 -u
username
107. Gestion de fichiers
Pour transférer un fichier directement vers tous les serveurs du groupe
$ ansible atlanta -m ansible.builtin.copy -a
"src=/etc/hosts dest=/tmp/hosts"
Répétition ansible.builtin.template
108. Gestion de fichiers
permet de changer la propriété et les
permissions sur les fichiers
ansible.builtin.file
116. Pourquoi utiliser les Playbooks
Une formation
Des scénarios complexes
Ils sont gardés sous une source de contrôle (git)
Assurer des configurations conformes aux
spécifications
117. Exemple
---
- hosts: webservers
vars:
http_port: 80
max_clients: 200
tasks:
- name: ensure apache is at the last version
yum:
name: httpd
state: latest
- name: write the apache config file
template:
src: /srv/httpd.j2
dest: /etc/httpd.conf
Tâches
Play Playbook
118. Quelques cas d’utilisation
Une formation
Exécution de tâches sur une machine différente
Regrouper un ensemble de tâches avec des blocs
Exécuter des tâches uniquement lorsque quelque
chose a changé
Définition de valeurs d'environnement à distance
121. Les variables
La création des variables se fait avec la syntaxe YAML standard
Endroit de définition
Playbook
Inventaire
Rôles
CLI
122. Récupération des variables
Une formation
Une variable ansible peut être définie à plusieurs
endroits
CLI vars
Inventories
Group vars
Host vars
Extra Vars
123. Ordre de priorité des variables
Une formation
Passées sur la ligne de commande
Définies dans le Playbook
Automatiquement définies par Ansible
Définies dans l’inventaire
124. Ordre de priorité des variables
Une formation
Une variable est définie par un couple clé/valeur où la clé
est normalisée
my_string: "value"
my_list: ["blob", "alice"]
my_lisy:
- "bob"
- "alice"
my_dict:
item1: value1
item2: value2
125. Exemple des variables en CLI
Une formation
variables-lignecom.yml
---
- hosts: test
tasks:
- name: affichage de la variable var
command: echo {{ var }}
$ ansible-playbook -v -e var=toto variables-
lignecom.yml
126. Exemple des variables dans l’inventaire
Une formation
/etc/ansible/hosts
[test]
test1.example.com var=test1 test2.example.com var=test2
variables-inventaire.yml
---
- hosts: test
tasks:
- name: affichage de la variable var
command: echo {{ var }}
128. Les facts
Une formation
Les faits Ansible sont des données relatives à vos
systèmes distants
Les systèmes d'exploitation
Les adresses IP
Les systèmes de fichiers attachés
Désactivation = INJECT_FACTS_AS_VARS
129. Désactivation des faits
Une formation
Le fait de désactiver la collecte des facts au niveau de la
pièce pour améliorer l'évolutivité
La désactivation des faits peut particulièrement améliorer
les performances
Pour désactiver la collecte de faits :
hosts: whatever
gather_facts: no
130. Ajout de données personnalisées
Une formation
Ajout des valeurs personnalisées
Ecrire un module de faits personnalisés
Définir des faits temporaires avec une tâche
ansible.builtin.set_fact
Fournir des faits personnalisés permanents en utilisant le
répertoire facts.d
133. Types de conditions
Une formation
Les conditions avec « when »
Les conditions basées sur des variables
Les conditions basées sur des variables enregistées
134. Les conditions avec « when »
Une formation
L'instruction conditionnelle la plus simple s'applique
à une seule tâche est : when
Création de la tâche
Ajouter une instruction when pour effectuer le test
135. Les conditions avec « when »
Une formation
tasks:
- name: Configure SELinux to start mysql on any port
ansible.posix.seboolean:
name: mysql_connect_any
state: true
persistent: yes
when: ansible_selinux.status == "enabled"
Condition
136. Conditions basées sur des variables
enregistrées
Une formation
Besoin: Exécution ou ignorance d’une tâche en fonction
du résultat d'une tâche précédente
Enregistrement du résultat de la tâche précédente en
tant que variable
Création d’un test conditionnel basé sur la variable
enregistrée
137. Une formation
- name: Test play
hosts: all
tasks:
- name: Register a variable
ansible.builtin.shell: cat /etc/motd
register: motd_contents
- name: Use the variable in conditional statement
ansible.builtin.shell: echo "motd contains the word hi"
when: motd_contents.stdout.find('hi') != -1
Conditions basées sur des variables
enregistrées
138. Conditions basées sur des variables
Une formation
Des conditions nécessitant une entrée booléenne :
vars:
epic: true
monumental: "yes"
Ansible exécutera l'une des
tâches et ignorera l'autre
140. Principe des étiquettes « tags »
Une formation
Les étiquettes (tags) sont des chaînes de caractères
arbitraires associées à des structures d’Ansible
principalement des tâches ou des rôles
141. Processus d’exécution des tags
Une formation
Ajouter des balises aux tâches
Sélection des balises lors de l’exécution des
Playbooks
+
142. Exemple des tags
- Yum :
name: httpd
tags: package
ansible-playbook tag.yml --tags "conf"
ansible-playbook tag.yml --skip-tags
"service"
ansible-playbook tag.yml --list-tags
- Copy :
src: httpd.conf
dest: httpd.conf
tags: conf
- Service :
name: httpd
state: restarted
tags: service
143. Utilisation des étiquettes
Options de la commande ansible-playbook
-v --skip-tags
Exécuter les tâches
correspondant aux étiquettes
indiquées
Ne pas exécuter les tâches
correspondant aux étiquettes
indiquées
144. Ajout des balises à des tâches individuelles
Ajout des balises aux tâches dans les livres de jeu, dans les fichiers de tâches ou dans
un rôle
tasks:
- name: Install the servers
ansible.builtin.yum:
name:
- httpd
- memcached
state: present
tags: - packages
---
- hosts: test
remote_user: root
tasks:
- name: install. nginx p
package:
name: nginx
state: present
tags:
- installation
146. Qu’est ce qu’une boucle ?
Début
Si la
condition est
vraie
Exécuter une action
oui
Non
147. Générer une boucle sur une liste
Une formation
Types de listes
Items : éléments de la liste
Dictionnaire : sur les clé/valeur du dict
Variable de la boucle : {{ item }}
148. Génération de boucle simple sur une liste
- name: Restart with Loop
service:
name: "{{ item }}"
state: restarted
loop:
- httpd
- ntpd
- name: Restart with Loop
service:
name: "{{ item.name }}"
state: "{{ item.state }}«
loop:
- name: httpd
state: restarted
- name: ntpd
state: started
Type de liste : items Type de liste : items
149. Définir la liste en tant que variable
loop: "{{ somelist }}"
- name: Restart with httpd
service:
name: "{{ item }}"
state: restarted
- name: Restart with ntpd
service:
name: "{{ item }}"
state: restarted
150. Itération sur une liste de hachages
Une formation
- name: Restart with Loop
service:
name: "{{ item.name }}"
state: restarted
loop:
- { name: ‘httpd’}
- { name : ‘ntpd’}
151. Itération sur un dictionnaire
Une formation
- name: Using dict2items
ansible.builtin.debug:
msg: "{{ item.key }} - {{ item.value }}"
loop: "{{ tag_data | dict2items }}"
vars:
tag_data:
Environment: dev
Application: payment
152. Ajout de contrôle aux boucles
Une formation
- debug:
msg: "{{ index }} {{ value }}"
loop:
- httpd
- sshd
loop_control:
loop_var: value
index_var: index
153. Ajout de contrôle aux boucles
Une formation
- debug:
msg: "{{ item.state }}"
loop:
- name: httpd
state: started
loop_control:
label: "{{ item.state }}"
154. Ajout de contrôle aux boucles
Une formation
- service:
- name: "{{ item }}"
state: started
loop:
- httpd
-ntpd
loop_control:
pause: 3
155. Comparaison entre loop et with_*
Une formation
Les mots-clés with_<lookup> s'appuient sur les
plugins de recherche
Le mot-clé loop est équivalent à with_list
156. Comparaison entre loop et with_*
Une formation
With_* + migrer de with_X vers loop
Loop
157. Comparaison entre loop et with_*
Une formation
loop: "{{ lookup('fileglob',
'*.txt', wantlist=True) }}"
with_fileglob: '*.txt'
159. Principe de la délégation
Une formation
La délégation permet de forcer une action en
local/remote
Déporte une tâche sur une autre machine
Gérer des environnements interdépendants de
manière précise et efficace
160. Délégation de tâches
Une formation
La délégation permet de forcer une action en local/remote
hosts: ci
Tasks:
- name: Wait for Jenkins to started
wait_for:
host: ci.alphorm
state: present
delay: 2
timeout: 120
delegate_to: 127.0.0.1
161. Délégation de facts
Une formation
Pour affecter les facts collectés à l'hôte délégué au lieu de
l'hôte actuel :
---
- hosts: app_servers
tasks:
- name: Gather facts from db servers
ansible.builtin.setup:
delegate_to: "{{ item }}"
delegate_facts: true
loop: "{{ groups['dbservers'] }}"
162. Playbooks locaux
Une formation
Définir la ligne hosts : hosts : 127.0.0.1
Exécuter le playbook comme suit :
$ansible-playbook playbook.yml --
connection=local
164. L'escalade des privilèges
Une formation
Les systèmes d'escalade de privilèges permettent
d’exécuter des tâches avec les privilèges de root ou
autres autorisations
165. Le mot clé become
become défini à yes pour activer l'escalade des privilèges
- name: Ensure the httpd service is running
service:
name: httpd
state: started
become: yes
166. become_user défini sur l'utilisateur avec les privilèges souhaités
- name: Run a command as the apache user
command: somecommand
become: yes
become_user: apache
Le mot clé become
167. Become-method remplace la méthode par défaut définie dans ansible.cfg
- name: Run a command as nobody
command: somecommand
become: yes
become_method: su
become_user: nobody
Le mot clé become
168. remote_
user
Nom de l’utilisateur pour la connexion SSH
- name: My Play
hosts: all
remote_user: admin
tasks:
- name: Ensure httpd is present
yum:
name: httpd
state: present
become: true
become_user: webuser
Le mot clé become
169. Risques et limites de become
Une formation
Risques liés au fait de devenir un utilisateur
non privilégié
Le fichier de module est non lisible par
l'utilisateur qu'Ansible doit devenir
171. Définition des rôles
Une formation
Les rôles sont des regroupements de tâches qui forment
des composants, basés sur une structure définie.
Regroupe et
ordonne
Template pour
les inventaire
Attribue des
variable
Réutilisable
172. Principe des rôles
Une formation
Un rôle est la décomposition des différentes parties d’un
playbook .
Une fonction précise organise ces parties dans un ensemble
de répertoires et de fichiers.
173. La structure des rôles
Une formation
roles/
common/
tasks/
handlers/
library/
files/
templates/
vars/
defaults/
meta/
8 répertoires
standards
principaux
174. Stockage et recherche des rôles
Une formation
Recherche
et
stockage
des rôles
Recherche
et
stockage
des rôles
La configuration
roles_path
La configuration
roles_path
Répertoire /roles
Répertoire /roles
/etc/ansible/roles
/etc/ansible/roles
175. Ancienne utilisation VS Nouvelle
utilisation
Une formation
Ancienne façon :
utiliser les rôles dans une
pièce
Utilisation classique et
statique
Nouvelle façon :
• import_role
• include_role
Plus de flexibilité et de facilité
d’intervention.
176. Utilisation originale et classique
Une formation
roles.yml
---
- hosts: test
remote_user: root
roles:
- nginx
- postgresql
177. Utilisation de include et import
Une formation
- hosts: webservers
tasks:
- debug:
msg: "before we run our role"
- import_role:
name: example
- include_role:
name: example
vars:
foo: bar
- debug:
msg: "after we ran our role"
178. Exécution d’un rôle de façon multiple
Une formation
# playbook.yml
---
- hosts: webservers
roles:
- foo
- foo
# roles/foo/meta/main.yml
---
allow_duplicates: true Exécution multiple
179. Utilisation des dépendances de rôles
Une formation
Objectif : permet de tirer automatiquement d’autres rôles
Les dépendances de rôle sont des conditions préalables,
et non de véritables dépendances
Emplacement : le fichier meta/main.yml
182. Principe des handlers
Une formation
Objectif
Permet de déclencher l’exécution de certaines actions à la
suite des tâches à accomplir si celles-ci le sont
effectivement
Référencé par plusieurs tâches
Exécuté qu’une seule fois
Exécuté dans l’ordre prédéfini
Exécute des opérations sur changement
183. Contrôle de l’éxécution des handlers
Une formation
tasks:
- name: Some tasks go here
ansible.builtin.shell: ...
- name: Flush handlers
meta: flush_handlers
- name: Some other tasks
ansible.builtin.shell: ...
déclenche tous les handlers
notifiés
184. Utilisation de variables avec les
gestionnaires
Une formation
Placer les variables dans les paramètres de la tâche
du gestionnaire
Charger les valeurs en utilisant include_vars
Ecouter des sujets génériques: listen: « restart web
services »
Notifier les sujets génériques: notify: "restart web
services"
185. Exemple de « listen »
Une formation
handlers:
- name: Restart memcached
ansible.builtin.service:
name: memcached
state: restarted
listen: "restart web services"
- name: Restart apache
ansible.builtin.service:
name: apache
state: restarted
listen: "restart web services"
186. Exemple de « notify »
Une formation
tasks:
- name: Restart everything
ansible.builtin.command: echo "this task will
restart the web services"
notify: "restart web services"
188. Principe de Galaxy
Une formation
Galaxy est un site Web permettant le téléchargement
et le télé dépôt de rôles réalisés par la communauté
Un repository communautaire
https://galaxy.ansible.com
Contient les rôles
189. La commande ansible-galaxy
# Chercher un rôles
$ansible-galaxy search <string>
# Afficher les informations d’un rôle
$ansible-galaxy info
# Installer/désinstaller
$ansible-galaxy <install/remove>
# Liste les rôles trouvés localement
$ansible-galaxy list
# Créer un rôle
$ansible-galaxy init
Une formation
190. Le partage des rôles
Ansible Galaxy
Noter et évaluer un
rôle
Télécharger un rôle
Trouver un rôle
192. Introduction des modules
Une formation
Des unités discrètes de code utilisées à partir de la
CLI ou dans une tâche de playbook
Ansible exécute chaque module, généralement sur le
nœud géré distant, et collecte les valeurs de retour
193. Principe des modules
Une formation
Les modules sont les composants d’Ansible qui
effectuent les actions sur les machines distantes
Ansible propose de très nombreux modules
194. A partir de la CLI
Une formation
$ ansible webservers -m service -a
"name=httpd state=started«
$ ansible webservers -m ping
$ ansible webservers -m command -a
"/sbin/reboot -t now"
195. A partir des playbooks
Une formation
- name: reboot the servers
command: /sbin/reboot -t now
OU
- name: restart webserver
service:
name: httpd
state: restarted
200. Synopsis
Une formation
module-command.yml
---
- hosts: test
remote_user: root
tasks:
- name: création clé rndc
command: rndc-confgen
-a -r /dev/urandom
args:
creates: /etc/rndc.key
le nom de la
commande suivi
d'une liste
d'arguments
201. Synopsis
Une formation
module-command.yml
---
- hosts: test
remote_user: root
tasks:
- name: création clé rndc
command: rndc-confgen
-a -r /dev/urandom
args:
creates: /etc/rndc.key
exécution sur tous les
nœuds sélectionnés
202. Synopsis
Les variables comme $HOSTNAME et les opérations comme
"*", "<", ">", "|", " ;" et "&"
ne fonctionneront pas
ansible.builtin.shell
205. Exemples
Une formation
# 'cmd' is module parameter
- name: Run command if /path/to/database does not exist
(with 'cmd' parameter)
ansible.builtin.command:
cmd: /usr/bin/make_database.sh db_user db_name
creates: /path/to/database
223. Synopsis
Une formation
Afficher un message ou le contenu d’une
variable
Déboguer des variables sans arrêter le
playbook
Déboguer avec la directive 'when:’
Supporté par Windows
225. Exemples
- name: Print return information from the previous task
ansible.builtin.debug:
var: result
verbosity: 2
- name: Get uptime information
ansible.builtin.shell: /usr/bin/uptime
register: result
233. Exemples
# create a directory if it doesn't exist
- file:
path: /etc/some_directory
state: directory
mode: 0755
# updates modification and access time of given file
- file:
path: /etc/some_file
state: file
mode: 0755
modification time: now
access time: now
252. Synopsis
Une formation
Gérer les paquets sur une cible sans spécifier un
module de gestion de paquets
Ce module agit comme un proxy vers le module de
gestion de paquets sous-jacent
259. Synopsis
Une formation
Contrôler les services sur les hôtes distants
Gérer des daemons (activation, démarrage,
redémarrage, etc.)
Le module service est souvent utilisé dans des
gestionnaires
262. - name: Restart service httpd, in all cases
ansible.builtin.service:
name: httpd
state: restarted
- name: Reload service httpd, in all cases
ansible.builtin.service:
name: httpd
state: reloaded
Exemples
265. La modélisation Jinja2
Jinja2
Accès aux
variables
Expressions
dynamiques
Le contrôleur Ansible crée tous les modèles
La modélisation minimise les besoins en paquets sur la cible
266. Les filtres
Une formation
Transformer de JSON en YAML
Diviser une URL pour extraire le nom d'hôte
Obtenir le hachage SHA1 d'une chaîne
Ajouter ou multiplier des entiers
Gérer les variables manquantes ou indéfinies
271. Les blocs
Une formation
Groupement logique de tâches
Gestion des erreurs similaire à la gestion des
exceptions dans de nombreux langages de
programmation
Héritage des directives appliquées au niveau du bloc
272. Exemple de blocs
Une formation
tasks:
- name: Install, configure, and start Apache
block:
- name: Install httpd and memcached
ansible.builtin.yum:
name:
- httpd
- memcached
state: present
- name: Apply the foo config template
ansible.builtin.template:
src: templates/src.j2
dest: /etc/foo.conf
when: ansible_facts['distribution'] == 'CentOS'
become: true
become_user: root
ignore_errors: yes
274. Principes de Vault
Une formation
Chiffrement du contenu sensible
Moyen de gestion (chiffrement/déchiffrement) :
Ansible-vault
Utilisation des données chiffrées dans les commands
ad-hoc
275. La commande ansible-vault
Une formation
Create
Créer un fichier encrypté
View
Voir le contenu d’un fichier encrypté
Edit
Editer un fichier encrypté
Rekey
Changer le mot de passe
Encrypt
Encrypter un fichier existant
276. Exemples
Une formation
Créer un fichier chiffré
$ ansible-vault create example.yml
New Vault password:
Confirm New Vault password:
Editer un fichier chiffré
$ ansible-vault edit example.yml
Vault password:
Afficher un fichier chiffré
$ ansible-vault view vault.yml
Vault password:
278. Bonnes pratiques générales
Une formation
Utiliser une version récente d’Ansible
Variabiliser au maximum
Pas de données sensibles dans les playbooks
Debogger un playbook
Respecter le principe d’idempotence
Documenter
Utiliser les pre et post Tasks
Sécuriser au max la machine de control
279. Bonnes pratiques pour les rôles
Une formation
Utiliser un rôle par composant
Ne pas utiliser les rôles pour des
environnements
Ne pas dupliquer un rôle pour l'appliquer
sur un autre scope de serveurs
280. Bonnes pratiques pour les inventaires
Une formation
Séparer les inventaires par environnement
Découper les groupes des inventaires
Ne pas utiliser un inventaire et faire des
groupes environnements
281. Utiliser les différentes options d’Ansible
Une formation
Mode Dry Run
ansible-playbook playbook.yml –check
Mode Differenciation
ansible-playbook playbook.yml --check --
diff