Ansible : plus d edoc pour les conditions et filtres

This commit is contained in:
Jérémy Lecour 2021-10-06 09:18:46 +02:00 committed by Jérémy Lecour
parent 3713d4e12a
commit 734293e1cb

View file

@ -679,6 +679,33 @@ Il est possible de consulter le contenu détaillé de la variable avec `debug` :
Pour certains modules, `register` est presque un passage obligatoire pour une utilisation cohérente des éléments (stat…).
Le contenu d'une variable issue d'un `register` peut être utilisé dans des conditions pour des _tasks_ ultérieures.
Dans l'exemple ci-dessus on utilise une valeur intrinsèque de l'objet `stat` généré par le module, mais il y a des valeurs qui sont utilisables quel que soit le module utilisé.
~~~
- copy:
src: my_file
dst: /path/to/file
register: _file_copy
~~~
Cette autre _task_ s'exécute si la précédente s'est terminée avec succès, en échec, a été sautée ou bien a produit un changement
~~~
- other_task: options
when: _file_copy is succeeded
- other_task: options
when: _file_copy is failed
- other_task: options
when: _file_copy is skipped
- other_task: options
when: _file_copy is changed
~~~
### Vault
<https://docs.ansible.com/ansible/latest/user_guide/latest/playbooks_vault.html>
@ -723,6 +750,80 @@ Pour retirer le chiffrement d'un fichier chiffré :
Pour utiliser vault, il faut préciser l'option `--ask-vault-pass` avec les commandes `ansible` ou `ansible-playbook`.
### Conditions
Les _tasks_ et les _roles_ peuvent être soumis à conditions. Cela repose sur la directive `when` dont le résultat est évalué de manière booléenne (`true` ou `false`).
Exemple pour installer un paquet seulement si la distribution est en version 9 ou plus
~~~{.yaml}
- apt:
name: libapache2-mpm-itk
state: present
when: ansible_distribution_major_version is version('9', '>=')
~~~
#### Combinaisons
Il est possible de combiner plusieurs conditions sur la même ligne, en combinant des `and`ou des `or` :
~~~{.yaml}
- apt:
name: libapache2-mpm-itk
state: present
when: ansible_distribution_major_version is version('9', '=') or ansible_distribution_major_version is version('10', '=')
~~~
Il est possible de séparer les conditions sur plusieurs lignes, elle doivent alors être toutes respectées, comme jointe spar des `and` :
~~~{.yaml}
- apt:
name: libapache2-mpm-itk
state: present
when:
- ansible_distribution == "Debian"
- ansible_distribution_major_version is version('9', '>=')
~~~
#### Types de conditions
Pour des comparaisons de chaînes de caractères on peut utiliser `==`, `!=` :
~~~{.yaml}
when:
- ansible_distribution == "Debian"
- ansible_distribution != "Ubuntu
~~~
Pour des comparaisons de valeurs numériques on peut utiliser `==`, `!=`, `<=`, `>=`, `<`, `>`
On peut changer le type d'une donnée en utilisant un filtre :
* `int` pour la transformation en entier
* `bool` pour la transformation en booléen
~~~{.yaml}
when: redis_port | int == 6379
~~~
Il est possible d'inverser une condition (quelle qu'elle soit) en la précédant de `not` :
~~~{.yaml}
- name: remove file is feature is disabled
file:
path: /path/to/file
state: absent
when: not (feature_enabled | bool)
~~~
Il est possible d'avoir 2 valeurs non booléennes en fonction d'une variable booléenne. Exemple pour qu'un fichier soit présent ou absent selon la variable `feature_enabled` :
~~~{.yaml}
- file:
path: /path/to/file
state: "{{ feature_enabled | bool | ternary('present','absent') }}"
~~~
## Configuration
@ -1289,13 +1390,13 @@ Un cas concret :
openbsd_pkg:
name: monitoring-plugins
state: present
when: ansible_distribution_version | version_compare("5.6",'>=')
when: ansible_distribution_version is version('5.6', '>=')
- name: Install nagios-plugins on OpenBSD before 5.6
openbsd_pkg:
name: nagios-plugins
state: present
when: ansible_distribution_version | version_compare("5.6",'<')
when: ansible_distribution_version is version("5.6",'<')
~~~
### Erreur : /usr/local/bin/python: not found