diff --git a/README.md b/README.md index 56689f6..a1abc50 100644 --- a/README.md +++ b/README.md @@ -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. -Il est souhaitable de faire un test avant avec `--check` si on a des doutes ! +Quand on regroupe avec un `:children` en réalité on groupe des groupes. -## FAQ +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. -### Mettre sa clé SSH sur une machine +**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 + +Pour la liste complète, je vous invite à lire le fichier `hosts`. + + * pour tester les versions de Debian, + + ```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 +``` +### Lancer Ansible + +Pour tester le playbook `base.yml` : +```bash +ansible-playbook --ask-vault-pass base.yml --check ``` -ansible -i hosts ldap-replica-fleming1.adm.auro.re -m setup --ask-vault-pass -``` + +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...`. + diff --git a/ansible.cfg b/ansible.cfg index dc984aa..8d528bd 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -1,4 +1,4 @@ -# Aurore Ansible configuration +# Ansible configuration [defaults]