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

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).