8.5 KiB
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 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, il faut installer Ansible sur votre machine personnelle. Il est possible de le faire avec la commande :
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
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 :
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 :
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.
💡 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égoriecrans_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 :
---
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 :
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.
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:
)
- une entête disant comment exécuter le fichier
(
- é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.
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. 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 :
{% for variable in liste %}
...
{% endfor %}
Pour plus d'information sur la syntaxe des templates, référez vous à la documentation de jinja
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.
Voici un bref récapitulatif de la structure d'un dossier de roles :
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égoriereverseproxy_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
)