## Configuration 1. Installer Ansible sur sa machine (`pacman -S ansible`). 2. Avoir un compte avec les droits sudo sur la machine cible. 3. Ajouter un hôte à son `~/.ssh/config` pour simplifier la connexion : ``` Host aperture-labs HostName v5.planet-casio.com User ``` ## Fonctionnement général On défini d'une part un inventaires (des machines), avec des variables spécifiques à ces machines, et d'autre part des rôles, qui seront des états à atteindre, en effectuant des actions. ### Inventaire On défini dans un fichier, ici `inventory/main.yml` un host. Généralement c'est une IP + user + port ssh, etc, mais on profite de la config SSH pour ne mettre que l'alias. Dans `inventory/host_vars/aperture-labs.yml`, on défini des variables spécifiques à l'host `aperture-labs`. Aujourd'hui on a qu'un serveur, donc tout va bien. Dans le cas où on en a plusieurs, on peut aussi définir des variables dans `inventory/group_vars`. Dans ce cas, elles seront communes au groupe. ### Rôle Un rôle se compose de plusieurs dossiers et fichiers : ``` rolename ├── files | └── static_file.cfg ├── defaults │   └── vars.yml ├── tasks │   └── main.yml ├── templates | └── dynamic_file.cfg └── vars └── vars.yml ``` Le principal est `tasks` : il contient la liste des opérations à effectuer. Pour les grosses tâches, on peut écrire plusieurs fichiers et les appeler dans `main.yml`. Dans `files`, on retrouve les fichiers de config à copier tels quels. Dans `templates`, on aura les fichiers qui devront être templatisés par Jinja2. Dans `default` et `vars`, on place des variables spécifiques au rôle. `vars` est prioritaire sur `host_vars` et `group_vars`, tandis que `defaults` ne l'est pas. Cf [la documentation](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable) pour avoir une idée de l'ordre de priorité. ## Utiliser un rôle Généralement, ça ressemble à ça : ``` # Dummy try with --check ansible-playbook -i inventory/main.yml role.yml -vv --diff --check --ask-become-pass # Real try ansible-playbook -i inventory/main.yml role.yml -v --ask-become-pass ``` On sélectionne un inventaire avec `-i`, on lui applique un (ou plusieurs) rôle. Dans les options intéressantes, on a : - `-v` : pour la verbosité, on peut monter à `-vvvvv` - `--diff` : affiche les différences entre l'étât actuel et celui qu'on cherche à atteindre - `--check` : fait un *dry-run* sans modifier l'existant - `--ask-become-pass` : demande le mot de passe sudo sur le serveur distant ## Variables | Variable name | Comment | |------------------|----------------------------------------------| | sites_enabled | List of sites to enable from sites-available | | proxy_ports | List of ports to use with proxy_pass | | allowed_users | List of users allowed to login through SSH |