diff --git a/README.md b/README.md index 8ca927f..a8a0909 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,8 @@ -[![Linter Status](https://drone.auro.re/api/badges/Aurore/ansible/status.svg)](https://drone.auro.re/Aurore/ansible) - # Recettes Ansible d'Aurore Dépendances requises : - * Ansible 2.9 ou plus récent. +* Ansible 2.9 ou plus récent. ## Ansible 101 @@ -15,8 +13,9 @@ 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 (sauf pour les switchs, voir plus bas). +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 (sauf pour les switchs, +voir plus bas). **Playbook** : c'est une politique de déploiement. Il contient les associations des rôles avec les machines. @@ -37,11 +36,13 @@ 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`… +*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 variable, mettre une boucle dessus, mettre des conditions… +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 variable, mettre une boucle +dessus, mettre des conditions… N'oubliez pas d'aller lire l'excellente documentation de RedHat sur tous les modules d'Ansible ! @@ -50,18 +51,27 @@ d'Ansible ! Pour la liste complète, je vous invite à lire le fichier `hosts`. - * pour tester les versions de Debian, +Exemple : - ```YAML - ansible_lsb.codename == 'stretch' - ``` +```yaml +[fleming_vm] +dhcp-fleming.adm.auro.re +dns-fleming.adm.auro.re +prometheus-fleming.adm.auro.re +routeur-fleming.adm.auro.re - * pour tester si c'est un CPU Intel x86_64, +[fleming_pve] +pve1.adm.auro.re - ```YAML - ansible_processor[0].find('Intel') != -1 - and ansible_architecture == 'x86_64' - ``` +[fleming:children] +fleming_pve +fleming_vm +``` + +> NB : +> +> L'exemple a été adapté de la configuration d'Aurore pour des raisons +> pédagogiques. 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 @@ -74,10 +84,25 @@ 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. -``` +```bash ansible proxy.adm.auro.re -m setup --ask-vault-pass ``` +Il est notamment possible de : + +* tester les versions de Debian, + + ```YAML + ansible_lsb.codename == 'stretch' + ``` + +* tester si c'est un CPU Intel x86_64, + + ```YAML + ansible_processor[0].find('Intel') != -1 + and ansible_architecture == 'x86_64' + ``` + ## Exécution d'Ansible ### Configurer la connexion au vlan adm @@ -88,7 +113,7 @@ Envoyer son agent SSH peut être dangereux On va utiliser plutôt `ProxyJump`. Dans la configuration SSH : -``` +```text Host *.adm.auro.re *.pve.auro.re # Accept new host keys StrictHostKeyChecking accept-new @@ -97,7 +122,8 @@ Host *.adm.auro.re *.pve.auro.re ProxyJump passerelle.auro.re ``` -Il faut sa clé SSH configurée sur le serveur que l'on déploit. +Il faut sa clé SSH configurée sur le serveur que l'on déploie. + ```bash ssh-copy-id proxy.adm.auro.re ``` @@ -107,6 +133,7 @@ ssh-copy-id proxy.adm.auro.re Il faut `python3-netaddr` sur sa machine. Pour tester le playbook `base.yml` : + ```bash ansible-playbook --ask-vault-pass base.yml --check ``` @@ -116,7 +143,7 @@ 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...`. -### Ajouter tous les empruntes de serveur +### Ajouter toutes les empreintes de serveur ```bash #!/bin/bash @@ -140,8 +167,7 @@ ansible-galaxy collection install community.general ansible-galaxy collection install ansible.posix ``` - -Si vous n'arrivez pas à entrer votre _become password_ (bug dans ansible?), un +Si vous n'arrivez pas à entrer votre *become password* (bug dans ansible?), un workaround est le suivant : `$ export ANSIBLE_BECOME_PASS=''` @@ -149,20 +175,20 @@ workaround est le suivant : Notez l'espace au début pour ne pas log la commande dans votre historique shell. - ## Configuration des switchs depuis Ansible Afin d'acquérir de l'indépendance vis-à-vis de re2o, un module permettant de configurer les switchs depuis Ansible a été créé. Il utilise l'api rest des -switchs afin de récupérer et appliquer la configuration voulu. +switchs afin de récupérer et appliquer la configuration voulue. ### Prérequis Pour utiliser le module, il faut d'abord annoncer à Ansible qu'il ne faut pas effectuer de connexion ssh et de ne pas récupérer les faits. Cela se fait à -l'aide des variables `connection: httpapi` et `gather_facts: false`. Ensuite, -l'infrasutructue actuelle de Aurore nécéssite l'utilisation d'un proxy. Pour -cela, il suffit d'éxecuter la commande : +l'aide des variables `connection: httpapi` et `gather_facts: false` à placer +dans le playbook (pour une configuration locale) ou dans ansible.cfg (pour une +configuration globale). Ensuite, l'infrastructure actuelle de Aurore nécessite +l'utilisation d'un proxy. Pour cela, il suffit d'exécuter la commande : ```bash ssh -D 3000 switchs-manager.adm.auro.re @@ -220,7 +246,7 @@ tasks: Le `path` correspond à l'url de l'objet que l'on souhaite éditer et `data` correspond aux données qui seront envoyées dans une requête `PUT` (au format -`json`). Cependant, la configuration d'un vlan peut nécessité de le créer. +`json`). Cependant, la configuration d'un vlan peut nécessiter de le créer. Pour remédier à ce problème, il est possible d'utiliser la syntaxe suivante : ```yaml @@ -247,7 +273,7 @@ tasks: Le variable `create_method` correspond au type de la requête pour effectuer une action de création de l'objet. Il s'agit généralement de `POST`. Dans le cas où la variable n'est pas définit, la création sera désactivée et ainsi, si -l'url indiqué dans les `subpath` n'existe pas, alors la configuration échouera. +l'url indiquée dans les `subpath` n'existe pas, alors la configuration échouera. Par conséquent, si le vlan 42 a besoin d'être créé, une requête `POST` sera effectué sur l'url `vlans` avec les données dans `data`. @@ -274,7 +300,7 @@ l'éxecution, le module vérifiera si un `GET` sur l'url retourne une 404. > Remarque : > > Si les variables `delete` et `data` sont définies (dont `delete` à `true`), -> alors il en résultera une action de suppression malgrés tout. +> alors il en résultera une action de suppression malgré tout. Puisque `subpath` est une liste, il est possible de configurer plusieurs requête en même temps. Cela à l'avantage d'effectuer toutes les modifications à la suite