Fix de tous les liens morts

This commit is contained in:
Gregory Colpart 2021-04-26 20:42:19 +02:00
parent 920e80563f
commit dadcedbfcb

View file

@ -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))