work on tuto2

This commit is contained in:
nemunaire 2019-03-12 13:02:39 +01:00
commit 58e541d6ad
4 changed files with 114 additions and 107 deletions

View file

@ -12,7 +12,7 @@ Comme tout bon ~~paresseux~~ sys. admin qui se respecte, sans plus attendre,
vous allez vouloir automatiser toutes ces actions rébarbatives. Comme de très
nombreuses personnes sont passées par là avant vous, il existe un grand nombre
de solutions pour gérer les configurations d'un parc de machines. Parmi les
plus connues, citons : [Puppet](https://puppet.com/),
plus connues, citons : [Puppet](https://puppet.com/),
[Chef](http://www.chef.io/), [SaltStack](https://saltstack.com/) ou encore
[Ansible](https://www.ansible.com/).
@ -23,17 +23,17 @@ Introduction à Ansible
Ansible est une solution de gestion de configuration. Basé sur
[Python](https://www.python.org/) et
[YAML](http://www.yaml.org/spec/1.2/spec.html), sa principale particularité est
de ne pas nécessité de daemon sur les machines qu'il va gérer : tout se fait
de ne pas nécessité de daemon sur les machines qu'il va gérer : tout se fait
exclusivement via SSH, à partir de la machine d'un administrateur, possédant
Ansible.
Son installation est très simple, car les dépendances sont minimes et l'outil
n'a pas besoin de base de données pour fonctionner : tout va se faire à partir
n'a pas besoin de base de données pour fonctionner : tout va se faire à partir
d'une arborescence de fichiers, qui sera gérée par Git.
Commencez par installer Ansible, sur une machine distincte de la machine
virtuelle démarrée : la machine hôte sera parfaitement adaptée à cette tâche,
d'autant plus que l'installation de la plate-forme est propre et légère : vous
virtuelle démarrée : la machine hôte sera parfaitement adaptée à cette tâche,
d'autant plus que l'installation de la plate-forme est propre et légère : vous
ne risquez pas de vous retrouver avec une usine à gaz impossible à retirer.
[Consultez la procédure d'installation pour votre distribution ici](http://docs.ansible.com/ansible/latest/intro_installation.html).
@ -63,7 +63,7 @@ chose à faire consiste à les inventorier.
Commençons par créer un répertoire, qui contiendra l'ensemble de nos
configurations à destination d'Ansible. Dans ce répertoire, créons un fichier
d'inventaires `hosts`, contenant l'IP de notre machine :
d'inventaires `hosts`, contenant l'IP de notre machine :
<div lang="en-US">
```yaml
@ -83,7 +83,7 @@ donner des caractéristiques spécifiques à vos machines.
### `ping`
Lancez ensuite la commande suivante :
Lancez ensuite la commande suivante :
<div lang="en-US">
```
@ -107,12 +107,12 @@ SSH sur les machines, pour éviter d'avoir à taper le mot de passe à chaque
test.
Si vous avez bien suivi jusqu'ici, vous savez qu'il ne faut pas utiliser le
compte `root` directement ! Pas d'inquiétude, tout est prévu dans Ansible :
compte `root` directement ! Pas d'inquiétude, tout est prévu dans Ansible :
retirer l'option `--user root` si votre nom d'utilisateur local est identique
que celui dans la machine virtuelle, ou adaptez l'option en conséquence.
Et ajoutez les options `--become` et `--ask-become-pass` (utilisez `--sudo` et
`--ask-sudo-pass` pour les vieilles versions) :
`--ask-sudo-pass` pour les vieilles versions) :
<div lang="en-US">
```bash
@ -123,9 +123,9 @@ ansible --inventory-file hosts all -m ping -u bruce --become --ask-become-pass
### Les modules
Les modules Ansible ont généralement deux missions distinctes :
Les modules Ansible ont généralement deux missions distinctes :
- récupérer des informations en allant les extraire sur chaque machine ;
- récupérer des informations en allant les extraire sur chaque machine ;
- pousser des nouvelles informations pour atteindre un état précis.
Lorsque les informations récupérées montrent que l'état est déjà atteint,
@ -133,7 +133,7 @@ aucune modification n'est faite sur la machine, on parle d'idempotence.
À noter cependant que lorsque l'on retire un état de notre recette, il est
conservé tel quel sur la machine. Par exemple, si un utilisateur `toto` est
créé suite à l'application d'une recette décrivant l'utilisateur `toto` ; si
créé suite à l'application d'une recette décrivant l'utilisateur `toto` ; si
l'on supprime la description, l'utilisateur ne sera pas supprimé des machines
sur lequel la recette aura été appliquée. Pour qu'il soit supprimé, il faut
modifier la description pour signaler que cet utilisateur ne doit pas
@ -144,7 +144,7 @@ trouvé, il sera donc supprimé.
### Collecte du mercredi
Parmi les modules de base, le module `setup` permet de récupérer un grand
nombre de caractéristiques de la machine distance, voyez plutôt :
nombre de caractéristiques de la machine distance, voyez plutôt :
<div lang="en-US">
```bash
@ -165,7 +165,7 @@ Ma première recette
Un livre de recettes (*playbook* dans le vocabulaire d'Ansible), regroupe les
descriptions des états que l'on souhaite obtenir sur un groupe de machines données.
Par exemple, voici à quoi pourrait ressembler un tel recueil :
Par exemple, voici à quoi pourrait ressembler un tel recueil :
<div lang="en-US">
```yaml
@ -202,7 +202,7 @@ d'Ansible](http://docs.ansible.com/ansible/latest/playbooks.html).
### Exécution d'un *Playbook*
Placer le contenu dans un fichier YAML, par exemple `playbook.yml`, non loin du
fichier `hosts` créé à la section précédentes, puis lancez :
fichier `hosts` créé à la section précédentes, puis lancez :
<div lang="en-US">
```bash
@ -214,7 +214,7 @@ ansible-playbook -i hosts playbook.yml
### Coup de pouce
Voici à quoi ressemblerait votre premier playbook créant l'utilisateur
`adeline` :
`adeline` :
<div lang="en-US">
```yaml
@ -252,7 +252,7 @@ si un changement à eu lieu. Par exemple, nous pourrions déclarer une tâche de
redémarrage du serveur web, seulement lorsque sa configuration est mise à
jour.
Pour se faire, il faut ajouter un élément `notify` à sa tâche :
Pour se faire, il faut ajouter un élément `notify` à sa tâche :
<div lang="en-US">
```yaml
@ -263,7 +263,7 @@ Pour se faire, il faut ajouter un élément `notify` à sa tâche :
```
</div>
Puis, au même niveau que les *tasks*, on déclare nos *handlers* :
Puis, au même niveau que les *tasks*, on déclare nos *handlers* :
<div lang="en-US">
```yaml
@ -281,9 +281,9 @@ documentation](http://docs.ansible.com/ansible/latest/playbooks_intro.html#handl
pour davantage de détails et d'exemples.
La configuration de votre serveur SSH laisse à désirer. Corriger les problèmes
énoncés par ces deux articles :
énoncés par ces deux articles :
- <https://ringyt.wordpress.com/2017/05/23/default-hardened-ssh-server-config/> ;
- <https://ringyt.wordpress.com/2017/05/23/default-hardened-ssh-server-config/> ;
- <https://stribika.github.io/2015/01/04/secure-secure-shell.html>.
Mettez en place un *handler* pour relancer votre serveur SSH en cas de
@ -293,7 +293,7 @@ modification de sa configuration.
Les variables
-------------
Les variables peuvent provenir de très nombreux emplacements : définies
Les variables peuvent provenir de très nombreux emplacements : définies
spécifiquement pour l'hôte, chargées depuis des fichiers lié au groupe auquel
appartient la machine, liées à la recette ou à la tâche en cours d'exécution,
récupérée par un module (comme le module `setup`).
@ -323,7 +323,7 @@ datacenter de rattachement, etc.
#### Dans un *playbook*
De la même manière que dans l'inventaire, il est possible de définir des
variables dans une recette :
variables dans une recette :
<div lang="en-US">
```yaml
@ -333,7 +333,7 @@ variables dans une recette :
```
</div>
Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
<div lang="en-US">
```yaml
@ -343,7 +343,7 @@ Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
```
</div>
Le format correspond au sous arbre que l'on pourrait trouver sous `vars` :
Le format correspond au sous arbre que l'on pourrait trouver sous `vars` :
<div lang="en-US">
```yaml
@ -369,10 +369,8 @@ I'm running {{ ansible_system }} {{ ansible_os_family }} on {{ ansible_system_ve
</div>
Ce format est relativement générique. Ainsi, pour accéder aux éléments d'une
table de hash/dictionnaire, on utilise le caractère `.` ;
Les crochets `[x]` sont utilisés principalement pour accéder aux éléments des
tableaux :
table de hash/dictionnaire, on utilise le caractère `.` ; les crochets `[x]`
sont utilisés principalement pour accéder aux éléments des tableaux :
<div lang="en-US">
```
@ -380,7 +378,7 @@ My first nameserver is: {{ ansible_dns.nameservers[0] }}.
```
</div>
ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable :
ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable :
<div lang="en-US">
```
@ -396,7 +394,7 @@ d'aplatir la liste retournée.
#### Dans les recettes
Au sein même de votre description YAML, vous pouvez utiliser la puissance de
Jinja2 :
Jinja2 :
<div lang="en-US">
```yaml
@ -414,7 +412,7 @@ puis celles de `/vars/webservers_Debian.yml` seront chargées dans le contexte.
#### Conditions
Une autre utilisation possible des variables est d'appliquer ou de passer des
tâches. Par exemple :
tâches. Par exemple :
<div lang="en-US">
```yaml