Ansible : plus d edoc pour les conditions et filtres
This commit is contained in:
parent
3713d4e12a
commit
734293e1cb
105
HowtoAnsible.md
105
HowtoAnsible.md
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue