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 :
* *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)**
* *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
<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.
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`
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}
- 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.
* Module [shell](http://docs.ansible.com/ansible/shell_module.html) :
* Module [shell](https://docs.ansible.com/ansible/2.7/modules/shell_module.html) :
~~~{.yaml}
- 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.
* Module [file](http://docs.ansible.com/ansible/file_module.html) :
* Module [file](https://docs.ansible.com/ansible/2.7/modules/file_module.html) :
~~~{.yaml}
- file:
@ -122,7 +122,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
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}
- copy
@ -133,7 +133,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
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}
- replace:
@ -142,7 +142,7 @@ Ce module permet en revanche d'exécuter arbitrairement et sans contrôle toute
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}
- 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_, 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}
- 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
~~~
* 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}
- 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.
* Module [user](http://docs.ansible.com/ansible/user_module.html) :
* Module [user](https://docs.ansible.com/ansible/2.7/modules/user_module.html) :
~~~{.yaml}
- user:
@ -197,7 +197,7 @@ Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des
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}
- group:
@ -206,7 +206,7 @@ Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des
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}
- stat:
@ -214,7 +214,7 @@ Ce module permet de facilement d'ajouter/modifier/supprimer des valeurs dans des
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}
- 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.
* 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}
- 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`.
* 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}
- 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`.
* 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}
- 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.
* 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}
- 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".
* Module [sysctl](http://docs.ansible.com/ansible/sysctl_module.html) :
* Module [sysctl](https://docs.ansible.com/ansible/2.7/modules/sysctl_module.html) :
~~~{.yaml}
- 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
~~~
* Module [alternatives](http://docs.ansible.com/ansible/alternatives_module.html) :
* Module [alternatives](https://docs.ansible.com/ansible/2.7/modules/alternatives_module.html) :
~~~{.yaml}
- alternatives:
@ -297,7 +297,7 @@ Il nécessite la bibliothèque Python "passlib", installable sous Debian grace a
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}
- 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
~~~
* 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}
- openbsd_pkg:
@ -316,7 +316,7 @@ Il nécessite la bibliothèque Python "passlib", installable sous Debian grace a
- 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}
- 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".
* 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}
- git:
@ -352,7 +352,7 @@ Pour avoir plus d'infos sur un module :
### 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).
@ -488,7 +488,7 @@ Dans des rôles longs, nous conseillons de purger les handlers de temps en temps
### 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 :
@ -518,7 +518,7 @@ Cette structure permet à Ansible de retrouver automatiquement les fichiers et d
### 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.
@ -563,9 +563,9 @@ proxy=proxy.mercerie.example.com
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
@ -581,7 +581,7 @@ tasks:
- 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
* 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"
~~~
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
@ -666,7 +666,7 @@ Pour certains modules, `register` est presque un passage obligatoire pour une ut
### 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.
@ -748,7 +748,7 @@ b: [3, 4, 5]
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)
@ -1082,7 +1082,7 @@ tasks:
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é :
@ -1311,7 +1311,7 @@ Voir [/HowtoAnsible/Exemples]().
## 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)
* [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))