Documentation ansible
parent
8565fed3c6
commit
0e46308ccf
|
@ -0,0 +1,219 @@
|
|||
# Ansible
|
||||
|
||||
Ansible est un moyen de créer des configurations de serveur et de les déployer.
|
||||
Il permet ainsi l'accélération du déploiement de certains services et de
|
||||
permettre de les réinstaller en cas de problèmes.
|
||||
|
||||
Cette documentation n'étant pas exhaustive, il sera nécessaire de faire des
|
||||
tours dans les dossiers d'ansible et dans la
|
||||
[documentation officielle](https://docs.ansible.com/ansible/latest/index.html)
|
||||
d'ansible.
|
||||
|
||||
## Prérequis
|
||||
|
||||
La configuration d'ansible du crans nécessite un certain nombre de prérequis.
|
||||
|
||||
### Installation d'Ansible
|
||||
|
||||
Pour utiliser l'[Ansible du crans](https://gitlab.crans.org/nounous/ansible),
|
||||
il faut installer Ansible sur votre machine personnelle. Il est possible de le
|
||||
faire avec la commande :
|
||||
|
||||
```bash
|
||||
sudo apt install ansible
|
||||
```
|
||||
|
||||
Ou équivalent pour les autres gestionnaires de paquets
|
||||
|
||||
### Accès au LDAP
|
||||
|
||||
Pour faciliter le déploiement, il est possible (et nécessaire) d'utiliser le
|
||||
ldap pour configurer les machines. Ceci nécessite l'installation du paquet
|
||||
python correspondant
|
||||
|
||||
```bash
|
||||
sudo apt install python3-ldap
|
||||
```
|
||||
|
||||
Ou équivalent pour les autres gestionnaires de paquets.
|
||||
|
||||
Ensuite, il faut donner l'accès au ldap à votre machine avec la commande :
|
||||
|
||||
```bash
|
||||
ssh -L 1636:wall-e.adm.crans.org:636 wall-e.adm.crans.org
|
||||
```
|
||||
|
||||
### Accès au pass
|
||||
|
||||
Certains fichiers de configuration contiennent des secrets. Ceux-ci sont alors
|
||||
dans le pass du crans. Il est donc nécessaire d'installer le pass du crans
|
||||
comme indiqué sur le git.
|
||||
|
||||
## Création d'un fichier de configuration
|
||||
|
||||
### Architecture
|
||||
|
||||
Pour bien comprendre comment configurer ansible, il faut d'abord comprendre
|
||||
l'architecture du git
|
||||
[Ansible du crans](https://gitlab.crans.org/nounous/ansible) :
|
||||
|
||||
- `hosts` : est un fichier qui contient les machines et qui les regroupent en
|
||||
groupe. Cela permet d'exécuter les configurations correspondantes au groupe
|
||||
de la machine directement.
|
||||
- `all.yml` : est juste un fichier contenant tous les playbook déjà configurés.
|
||||
En particulier, il permet de ré-executé toutes les configurations.
|
||||
- `group_vars` : est un dossier qui contient les variables utiles pour
|
||||
exécuter une configuration d'un groupe donné
|
||||
- `host_vars` : est un dossier contenant les variables qui sont spécifiques à
|
||||
chaque machine. Par exemple, la configuration réseau.
|
||||
- `plays` : est un dossier qui contient le pont entre tout les éléments déjà
|
||||
mentionnés. Il s'agit du fichier que l'on va exécuter. Il contient le (ou
|
||||
les) groupe qui va être concerné par son exécution. Il va aussi dire
|
||||
qu'elles seront les rôles à exécuter mais aussi définir de potentielles
|
||||
variables.
|
||||
- `roles` : il s'agit du dossier qui contient l'ensemble des fichiers de
|
||||
configurations ainsi que les commandes à exécuter.
|
||||
|
||||
:bulb: Pour utiliser des variable de groupe, il faut que la machine soit dans
|
||||
le groupe correspondant dans `hosts`
|
||||
|
||||
### Configuration basique
|
||||
|
||||
Pour commencer, il va falloir ajouter une configuration qui ne dépend pas (ou
|
||||
presque) de la machine. Il s'agit du playbook `root`. Celui-ci contient toutes
|
||||
les instructions pour initialiser les éléments essentiels d'une machinei au
|
||||
crans. Par exemple, les backups, le monitoring, le ssh ou encore les nounous.
|
||||
|
||||
Pour ajouter cette configuration il suffit de suivre les étapes suivantes :
|
||||
|
||||
- ajouter la machine dans `hosts`, dans la catégorie `crans_vm` s'il s'agit
|
||||
d'une vm.
|
||||
- ajouter la configuration réseau dans `host_vars` (dans un fichier du même nom
|
||||
que la machine).
|
||||
|
||||
Voici une configuration possible issue de la vm voyager :
|
||||
|
||||
```yaml
|
||||
---
|
||||
interfaces:
|
||||
adm: ens18
|
||||
srv_nat: ens19
|
||||
|
||||
loc_unattended:
|
||||
automatic_reboot: true
|
||||
|
||||
loc_needrestart:
|
||||
override: []
|
||||
```
|
||||
|
||||
C'est bon la configuration est prête ! Il faut dès lors la déployer. Pour cela,
|
||||
vous devez exécuter la commande :
|
||||
|
||||
```bash
|
||||
plays/root.yml -l [machine à déployer].adm.crans.org --check
|
||||
```
|
||||
|
||||
ATTENTION :
|
||||
|
||||
- Le `--check` sert à vérifier que la configuration fonctionne et donc
|
||||
n'effectue aucune modification. De manière général, il est préférable de
|
||||
vérifier le fonctionnement de la configuration avant de la déployer.
|
||||
Cependant, et comme on peut le constater dans le playbook root, des erreurs
|
||||
peuvent avoir lieu bien que la configuration fonctionne. Cela vient du fait
|
||||
que certains fichiers de configuration ont besoin d'un paquet qui doit être
|
||||
installer au préalable pour être écrit.
|
||||
- Si la machine que vous cherchez à déployer est fraîchement installer, la
|
||||
procédure change légèrement car vous n'avez pas encore de compte sur la
|
||||
machine. Il est alors nécessaire de faire un tour sur la
|
||||
[documentation appropriée](https://gitlab.crans.org/nounous/documentation/howto/creer_vm_crans.md).
|
||||
|
||||
### Configuration du service
|
||||
|
||||
Le machine que vous déployez aura, a priori, une configuration qui lui sera
|
||||
propre car lié à un service spécifique qu'elle hébergera. Pour cela, il est
|
||||
nécessaire de créer votre propre configuration. Pour cela, il convient de
|
||||
suivre les étapes suivantes :
|
||||
|
||||
- ajoutez la machine aux groupes appropriés
|
||||
- Si besoin : créer un groupe dans `hosts` contenant le machine.
|
||||
- (facultatif) Si vous avez créer un nouveau groupe : créer un fichier dans
|
||||
`group_vars`. contenant les variables qui seront à utiliser dans la
|
||||
configuration. ATTENTION : ce fichier devra avoir le même nom que le groupe
|
||||
précédemment défini.
|
||||
- Si vous avez besoin de secrets : créer dans le pass un fichier dans
|
||||
`crans/ansible` contenant les secrets qui seront utilisés dans la
|
||||
configuration
|
||||
- créer un fichier dans `plays` contenant a minima :
|
||||
- une entête disant comment exécuter le fichier
|
||||
(`#!/usr/bin/env ansible-playbook`) (suivi de `---`)
|
||||
- le groupe sur lequel il s'exécute (`hosts:`)
|
||||
- les rôles à exécuter (`roles:`)
|
||||
- écrire le rôles à exécuter
|
||||
|
||||
Ce dernier point mérite de s'y attarder.
|
||||
|
||||
Pour créer un rôle, il faut créer un dossier (le rôle) contenant un autre
|
||||
dossier minimum : `tasks`. Ce dernier contiendra les fichiers qui exécuteront
|
||||
les commandes. Pour écrire ces fichiers, vous pourrez vous aidez de la
|
||||
[documentation d'Ansible](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/).
|
||||
Si vous avez besoin d'effectuer une tâche qui n'est pas prise en charge par le
|
||||
module par défaut d'Ansible, il est possible d'utiliser d'autres collections
|
||||
présentent sur cette
|
||||
[documentation](https://docs.ansible.com/ansible/latest/collections/). Il sera
|
||||
alors nécessaire d'installer ces paquets selon la procédure décrite dans la
|
||||
documentation.
|
||||
|
||||
Cependant, dans les rôles, vous serez amené⋅e à écrire des fichiers complets.
|
||||
Ceci seront contenu dans le dossier `templates`. Celui-ci pourra contenir des
|
||||
variables du groupe prédéfini (`{{ fichier.variable }}`) ou des secrets
|
||||
(`{{ vault.fichier.variable }}`). Pour la clarté, ces fichiers auront le même
|
||||
chemin dans `templates` que sur la machine une fois déployée. Il est aussi
|
||||
possible de faire des boucles avec la syntaxe :
|
||||
|
||||
```jinja
|
||||
{% for variable in liste %}
|
||||
|
||||
...
|
||||
|
||||
{% endfor %}
|
||||
```
|
||||
|
||||
Pour plus d'information sur la syntaxe des templates, référez vous à la
|
||||
[documentation de jinja](https://jinja.palletsprojects.com/en/3.1.x/templates/)
|
||||
|
||||
Enfin, lors de la configuration, il peut-être nécessaire d'exécuter des
|
||||
opérations qui auront lieux UNIQUEMENT en cas de changement. Ceci seront dans
|
||||
le dossier `handlers`. Par exemple, redémarrer nginx après modification des
|
||||
fichiers de configuration. Pour plus d'information sur les handlers, vous
|
||||
pouvez jeter un œil sur cette
|
||||
[documentation](https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_handlers.html).
|
||||
|
||||
Voici un bref récapitulatif de la structure d'un dossier de roles :
|
||||
|
||||
```bash
|
||||
roles/[service]/
|
||||
├── handlers
|
||||
│ └── main.yml
|
||||
├── tasks
|
||||
│ └── main.yml
|
||||
└── templates
|
||||
└── [des templates]
|
||||
```
|
||||
|
||||
Ces propos sont très abstraits et probablement peu limpides. Si vous êtes dans
|
||||
ce cas, regardez un fichier de configuration quelconque en même temps pour vous
|
||||
familiarisez avec la structure et le fonctionnement ainsi que la syntaxe.
|
||||
Cependant, vous devriez avoir les clés pour comprendre les fichiers de
|
||||
configuration !
|
||||
|
||||
### Configurer le reverseproxy
|
||||
|
||||
Si votre service nécessite de recevoir une connexion depuis l'extérieur, il
|
||||
faut alors dire que l'on souhaite en recevoir. Ceci passe alors par Hodaur (le
|
||||
reverseproxy). Pour cela il suffit de :
|
||||
|
||||
- ajouter dans `group_vars/reverseproxy.yml` le site dont il est question
|
||||
dans la catégorie `reverseproxy_sites`. Voici un exemple de ce qu'il faut
|
||||
ajouter `- {from: helloworld.crans.org, to: 172.16.10.131}`
|
||||
- exécuter le playbook reverseproxy
|
||||
(`plays/reverseproxy -l hodaur.adm.crans.org --check`)
|
Loading…
Reference in New Issue