Add example and typo
This commit is contained in:
parent
ec13538cb7
commit
b74cf3faea
1 changed files with 58 additions and 32 deletions
90
README.md
90
README.md
|
@ -1,10 +1,8 @@
|
|||
[](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='<votre mot de passe LDAP>'`
|
||||
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue