Red Hat Ansible Engine
Gérez l'automatisation de vos configurations Linux
Éditions ENI
Avant-propos
Chapitre 1
Création d'un laboratoire
1. Quels outils vous faut-il ?11
1.1 Machines nécessaires12
1.2 Solutions alternatives12
2. Le système d'hôte et l'hyperviseur13
2.1 Installation du système d'hôte13
2.1.1 Obtenir l'image ISO13
2.1.2 Générer une clé USB amorçable14
2.1.3 Bouter le PC sur la clé USB16
2.1.4 Processus d'installation18
2.1.5 Tâches post-installation38
2.2 L'hyperviseur44
2.2.1 Présentation de KVM44
2.2.2 Installation de KVM45
2.2.3 Configuration de KVM46
3. Machine virtuelle modèle54
3.1 Création de la machine virtuelle modèle54
3.2 Installation du système invité67
4. Machines virtuelles de travail72
4.1 Clonage manuel72
4.2 Clonage par script73
5. Test des machines virtuelles75
5.1 Test de la VM server176
5.2 Test de la VM server278
5.3 Test de la VM server379
Chapitre 2
Présentation de Ansible
1. Qu'est-ce que Ansible ?81
2. Architecture81
2.1 Le noeud de contrôle82
2.2 Les hôtes gérés83
2.3 Play et playbook83
2.4 Tâches et modules84
2.5 Plug-ins85
2.6 Ansible Tower et AWX86
2.6.1 Console web86
2.6.2 API REST86
2.7 Ansible Vault87
2.8 Ansible Galaxy87
2.9 Configuration Management DataBase88
2.10 Réseaux88
3. Installation de Ansible89
3.1 Prérequis89
3.2 Processus d'installation sur RHEL 8.090
3.3 Processus d'installation sur CentOS 8.090
3.4 Tâches post-installation92
3.4.1 Afficher la version de Ansible92
3.4.2 Afficher la configuration93
3.4.3 Tester la communication94
4. Hôtes gérés Unix et Linux98
5. Hôtes gérés Microsoft Windows99
6. Hôtes gérés réseau100
Chapitre 3
Déploiement
1. Gestion des inventaires101
1.1 Inventaire statique101
1.1.1 Fichier d'inventaire au format INI102
1.1.2 Fichier d'inventaire au format YAML106
1.1.3 Manipulation de fichiers d'inventaire117
1.2 Inventaire dynamique119
1.2.1 Utilisation de scripts fournis119
1.2.2 Utilisation de vos propres scripts120
1.2.3 Exécution de scripts d'inventaire dynamiques121
1.3 Inventaires multiples122
2. Configuration de Ansible123
2.1 Emplacement du fichier ansible.cfg123
2.2 Directives du fichier de configuration124
2.2.1 Section [defaults]125
2.2.2 Section [privilege_escalation]126
3. Utilisation des commandes ad hoc126
3.1 Module de fichiers127
3.2 Modules pour gérer les paquets logiciels128
3.3 Modules du système132
3.4 Module shell137
3.5 Collecter les faits137
Chapitre 4
Playbooks
1. Définition139
2. Écriture d'un playbook139
3. Exécution de playbooks141
3.1 Principe de fonctionnement142
3.2 Verbosité des playbooks143
3.3 Vérification de la syntaxe143
3.3.1 Vérification avec Ansible-playbook144
3.3.2 Vérification avec yamllint145
3.4 Exécution à blanc d'un playbook146
Chapitre 5
Variables Ansible
1. Définition d'une variable147
1.1 Nom d'une variable147
1.2 Étendue des variables148
1.3 Types de variables157
1.3.1 Types primitifs157
1.3.2 Dictionnaires158
2. Utilisation de variables Ansible159
3. Récupérer le résultat d'une commande162
4. Variables externes167
5. Variables définies sur la ligne de commande169
6. Chiffrer les variables172
6.1 Présentation de Ansible Vault172
6.2 Gestion d'un fichier chiffré172
6.2.1 Création173
6.2.2 Consultation174
6.2.3 Modification175
6.2.4 Chiffrer un fichier existant175
6.2.5 Déchiffrer un fichier existant176
6.2.6 Changer le mot de passe d'un fichier chiffré176
6.2.7 Exécution d'un playbook176
Chapitre 6
Gestion des faits
1. Présentation des faits de Ansible179
1.1 Collecte des faits180
1.2 Variable ansible_facts182
1.3 Activer ou désactiver la collecte184
2. Faits personnalisés184
2.1 Stockage des faits184
2.2 Faits statiques186
2.3 Faits dynamiques187
3. Module set_fact191
4. Variables magiques193
4.1 Variable magique hostvars193
4.2 Variable magique groups195
4.3 Variable magique group_names195
4.4 Variable magique inventory_hostname196
Chapitre 7
Contrôle de tâches
1. Itération de tâches199
1.1 Itération sur une simple liste200
1.2 Itération sur une liste de hachage203
1.3 Itération sur un dictionnaire206
1.4 Capturer le résultat d'une tâche en boucle208
2. Tâches conditionnelles211
2.1 Conditions simples212
2.2 Conditions multiples226
2.2.1 Conditions combinées avec le mot-clé and226
2.2.2 Conditions combinées avec le mot-clé or227
3. Gestion Ansible227
4. Gestion des erreurs de tâche229
4.1 Ignorer l'échec d'une tâche229
4.2 Forcer l'exécution des gestionnaires232
4.3 Spécifier les conditions d'échec d'une tâche234
4.3.1 failed_when235
4.3.2 fai1236
4.4 Spécifier une tâche signalant un résultat « Changed »238
4.5 Gérer les erreurs au sein des blocs Ansible239
Chapitre 8
Manipulation de fichiers sur les hôtes
1. Introduction243
2. Présentation des modules de fichiers244
3. Appliquer les ACL de fichiers245
4. Modifier l'horodatage des fichiers246
5. Copie de fichiers249
5.1 Module copy249
5.2 Module fetch252
6. Suppression de fichiers255
7. Déplacement et renommage des fichiers255
8. Recherche de fichiers257
9. Informations sur l'état d'un fichier260
10. Manipulation d'archives262
10.1 Création d'une archive262
10.2 Extraction d'une archive263
11. Modification de fichiers264
11.1 Module lineinfile264
11.2 Module blockinfile265
11.3 Module replace268
12. Modifications de contexte de fichier SELinux269
13. Synchronisation de fichiers271
14. Modèles Jinja2272
14.1 Présentation de Jinja2272
14.2 Conception et application d'un modèle273
14.3 Structures de contrôle275
14.3.1 Boucles275
14.3.2 Conditions275
14.3.3 Opérateurs276
14.4 Filtres279
14.4.1 Filtres de variable279
14.4.2 Filtres utilisés avec des conditions281
14.5 Déployer un fichier personnalisé282
Chapitre 9
Gestion des rôles Ansible
1. Présentation des rôles285
2. Structure des rôles286
3. Variables287
3.1 Variables de rôle287
3.2 Variables par défaut288
4. Utilisation de rôles288
4.1 Fonctionnement des rôles288
4.2 Contrôle de l'ordre d'exécution289
5. Rôles système297
5.1 Présentation des rôles système297
5.1.1 Rôles système avec support297
5.1.2 Rôles système en préversion technologique298
5.1.3 Rôles système en cours de développement298
5.2 Installation de rôles système299
5.3 Accès à la documentation des rôles système301
5.4 Utilisation des rôles système303
5.4.1 rhel-system-roles.kdump303
5.4.2 rhel-system-roles.network305
5.4.3 rhel-system-roles.selinux306
5.4.4 rhel-system-roles.storage312
5.4.5 rhel-system-roles.timesync314
6. Création de rôles315
6.1 Création de la structure du dossier316
6.2 Définition du contenu du rôle319
7. Déploiement de rôle324
7.1 Ansible Galaxy324
7.1.1 Présentation de Ansible Galaxy324
7.1.2 Aide et documentation sur Ansible Galaxy324
7.1.3 Rechercher des rôles326
7.2 Commande ansible-galaxy327
7.2.1 Recherche de rôles327
7.2.2 Information d'un rôle328
7.2.3 Installation de rôles329
7.2.4 Gestion des rôles locaux332
Chapitre 10
Dépannage
1. Introduction335
2. Outils de dépannage335
2.1 Système de journalisation336
2.2 Syntaxe YAML337
2.2.1 Configuration de Vim338
2.2.2 Utilitaire yamllint341
2.3 Commande ansible-playbook341
2.3.1 Option -syntax-check341
2.3.2 Option -check342
2.3.3 Option -step343
2.3.4 Option -start-at-task344
2.4 Débogage des tâches344
2.5 Fonctionnement de Ansible347
3. Problèmes de connexion avec les hôtes gérés347
3.1 Configuration réseau348
3.2 Identification et authentification349
3.3 Utilisation de commandes ad hoc352
4. Résolution de problèmes concernant les playbooks353
4.1 Analyser la sortie à l'écran353
4.2 Utilisation du mode check356
4.2.1 Prise en charge du mode check356
4.2.2 Activation ou désactivation du mode check356
4.2.3 Voir les modifications apportées357
5. Quelques bonnes pratiques363
5.1 Définir le nom des plays et des tâches364
5.1.1 Nom d'un play364
5.1.2 Nom d'une tâche364
5.2 Commentaire et documentation365
5.3 Rédaction du code365
Index367