6 - Ansible
Présentation
Ansible est un logiciel d'automation. Il permet d'automatiser l'installation et la configuration de machine, locales ou distantes. Il gère les différents nœuds à travers SSH et ne nécessite que l'installation d'un environnement d'exécution Python. Ansible est composé de modules qui communiquent via la sortie standard en notation JSON et qui peuvent être écrits dans n'importe quel langage de programmation. Ansible peut également lire des Playbook, il s'agit de fichiers écrit en YAML et contenant des procédures faisant appel à de nombreux modules pour réaliser toutes sortes de tâches, réutilisables d'un système à l'autre.
(Librement inspiré de Wikipedia)
Environnement
Avant de commencer, nous allons vérifier que votre environnement est opérationnel. Dans un premier temps, lancez votre serveur Debian en mode « headless » :
VBoxManage startvm "Serveur Debian" --type headless
Accès au serveur Debian
Ensuite, connectez vous en SSH depuis la machine hôte ou depuis votre client Ubuntu :
ssh serveur
Rappel: pour SSH-er un serveur facilement comme ci-dessus, vous dever éditer le fichier de configuration de SSH ~/.ssh/config
Sur le client Ubuntu, le fichier config doit contenir :
Host serveur
Hostname 10.0.0.254
User user
Sur votre machine hôte, le fichier config doit contenir :
Host serveur
Hostname localhost
Port 2222
User user
Mise à jour du serveur
Une fois connecté au serveur Debian, assurez vous qu'il est à jour :
sudo apt update
sudo apt -y dist-upgrade
Vérifier ensuite qu'il ne nécessite pas un redémarrage
sudo apt -y install debian-goodies
sudo checkrestart -p
Lancement des conteneurs
Une fois votre Debian à jour, lancer ses conteneurs c1 et c2
sudo lxc-start -n c1
sudo lxc-start -n c2
Le fichier ~/.ssh/config de votre serveur Debian doit contenir :
Host c1
Hostname 10.0.3.11
User user
Host c2
Hostname 10.0.3.12
User user
Et si ce n'est toujours pas fait 🙄, générer une clé SSH et copiez la sur chaque conteneur...
[ -f ~/.ssh/id_rsa.pub ] || ssh-keygen
ssh-copy-id c1
ssh-copy-id c2
Configuration DNS
Pour jouer pleinement avec Ansible, nous allons vérifier que l'information DNS est bien en place.
Tout d'abord, sur le serveur Debian, modifier le fichier /etc/bind/db.admx.osef pour ajouter les deux lignes suivantes :
c1 IN A 10.0.3.11
c2 IN A 10.0.3.12
puis redémarré le service :
sudo service bind9 restart
contrôler son bon fonctionnement avec la commande :
sudo service bind9 status
👉 À l'IMT d'Alès, n'ayant pas une structure DNS normal, pour pouvoir appeler les conteneurs par leurs noms avec d'autres commandes que ssh (ping, nmap, firefox, …), modifier le fichier /etc/hosts comme suis :
127.0.0.1 localhost
127.0.1.1 serveur-debian.admx.osef serveur-debian
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
# IMT Alès config
10.0.3.11 c1 c1.admx.osef
10.0.3.12 c2 c2.admx.osef
Traverser du NAT de Virtualbox
Il faut encore permettre à l'hôte d'accéder au conteneur (en http) en modifiant la configuration de VirtualBox :
Serveur Debian → Réseau → Adapter 1 (NAT) → Avancé → Redirection de ports
| Nom | Protocole | IP hôte | Port hôte | IP invité | Port invité |
|---|---|---|---|---|---|
| SSH | TCP | 2222 | 22 | ||
| HTTP | TCP | 8080 | 80 |
Et pour finir, il faut ouvrir le fichier hosts de l'hôtes pour créer ou modifier la ligne qui commence par 127.0.0.1
- Sous Linux et macOS : sudo vi /etc/hosts
- Sous Windows : notepad.exe c:\Windows\System32\drivers\etc\hosts
127.0.0.1 localhost c1.admx.osef c2.admx.osef
Finitions
Derniers points, sur chaque conteneur c1 et c2, vérifier que python est bien installé :
ssh c1
sudo apt -y install python3
Ensuite, il faut autoriser les membres du group sudo à lancer des commandes avec sudo sans avoir besoin de fournir un mot de passe. Pour cela, nous allons utiliser la commande visudo qui édite le fichier /etc/sudoers de manière sécurisé. Une erreur dans le fichier « sudoers » bloquerait toute possibilité d'élévation de droit. La commande « visudo » contrôle que la syntax est correctement formée avant d'écrire réellement les modifications dans le fichier.
👉 La commande visudo utilise l'éditeur par défaut du système. Vous pouvez choisir l'éditeur par défaut en lançant la commande : sudo update-alternative --config editor. Vous pouvez aussi lister les nombreuses alternatives proposant des choix avec : sudo update-alternative --get-selections. Enfin, vous pouvez effectuer un choix pour toutes les alternatives avec : sudo update-alternative --all
sudo visudo
Là, modifier la ligne suivante en ajoutant le mot clé NOPASSWD: à la ligne qui commence par %sudo :
%sudo ALL=(ALL:ALL) NOPASSWD:ALL
Sauvegardez le fichier, déconnectez vous (ctrl+d ou exit) et faite la même chose sur c2 (ssh c2 → installation de python et configuration de sudo).
