2021-02-16 18:22:19 +01:00
|
|
|
[![Linter Status](https://drone.auro.re/api/badges/Aurore/ansible/status.svg)](https://drone.auro.re/Aurore/ansible)
|
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
# Recettes Ansible d'Aurore
|
2018-12-23 12:20:19 +01:00
|
|
|
|
2021-11-28 09:49:31 +01:00
|
|
|
Dépendances requises :
|
|
|
|
|
|
|
|
* Ansible 2.9 ou plus récent.
|
2019-03-11 17:49:48 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
## Ansible 101
|
2019-03-11 17:49:48 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
Si vous n'avez jamais touché à Ansible avant, voilà une rapide introduction.
|
2018-12-23 12:20:19 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
**Inventory** : c'est le fichier `hosts` d'inventaire.
|
|
|
|
Il contient la définition de chaque machine et le regroupement.
|
|
|
|
|
|
|
|
Quand on regroupe avec un `:children` en réalité on groupe des groupes.
|
|
|
|
|
|
|
|
Chaque machine est annoncée avec son hostname. Il faut pouvoir SSH sur cette machine
|
|
|
|
avec ce hostname, car c'est ce qu'Ansible fera.
|
|
|
|
|
|
|
|
**Playbook** : c'est une politique de déploiement.
|
|
|
|
Il contient les associations des rôles avec les machines.
|
|
|
|
|
|
|
|
L'idée au Crans est de regrouper par thème. Exemple, le playbook `monitoring.yml`
|
|
|
|
va contenir toutes les définitions machines-rôles qui touchent au monitoring.
|
|
|
|
Cela permet de déployer manuellement tout le monitoring sans toucher au reste.
|
|
|
|
|
|
|
|
**Rôle** : un playbook donne des rôles à des machines. Ces rôles sont tous dans
|
|
|
|
le dossier `roles/`. Un rôle installe un service précis sur un serveur.
|
|
|
|
|
|
|
|
Il est préférable d'être atomique sur les rôles plutôt d'en coder un énorme
|
|
|
|
qui sera difficilement maintenable.
|
|
|
|
|
|
|
|
*Exemples de rôle* : activer les backports pour ma version de Debian, installer NodeJS,
|
|
|
|
déployer un serveur prometheus, déployer une node prometheus…
|
|
|
|
|
|
|
|
**Tâche** : un rôle est composé de tâches. Une tâche effectue une et une seule
|
|
|
|
action. Elle est associée à un module Ansible.
|
|
|
|
|
|
|
|
*Exemples de tâche* : installer un paquet avec le module `apt`, ajouter une ligne dans
|
|
|
|
un fichier avec le module `lineinfile`, copier une template avec le module `template`…
|
|
|
|
|
|
|
|
Une tâche peut avoir des paramètres supplémentaires pour la réessayer quand elle plante,
|
|
|
|
récupérer son résultat dans une varible, mettre une boucle dessus, mettre des conditions…
|
|
|
|
|
|
|
|
N'oubliez pas d'aller lire l'excellent documentation de RedHat sur tous les modules
|
|
|
|
d'Ansible !
|
|
|
|
|
|
|
|
### Gestion des groupes de machines
|
2018-12-24 10:50:22 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
Pour la liste complète, je vous invite à lire le fichier `hosts`.
|
2018-12-23 12:20:19 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
* pour tester les versions de Debian,
|
2018-12-23 12:20:19 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
```YAML
|
|
|
|
ansible_lsb.codename == 'stretch'
|
|
|
|
```
|
|
|
|
|
|
|
|
* pour tester si c'est un CPU Intel x86_64,
|
|
|
|
|
|
|
|
```YAML
|
|
|
|
ansible_processor[0].find('Intel') != -1
|
|
|
|
and ansible_architecture == 'x86_64'
|
|
|
|
```
|
|
|
|
|
|
|
|
Pour les fonctions (`proxy-server`, `dhcp-dynamique`…) il a été choisi
|
|
|
|
de ne pas faire de groupe particulier mais plutôt de sélectionner/enlever
|
|
|
|
les machines pertinentes directement dans les playbooks.
|
|
|
|
|
|
|
|
### Lister tout ce que sait Ansible sur un hôte
|
|
|
|
|
|
|
|
Lors du lancement d'Ansible, il collecte un ensemble de faits sur les serveurs
|
|
|
|
qui peuvent ensuite être utilisés dans des variables.
|
|
|
|
Pour lister tous les faits qu'Ansible collecte nativement d'un serveur
|
|
|
|
on peut exécuter le module `setup` manuellement.
|
2018-12-23 16:09:12 +01:00
|
|
|
|
|
|
|
```
|
2019-07-22 20:57:32 +02:00
|
|
|
ansible proxy.adm.auro.re -m setup --ask-vault-pass
|
2018-12-23 16:09:12 +01:00
|
|
|
```
|
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
## Exécution d'Ansible
|
2018-12-23 12:20:19 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
### Configurer la connexion au vlan adm
|
2018-12-23 12:20:19 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
Envoyer son agent SSH peut être dangereux
|
|
|
|
([source](https://heipei.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/)).
|
2018-12-23 12:20:19 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
On va utiliser plutôt `ProxyJump`.
|
2018-12-23 12:20:19 +01:00
|
|
|
Dans la configuration SSH :
|
|
|
|
|
|
|
|
```
|
2021-11-21 09:40:37 +01:00
|
|
|
Host *.adm.auro.re *.pve.auro.re
|
|
|
|
# Accept new host keys
|
|
|
|
StrictHostKeyChecking accept-new
|
|
|
|
|
2021-11-22 18:24:38 +01:00
|
|
|
# Use passerelle to connect to administration VLANs
|
|
|
|
ProxyJump passerelle.auro.re
|
2018-12-23 12:20:19 +01:00
|
|
|
```
|
2018-12-28 11:30:18 +01:00
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
Il faut sa clé SSH configurée sur le serveur que l'on déploit.
|
|
|
|
```bash
|
|
|
|
ssh-copy-id proxy.adm.auro.re
|
2019-01-03 15:46:21 +01:00
|
|
|
```
|
2019-07-22 20:57:32 +02:00
|
|
|
|
|
|
|
### Lancer Ansible
|
|
|
|
|
2019-11-01 14:16:32 +01:00
|
|
|
Il faut `python3-netaddr` sur sa machine.
|
|
|
|
|
2019-07-22 20:57:32 +02:00
|
|
|
Pour tester le playbook `base.yml` :
|
|
|
|
```bash
|
|
|
|
ansible-playbook --ask-vault-pass base.yml --check
|
2019-01-03 15:46:21 +01:00
|
|
|
```
|
2019-07-22 20:57:32 +02:00
|
|
|
|
|
|
|
Vous pouvez ensuite enlever `--check` si vous voulez appliquer les changements !
|
|
|
|
|
|
|
|
Si vous avez des soucis de fingerprint ECDSA, vous pouvez ignorer une
|
|
|
|
première fois (dangereux !) : `ANSIBLE_HOST_KEY_CHECKING=0 ansible-playbook...`.
|
|
|
|
|
2019-12-05 14:07:08 +01:00
|
|
|
### Ajouter tous les empruntes de serveur
|
|
|
|
|
|
|
|
```bash
|
|
|
|
#!/bin/bash
|
|
|
|
for ip in `cat hosts|grep .adm.auro.re`; do
|
|
|
|
ssh-copy-id -i ~/.ssh/id_rsa.pub $ip
|
|
|
|
done
|
|
|
|
```
|
2020-05-21 18:06:37 +02:00
|
|
|
|
|
|
|
|
|
|
|
### Passage à Ansible 2.10 (release: 30 juillet)
|
|
|
|
|
2020-05-21 19:46:39 +02:00
|
|
|
Installez la version de développement d'ansible pour faire fonctionner les
|
|
|
|
playbooks de ce repo, ainsi que les collections suivantes :
|
|
|
|
|
2020-05-21 18:06:37 +02:00
|
|
|
```bash
|
|
|
|
ansible-galaxy collection install community.general
|
|
|
|
ansible-galaxy collection install ansible.posix
|
|
|
|
```
|
|
|
|
|
2020-05-21 19:46:39 +02:00
|
|
|
|
|
|
|
Si vous n'arrivez pas à entrer votre _become password_ (bug dans ansible?), un
|
|
|
|
workaround est le suivant :
|
|
|
|
|
|
|
|
`$ export ANSIBLE_BECOME_PASS='<votre mot de passe LDAP>'`
|
|
|
|
|
|
|
|
Notez l'espace au début pour ne pas log la commande dans votre historique
|
|
|
|
shell.
|