diff --git a/README.md b/README.md index f325bfeae19a75ab602b6efbb508dd8a74f7fdb1..29d1a00b8f8c39faac284a414b87a187fec6b65a 100644 --- a/README.md +++ b/README.md @@ -20,13 +20,53 @@ Il est souhaitable de faire un test avant avec `--check` si on a des doutes ! ## FAQ +### Ansible 101 + +Si vous n'avez jamais touché à Ansible avant, voilà une rapide introduction. + +**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 DNS. Il faut pouvoir SSH sur cette machine +avec ce DNS, 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 service. + +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âche. 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 ! + ### Mettre sa clé SSH sur une machine ``` ssh-copy-id -i ~/.ssh/id_rsa_crans.pub zamok.crans.org ``` -### Automatiquement ajouter fingerprint ECDSA (dangereux !) +### Ignorer la fingerprint ECDSA du serveur (dangereux !) Il faut changer la variable d'environnement suivante : `ANSIBLE_HOST_KEY_CHECKING=0`. @@ -35,11 +75,11 @@ Il faut changer la variable d'environnement suivante : 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 +# Use a key to log on all Crans servers # and use a bastion Host 10.231.136.* *.adm.crans.org IdentityFile ~/.ssh/id_rsa_crans @@ -49,8 +89,28 @@ Host 10.231.136.* *.adm.crans.org 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. +### Gestion des groupes de machines + +Dans BCFG2 on avait des groupes selon la version de Debian. +Avec Ansible on peut utiliser en condition +`ansible_distribution_release == 'stretch'` par exemple. +Donc il n'y a plus trop d'intêret de séparer selon la version de Debian les machines. + +Sinon pour les autres groupes, vous allez retrouver une configuration similaire à BCFG2 +avec par exemple les groupes `crans-vm`, `crans`… +Pour en savoir plus je vous invite à lire le fichier `hosts`. + +Pour les fonctions (`proxy-server`, `dhcp-dynamique`…) il a été choisi +de ne pas faire de groupe particulier mais plutôt de sélectionner 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. + ``` ansible -i hosts zamok.crans.org -m setup --ask-vault-pass ``` diff --git a/ansible.cfg b/ansible.cfg index 13173ce9631f341ac4f2e326374ba9c61dbf2c9d..5fde7721663ff940d8e81e68999cfd05301f3935 100644 --- a/ansible.cfg +++ b/ansible.cfg @@ -1,8 +1,8 @@ -# Aurore Crans configuration +# Crans Ansible configuration [defaults] -# Use Aurore inventory +# Use Crans inventory inventory = ./hosts # Custom header in templates