tuto2: add parts on notify, playbooks, ...
This commit is contained in:
parent
d42ef0f5bc
commit
e37d0532b0
1 changed files with 185 additions and 0 deletions
|
@ -241,3 +241,188 @@ disposition](http://docs.ansible.com/ansible/latest/modules_by_category.html)
|
||||||
de copier vos fichiers de configuration à leur place et avec les bons droits
|
de copier vos fichiers de configuration à leur place et avec les bons droits
|
||||||
(`authorized_keys`, `.bashrc`, ...). Installez également les paquets que vous
|
(`authorized_keys`, `.bashrc`, ...). Installez également les paquets que vous
|
||||||
aviez installé à la main (client DHCP, `htop`, ...).
|
aviez installé à la main (client DHCP, `htop`, ...).
|
||||||
|
|
||||||
|
|
||||||
|
Les notifications
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Au sein d'un *playbook*, il est possible de définir des tâches particulières
|
||||||
|
(nommées *handlers* dans le vocabulaire Ansible), qui ne seront exécutées que
|
||||||
|
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 :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
- name: template configuration file
|
||||||
|
template: src=template.j2 dest=/etc/httpd.conf
|
||||||
|
notify:
|
||||||
|
- restart cherokee
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Puis, au même niveau que les *tasks*, on déclare nos *handlers* :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
handlers:
|
||||||
|
- name: restart cherokee
|
||||||
|
service: name=cherokee state=restarted
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Il est attendu que le nom de la notification corresponde à l'attribut `name`
|
||||||
|
d'un handler.
|
||||||
|
|
||||||
|
Voir [la
|
||||||
|
documentation](http://docs.ansible.com/ansible/latest/playbooks_intro.html#handlers-running-operations-on-change)
|
||||||
|
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 :
|
||||||
|
|
||||||
|
- <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
|
||||||
|
modification de sa configuration.
|
||||||
|
|
||||||
|
|
||||||
|
Les variables
|
||||||
|
-------------
|
||||||
|
|
||||||
|
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`).
|
||||||
|
|
||||||
|
|
||||||
|
### Définition
|
||||||
|
|
||||||
|
#### Dans l'inventaire
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
all:
|
||||||
|
hosts:
|
||||||
|
192.168.0.106
|
||||||
|
vars:
|
||||||
|
ntp_server: ntp.epitech.eu
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Cet inventaire définit une variable `ntp_server` qui pourra ensuite être
|
||||||
|
utilisée par une recette installant un serveur NTP. Le cadre d'utilisation de
|
||||||
|
ce genre de variable est adapté lorsqu'un hôte ou un groupe d'hôte seulement
|
||||||
|
partagent des caractéristiques, comme par exemple leur localisation ou
|
||||||
|
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 :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
- hosts: webservers
|
||||||
|
vars:
|
||||||
|
http_port: 80
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Ces variables peuvent être placées dans un fichier, pour plus de lisibilité :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
- hosts: webservers
|
||||||
|
vars_files:
|
||||||
|
- /vars/webservers_common.yml
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Le format correspond au sous arbre que l'on pourrait trouver sous `vars` :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
http_port: 80
|
||||||
|
https_port: 443
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
### Utilisation
|
||||||
|
|
||||||
|
#### Modèles
|
||||||
|
|
||||||
|
Ces variables peuvent être utilisées pour remplir un emplacement de texte dans
|
||||||
|
un modèle. Ansible utilise [Jinja2](http://jinja.pocoo.org/) comme moteur de
|
||||||
|
template, un format très courant dans le milieu du développement Python.
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```
|
||||||
|
I'm running {{ ansible_system }} {{ ansible_os_family }} on {{ ansible_system_vendor }},
|
||||||
|
with {{ ansible_memory_mb.swap.free }} MB Swap available.
|
||||||
|
```
|
||||||
|
</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 :
|
||||||
|
|
||||||
|
```
|
||||||
|
My first nameserver is: {{ ansible_dns.nameservers[0] }}.
|
||||||
|
```
|
||||||
|
|
||||||
|
ou d'un dictionnaire lorsque la clef doit être récupérée d'une variable :
|
||||||
|
|
||||||
|
```
|
||||||
|
My disks are: {% for disk in ansible_device_links.uuids %}
|
||||||
|
- {{ disk }}: {{ ansible_device_links.uuids[disk] }}, {{ ansible_device_links.ids[disk]|join(', ') }}
|
||||||
|
{% endfor %}
|
||||||
|
```
|
||||||
|
|
||||||
|
Notez dans ce dernier exemple l'utilisation d'un filtre `join` permettant
|
||||||
|
d'aplatir la liste retournée.
|
||||||
|
|
||||||
|
#### Dans les recettes
|
||||||
|
|
||||||
|
Au sein même de votre description YAML, vous pouvez utiliser la puissance de
|
||||||
|
Jinja2 :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
- hosts: webservers
|
||||||
|
vars_files:
|
||||||
|
- /vars/webservers_common.yml
|
||||||
|
- /vars/webservers_{{ ansible_os_family }}.yml
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Dans cet exemple, les variables des fichiers `/vars/webservers_common.yml`,
|
||||||
|
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 :
|
||||||
|
|
||||||
|
<div lang="en-US">
|
||||||
|
```yaml
|
||||||
|
tasks:
|
||||||
|
- name: "pkg setup (Debian)"
|
||||||
|
apt: name=chrony state=present
|
||||||
|
when: ansible_os_family == "Debian"
|
||||||
|
- name: "pkg setup (CentOS)"
|
||||||
|
yum: name=chrony state=present
|
||||||
|
when: ansible_os_family == "CentOS"
|
||||||
|
```
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Vous trouverez bien d'autres cas d'utilisation dans [la
|
||||||
|
documentation](http://docs.ansible.com/ansible/latest/playbooks_conditionals.html).
|
||||||
|
|
Reference in a new issue