work on tuto2
This commit is contained in:
parent
2788600d4f
commit
58e541d6ad
4 changed files with 114 additions and 107 deletions
|
|
@ -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
|
||||
|
|
|
|||
Reference in a new issue