Merge crans Ansible conf

pull/1/head
Alexandre Iooss 5 years ago
parent 7f07556cfa
commit a2e9ab7d3f
No known key found for this signature in database
GPG Key ID: 6C79278F3FCDCC02

@ -1,56 +1,115 @@
# Playbook et rôles Ansible d'Aurore
# Recettes Ansible d'Aurore
Ces politiques de déployement nécessite Ansible 2.7 ou plus récent.
Le paquet dans Debian Buster est suffisamment à jour, sinon vous pouvez l'obtenir de la façon suivante :
Ensemble des recettes de déploiement Ansible pour les serveurs d'Aurore.
Pour les utiliser, vérifiez que vous avez au moins Ansible 2.7.
```bash
pip3 install --user ansible
```
## Ansible 101
## Exécution d'un playbook
Si vous n'avez jamais touché à Ansible avant, voilà une rapide introduction.
Pour appliquer le playbook `base.yml` :
```bash
ansible-playbook --ask-vault-pass base.yml
```
**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
Il est souhaitable de faire un test avant avec `--check` si on a des doutes !
Pour la liste complète, je vous invite à lire le fichier `hosts`.
## FAQ
* pour tester les versions de Debian,
### Mettre sa clé SSH sur une machine
```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.
```
ssh-copy-id -i ~/.ssh/id_rsa_aurore.pub virtu.fede-aurore.net
ansible proxy.adm.auro.re -m setup --ask-vault-pass
```
### Automatiquement ajouter fingerprint ECDSA (dangereux !)
## Exécution d'Ansible
Il faut changer la variable d'environnement suivante :
`ANSIBLE_HOST_KEY_CHECKING=0`.
### Configurer la connexion au vlan adm
### Configurer la connexion au bastion
Envoyer son agent SSH peut être dangereux
([source](https://heipei.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/)).
Envoyer son agent SSH peut être dangereux ([source](https://heipei.io/2015/02/26/SSH-Agent-Forwarding-considered-harmful/)).
On va utiliser plutôt ProxyJump.
On va utiliser plutôt `ProxyJump`.
Dans la configuration SSH :
```
# Use a key to log on all Aurore servers
# and use a bastion
# Use a key to log on all Crans servers
# and use a proxy server
Host 10.128.0.* *.adm.auro.re
IdentityFile ~/.ssh/id_rsa_aurore
ProxyJump proxy.auro.re
IdentityFile ~/.ssh/id_rsa
ProxyJump auro.re
```
Il faut savoir que depuis Ansible 2.5, des connexions persistantes sont créées
vers les serveurs puis détruites à la fin de l'exécution.
Il faut donc éviter de lancer une connexion SSH persistante pendant l'exécution
d'Ansible.
### Lister tout ce que sait Ansible sur un hôte
Il faut sa clé SSH configurée sur le serveur que l'on déploit.
```bash
ssh-copy-id proxy.adm.auro.re
```
ansible -i hosts ldap-replica-fleming1.adm.auro.re -m setup --ask-vault-pass
### Lancer Ansible
Pour tester le playbook `base.yml` :
```bash
ansible-playbook --ask-vault-pass base.yml --check
```
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...`.

@ -1,4 +1,4 @@
# Aurore Ansible configuration
# Ansible configuration
[defaults]

Loading…
Cancel
Save