Fix de tous les liens morts
This commit is contained in:
parent
920e80563f
commit
dadcedbfcb
|
@ -26,7 +26,7 @@ ansible 2.7.7
|
||||||
Ansible peut exécuter des actions sur des machines distantes. Mais certains logiciels sont requis :
|
Ansible peut exécuter des actions sur des machines distantes. Mais certains logiciels sont requis :
|
||||||
|
|
||||||
* *Debian 6* et supérieur : `# apt-get install --no-install-recommends python python-apt dbus sudo`
|
* *Debian 6* et supérieur : `# apt-get install --no-install-recommends python python-apt dbus sudo`
|
||||||
* *Debian 4 / 5* : utiliser le module [raw](https://docs.ansible.com/ansible/raw_module.html) d'Ansible
|
* *Debian 4 / 5* : utiliser le module [raw](https://docs.ansible.com/ansible/2.7/modules/raw_module.html) d'Ansible
|
||||||
* *OpenBSD* : voir **[pré-requis pour OpenBSD](#pré-requis-openbsd)**
|
* *OpenBSD* : voir **[pré-requis pour OpenBSD](#pré-requis-openbsd)**
|
||||||
* *FreeBSD* : `# pkg install python`
|
* *FreeBSD* : `# pkg install python`
|
||||||
|
|
||||||
|
@ -88,17 +88,17 @@ Enfin, pour s'exécuter sur un ensemble de machines, Ansible a besoin d'un [inve
|
||||||
|
|
||||||
### modules
|
### modules
|
||||||
|
|
||||||
<http://docs.ansible.com/ansible/list_of_all_modules.html>
|
<https://docs.ansible.com/ansible/2.7/modules/list_of_all_modules.html>
|
||||||
|
|
||||||
Un module est comme une bibliothèque. Il constitue une couche d'abstraction par rapport au shell et commandes sous-jacentes. C'est cette couche qui permet l'idempotence et le fonctionnement sur plusieurs plateformes.
|
Un module est comme une bibliothèque. Il constitue une couche d'abstraction par rapport au shell et commandes sous-jacentes. C'est cette couche qui permet l'idempotence et le fonctionnement sur plusieurs plateformes.
|
||||||
|
|
||||||
Les modules disposent de certains comportements et fonctionnalités communs : indication de succès/erreurs/changements, gestion des [variables](http://docs.ansible.com/ansible/playbooks_variables.html), des [conditions](http://docs.ansible.com/ansible/playbooks_conditionals.html), des [boucles](http://docs.ansible.com/ansible/playbooks_loops.html), des états de sortie…
|
Les modules disposent de certains comportements et fonctionnalités communs : indication de succès/erreurs/changements, gestion des [variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html), des [conditions](https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html), des [boucles](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html), des états de sortie…
|
||||||
|
|
||||||
Pour avoir la liste des modules utilisables : `ansible-doc -l`
|
Pour avoir la liste des modules utilisables : `ansible-doc -l`
|
||||||
|
|
||||||
Voici quelques exemples de modules que nous utilisons :
|
Voici quelques exemples de modules que nous utilisons :
|
||||||
|
|
||||||
* Module [command](http://docs.ansible.com/ansible/command_module.html) :
|
* Module [command](https://docs.ansible.com/ansible/2.7/modules/command_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- command: date
|
- command: date
|
||||||
|
@ -106,7 +106,7 @@ Voici quelques exemples de modules que nous utilisons :
|
||||||
|
|
||||||
Ce module ne permet que l'exécution de commandes simple (pas de pipe…) mais en échange il vérifie les commandes et les assainit pour limiter les injections.
|
Ce module ne permet que l'exécution de commandes simple (pas de pipe…) mais en échange il vérifie les commandes et les assainit pour limiter les injections.
|
||||||
|
|
||||||
* Module [shell](http://docs.ansible.com/ansible/shell_module.html) :
|
* Module [shell](https://docs.ansible.com/ansible/2.7/modules/shell_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- shell: cat foo.txt | grep bar
|
- shell: cat foo.txt | grep bar
|
||||||
|
@ -114,7 +114,7 @@ Ce module ne permet que l'exécution de commandes simple (pas de pipe…) mais e
|
||||||
|
|
||||||
Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute commande, au sein d'un shell lancé pour l'occasion.
|
Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute commande, au sein d'un shell lancé pour l'occasion.
|
||||||
|
|
||||||
* Module [file](http://docs.ansible.com/ansible/file_module.html) :
|
* Module [file](https://docs.ansible.com/ansible/2.7/modules/file_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- file:
|
- file:
|
||||||
|
@ -122,7 +122,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
|
||||||
state: absent
|
state: absent
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [copy](http://docs.ansible.com/ansible/copy_module.html) :
|
* Module [copy](https://docs.ansible.com/ansible/2.7/modules/copy_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- copy
|
- copy
|
||||||
|
@ -133,7 +133,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
|
||||||
mode: "0644"
|
mode: "0644"
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [replace](http://docs.ansible.com/ansible/replace_module.html) :
|
* Module [replace](https://docs.ansible.com/ansible/2.7/modules/replace_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- replace:
|
- replace:
|
||||||
|
@ -142,7 +142,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
|
||||||
replace: '\1,{{ name }}'
|
replace: '\1,{{ name }}'
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [lineinfile](http://docs.ansible.com/ansible/lineinfile_module.html) :
|
* Module [lineinfile](https://docs.ansible.com/ansible/2.7/modules/lineinfile_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- lineinfile:
|
- lineinfile:
|
||||||
|
@ -161,7 +161,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
|
||||||
* avec _lineinfile_, si l'on veut utiliser une référence (`\1`) dans _line_, ça donne une erreur, il faut utiliser _replace_
|
* avec _lineinfile_, si l'on veut utiliser une référence (`\1`) dans _line_, ça donne une erreur, il faut utiliser _replace_
|
||||||
* avec _lineinfile_, l'argument `backrefs: yes` sert à utiliser une référence au sein de l'argument _regexp_ (et non pas au sein de l'argument _line_).
|
* avec _lineinfile_, l'argument `backrefs: yes` sert à utiliser une référence au sein de l'argument _regexp_ (et non pas au sein de l'argument _line_).
|
||||||
|
|
||||||
* Module [blockinfile](http://docs.ansible.com/ansible/blockinfile_module.html) :
|
* Module [blockinfile](https://docs.ansible.com/ansible/2.7/modules/blockinfile_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- blockinfile:
|
- blockinfile:
|
||||||
|
@ -171,7 +171,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
|
||||||
## Set rights on files and directories written by Apache
|
## Set rights on files and directories written by Apache
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [ini_file](http://docs.ansible.com/ansible/ini_file_module.html) :
|
* Module [ini_file](https://docs.ansible.com/ansible/2.7/modules/ini_file_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- ini_file:
|
- ini_file:
|
||||||
|
@ -184,7 +184,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
|
||||||
|
|
||||||
Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des fichiers INI, dans la bonne section, sans se soucier de la syntaxe.
|
Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des fichiers INI, dans la bonne section, sans se soucier de la syntaxe.
|
||||||
|
|
||||||
* Module [user](http://docs.ansible.com/ansible/user_module.html) :
|
* Module [user](https://docs.ansible.com/ansible/2.7/modules/user_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- user:
|
- user:
|
||||||
|
@ -197,7 +197,7 @@ Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des
|
||||||
password: '$6$k/Fg76xH'
|
password: '$6$k/Fg76xH'
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [group](http://docs.ansible.com/ansible/group_module.html) :
|
* Module [group](https://docs.ansible.com/ansible/2.7/modules/group_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- group:
|
- group:
|
||||||
|
@ -206,7 +206,7 @@ Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des
|
||||||
gid: "1042"
|
gid: "1042"
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [stat](http://docs.ansible.com/ansible/stat_module.html) :
|
* Module [stat](https://docs.ansible.com/ansible/2.7/modules/stat_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- stat:
|
- stat:
|
||||||
|
@ -214,7 +214,7 @@ Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des
|
||||||
register: foo_sudoers_file
|
register: foo_sudoers_file
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [apt](http://docs.ansible.com/ansible/apt_module.html) :
|
* Module [apt](https://docs.ansible.com/ansible/2.7/modules/apt_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- apt:
|
- apt:
|
||||||
|
@ -229,7 +229,7 @@ Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des
|
||||||
|
|
||||||
Ce module fait partie d'une courte liste de modules pour lesquels l'utilisation d'une boucle (avec `with_items` par exemple) ne provoque pas l'exécution séquentielle et répétée du module. Dans l'exemple ci-dessus le module utilisera "apt" intelligemment.
|
Ce module fait partie d'une courte liste de modules pour lesquels l'utilisation d'une boucle (avec `with_items` par exemple) ne provoque pas l'exécution séquentielle et répétée du module. Dans l'exemple ci-dessus le module utilisera "apt" intelligemment.
|
||||||
|
|
||||||
* Module [apt_repository](http://docs.ansible.com/ansible/apt_repository_module.html) :
|
* Module [apt_repository](https://docs.ansible.com/ansible/2.7/modules/apt_repository_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- name: exemple
|
- name: exemple
|
||||||
|
@ -241,7 +241,7 @@ Ce module fait partie d'une courte liste de modules pour lesquels l'utilisation
|
||||||
|
|
||||||
L'indication "filename" permet de référencer le dépôt dans `/etc/apt/sources.list.d/<filename>.list`.
|
L'indication "filename" permet de référencer le dépôt dans `/etc/apt/sources.list.d/<filename>.list`.
|
||||||
|
|
||||||
* Module [mysql_user](http://docs.ansible.com/ansible/mysql_user_module.html) :
|
* Module [mysql_user](https://docs.ansible.com/ansible/2.7/modules/mysql_user_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- mysql_user:
|
- mysql_user:
|
||||||
|
@ -255,7 +255,7 @@ L'indication "filename" permet de référencer le dépôt dans `/etc/apt/sources
|
||||||
|
|
||||||
Lorsqu'une réplication est en place, on peut choisir de ne pas propager l'action dans les binlogs, avec l'option `sql_log_bin: no`.
|
Lorsqu'une réplication est en place, on peut choisir de ne pas propager l'action dans les binlogs, avec l'option `sql_log_bin: no`.
|
||||||
|
|
||||||
* module [mysql_variables](http://docs.ansible.com/ansible/latest/mysql_variables_module.html)
|
* module [mysql_variables](https://docs.ansible.com/ansible/2.7/modules/latest/mysql_variables_module.html)
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- mysql_variables:
|
- mysql_variables:
|
||||||
|
@ -265,7 +265,7 @@ Lorsqu'une réplication est en place, on peut choisir de ne pas propager l'actio
|
||||||
|
|
||||||
Cela permet d'exécuter une commande du type "SET GLOBAL read_only = 1;" de manière idempotente.
|
Cela permet d'exécuter une commande du type "SET GLOBAL read_only = 1;" de manière idempotente.
|
||||||
|
|
||||||
* module [htpasswd](http://docs.ansible.com/ansible/latest/htpasswd_module.html)
|
* module [htpasswd](https://docs.ansible.com/ansible/2.7/modules/latest/htpasswd_module.html)
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- htpasswd:
|
- htpasswd:
|
||||||
|
@ -279,7 +279,7 @@ Cela permet d'exécuter une commande du type "SET GLOBAL read_only = 1;" de mani
|
||||||
|
|
||||||
Il nécessite la bibliothèque Python "passlib", installable sous Debian grace au paquet "python-passlib".
|
Il nécessite la bibliothèque Python "passlib", installable sous Debian grace au paquet "python-passlib".
|
||||||
|
|
||||||
* Module [sysctl](http://docs.ansible.com/ansible/sysctl_module.html) :
|
* Module [sysctl](https://docs.ansible.com/ansible/2.7/modules/sysctl_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- name: exemple
|
- name: exemple
|
||||||
|
@ -289,7 +289,7 @@ Il nécessite la bibliothèque Python "passlib", installable sous Debian grace a
|
||||||
sysctl_file: /etc/sysctl.d/elasticsearch.conf
|
sysctl_file: /etc/sysctl.d/elasticsearch.conf
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [alternatives](http://docs.ansible.com/ansible/alternatives_module.html) :
|
* Module [alternatives](https://docs.ansible.com/ansible/2.7/modules/alternatives_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- alternatives:
|
- alternatives:
|
||||||
|
@ -297,7 +297,7 @@ Il nécessite la bibliothèque Python "passlib", installable sous Debian grace a
|
||||||
path: /usr/bin/vim.basic
|
path: /usr/bin/vim.basic
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [service](http://docs.ansible.com/ansible/service_module.html) :
|
* Module [service](https://docs.ansible.com/ansible/2.7/modules/service_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- name: exemple pour redémarrer un service (compatible avec sysvinit, systemd…)
|
- name: exemple pour redémarrer un service (compatible avec sysvinit, systemd…)
|
||||||
|
@ -305,7 +305,7 @@ Il nécessite la bibliothèque Python "passlib", installable sous Debian grace a
|
||||||
state: restarted
|
state: restarted
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* Module [openbsd_pkg](http://docs.ansible.com/ansible/openbsd_pkg_module.html) :
|
* Module [openbsd_pkg](https://docs.ansible.com/ansible/2.7/modules/openbsd_pkg_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- openbsd_pkg:
|
- openbsd_pkg:
|
||||||
|
@ -316,7 +316,7 @@ Il nécessite la bibliothèque Python "passlib", installable sous Debian grace a
|
||||||
- vim--no_x11
|
- vim--no_x11
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
* module [timezone](http://docs.ansible.com/ansible/timezone_module.html) :
|
* module [timezone](https://docs.ansible.com/ansible/2.7/modules/timezone_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- timezone:
|
- timezone:
|
||||||
|
@ -327,7 +327,7 @@ Si systemd est présent, le module utilise `timedatectl`.
|
||||||
Sinon, sur Debian il utilise "/etc/timezone" et reconfigure le paquet "tzdata".
|
Sinon, sur Debian il utilise "/etc/timezone" et reconfigure le paquet "tzdata".
|
||||||
|
|
||||||
|
|
||||||
* module [git](http://docs.ansible.com/ansible/latest/git_module.html) :
|
* module [git](https://docs.ansible.com/ansible/2.7/modules/latest/git_module.html) :
|
||||||
|
|
||||||
~~~{.yaml}
|
~~~{.yaml}
|
||||||
- git:
|
- git:
|
||||||
|
@ -352,7 +352,7 @@ Pour avoir plus d'infos sur un module :
|
||||||
|
|
||||||
### playbook
|
### playbook
|
||||||
|
|
||||||
<http://docs.ansible.com/ansible/playbooks.html>
|
<https://docs.ansible.com/ansible/latest/user_guide/playbooks.html>
|
||||||
|
|
||||||
Un playbook va ensuite dérouler des actions qui seront organisées en _tasks_, [roles](#roles) et [handlers](#handlers).
|
Un playbook va ensuite dérouler des actions qui seront organisées en _tasks_, [roles](#roles) et [handlers](#handlers).
|
||||||
|
|
||||||
|
@ -488,7 +488,7 @@ Dans des rôles longs, nous conseillons de purger les handlers de temps en temps
|
||||||
|
|
||||||
### roles
|
### roles
|
||||||
|
|
||||||
<http://docs.ansible.com/ansible/playbooks_roles.html>
|
<https://docs.ansible.com/ansible/latest/user_guide/playbooks_roles.html>
|
||||||
|
|
||||||
Lorsqu'on a besoin d'utiliser des fichiers ou _templates_ à copier, des variables avec des valeurs par défaut, des handlers… on peut organiser tout cela dans un **role** en respectant la structure conventionnelle suivante :
|
Lorsqu'on a besoin d'utiliser des fichiers ou _templates_ à copier, des variables avec des valeurs par défaut, des handlers… on peut organiser tout cela dans un **role** en respectant la structure conventionnelle suivante :
|
||||||
|
|
||||||
|
@ -518,7 +518,7 @@ Cette structure permet à Ansible de retrouver automatiquement les fichiers et d
|
||||||
|
|
||||||
### inventory
|
### inventory
|
||||||
|
|
||||||
<http://docs.ansible.com/ansible/intro_inventory.html>
|
<https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html>
|
||||||
|
|
||||||
La partie **inventory** correspond à la description de l'inventaire des serveurs à configurer et inclus un mécanisme de configuration individuelle et par groupe.
|
La partie **inventory** correspond à la description de l'inventaire des serveurs à configurer et inclus un mécanisme de configuration individuelle et par groupe.
|
||||||
|
|
||||||
|
@ -563,9 +563,9 @@ proxy=proxy.mercerie.example.com
|
||||||
|
|
||||||
On peut aussi créer des groupes de groupes en utilisant `:children`
|
On peut aussi créer des groupes de groupes en utilisant `:children`
|
||||||
|
|
||||||
On peut aussi découper le fichier "inventory" selon les groupes et les variables : <http://docs.ansible.com/ansible/intro_inventory.html#splitting-out-host-and-group-specific-data>
|
On peut aussi découper le fichier "inventory" selon les groupes et les variables : <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#splitting-out-host-and-group-specific-data>
|
||||||
|
|
||||||
Les variables propres à Ansible : <http://docs.ansible.com/ansible/intro_inventory.html#list-of-behavioral-inventory-parameters>
|
Les variables propres à Ansible : <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#list-of-behavioral-inventory-parameters>
|
||||||
|
|
||||||
|
|
||||||
### variables
|
### variables
|
||||||
|
@ -581,7 +581,7 @@ tasks:
|
||||||
- command: echo {{ ip }} >> {{ conf_file }}
|
- command: echo {{ ip }} >> {{ conf_file }}
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Les variables peuvent être définies à de multiples niveaux, chacun ayant une certaine précédence (extrait de la [documentation](http://docs.ansible.com/ansible/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)) :
|
Les variables peuvent être définies à de multiples niveaux, chacun ayant une certaine précédence (extrait de la [documentation](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)) :
|
||||||
|
|
||||||
* role defaults
|
* role defaults
|
||||||
* inventory vars
|
* inventory vars
|
||||||
|
@ -613,7 +613,7 @@ Pour gérer de nombreuses variables dans un projet, on peut stocker toutes celle
|
||||||
└── hostname2.yml # … les variables du serveur "hostname2"
|
└── hostname2.yml # … les variables du serveur "hostname2"
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Les groupes sont définis dans le fichier d'[inventaire](http://docs.ansible.com/ansible/intro_inventory.html).
|
Les groupes sont définis dans le fichier d'[inventaire](https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html).
|
||||||
|
|
||||||
### Tags
|
### Tags
|
||||||
|
|
||||||
|
@ -666,7 +666,7 @@ Pour certains modules, `register` est presque un passage obligatoire pour une ut
|
||||||
|
|
||||||
### Vault
|
### Vault
|
||||||
|
|
||||||
<http://docs.ansible.com/ansible/latest/playbooks_vault.html>
|
<https://docs.ansible.com/ansible/latest/user_guide/latest/playbooks_vault.html>
|
||||||
|
|
||||||
Un Vault permet d'avoir un fichier protégé par un mot de passe.
|
Un Vault permet d'avoir un fichier protégé par un mot de passe.
|
||||||
|
|
||||||
|
@ -748,7 +748,7 @@ b: [3, 4, 5]
|
||||||
c: a | union(b) | unique
|
c: a | union(b) | unique
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
Il existe plein de [filtres sur les listes](http://docs.ansible.com/ansible/latest/playbooks_filters.html#list-filters) ; `union`, `intersect`, `difference`, `unique`, `sort`…
|
Il existe plein de [filtres sur les listes](https://docs.ansible.com/ansible/latest/user_guide/latest/playbooks_filters.html#list-filters) ; `union`, `intersect`, `difference`, `unique`, `sort`…
|
||||||
|
|
||||||
* liste avec valeur par défaut (variable vide, indéfinie ou liste vide)
|
* liste avec valeur par défaut (variable vide, indéfinie ou liste vide)
|
||||||
|
|
||||||
|
@ -1082,7 +1082,7 @@ tasks:
|
||||||
with_dict: "{{ users }}"
|
with_dict: "{{ users }}"
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
#### [with_first_found](http://docs.ansible.com/ansible/playbooks_loops.html#finding-first-matched-files)
|
#### [with_first_found](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html#finding-first-matched-files)
|
||||||
|
|
||||||
Permet de prendre le premier fichier trouvé :
|
Permet de prendre le premier fichier trouvé :
|
||||||
|
|
||||||
|
@ -1311,7 +1311,7 @@ Voir [/HowtoAnsible/Exemples]().
|
||||||
|
|
||||||
## Ressources utiles
|
## Ressources utiles
|
||||||
|
|
||||||
* [Documentation officielle](http://docs.ansible.com/ansible/) (voir notamment la partie [Best Practices](http://docs.ansible.com/ansible/playbooks_best_practices.html))
|
* [Le « User Guide »](https://docs.ansible.com/ansible/latest/user_guide/) (voir notamment la partie [Best Practices](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html))
|
||||||
* Vidéos [ansible-best-practices](https://www.ansible.com/ansible-best-practices) et [ansible-tips-and-tricks](https://www.ansible.com/ansible-tips-and-tricks)
|
* Vidéos [ansible-best-practices](https://www.ansible.com/ansible-best-practices) et [ansible-tips-and-tricks](https://www.ansible.com/ansible-tips-and-tricks)
|
||||||
* [Ansible 101 - on a Cluster of Raspberry Pi 2s](https://www.youtube.com/watch?v=ZNB1at8mJWY)
|
* [Ansible 101 - on a Cluster of Raspberry Pi 2s](https://www.youtube.com/watch?v=ZNB1at8mJWY)
|
||||||
* Sysadmin Casts (épisodes [43](https://sysadmincasts.com/episodes/43-19-minutes-with-ansible-part-1-4), [45](https://sysadmincasts.com/episodes/45-learning-ansible-with-vagrant-part-2-4), [46](https://sysadmincasts.com/episodes/46-configuration-management-with-ansible-part-3-4) et [47](https://sysadmincasts.com/episodes/47-zero-downtime-deployments-with-ansible-part-4-4))
|
* Sysadmin Casts (épisodes [43](https://sysadmincasts.com/episodes/43-19-minutes-with-ansible-part-1-4), [45](https://sysadmincasts.com/episodes/45-learning-ansible-with-vagrant-part-2-4), [46](https://sysadmincasts.com/episodes/46-configuration-management-with-ansible-part-3-4) et [47](https://sysadmincasts.com/episodes/47-zero-downtime-deployments-with-ansible-part-4-4))
|
||||||
|
|
Loading…
Reference in a new issue