Introduction
Dans le précédent volet de notre série sur Ansible, nous avons initié la création d’un environnement de développement virtuel en générant un fichier Vagrantfile et en utilisant des commandes de base. Dans cet article, nous allons pousser notre configuration à un niveau supérieur en ajoutant des paramètres spécifiques pour une expérience plus personnalisée et fonctionnelle. Vous serez en mesure d’ajouter des paramètres spécifiques, tels que :
- Redirection de ports conditionnelle.
- Attribution des caractéristiques de la machine, d’adresses IP privées, et l’intégration de plugins.
- Installation de packages supplémentaires, notamment Ansible et Docker, tout en les faisant interagir avec un serveur NGINX.
- Et plus encore…
Optimisation de VirtualBox :
Avant de plonger dans les améliorations du Vagrantfile, il est essentiel d’assurer la propreté de notre environnement VirtualBox. Nous présentons deux méthodes, l’une via l’interface graphique et l’autre via PowerShell, pour éteindre et supprimer proprement les machines.
Commençons par effectuer un nettoyage de notre machine VirtualBox :
- Si vous préférez l’interface graphique, suivez ces étapes :
- Ouvrez l’interface graphique de VirtualBox.
- Cliquez avec le bouton droit sur la machine, sélectionnez « Stop », puis « Éteindre ».
- Cliquez à nouveau avec le bouton droit sur la machine, puis choisissez « Supprimer ».


Alternativement, vous pouvez utiliser PowerShell 7.4 en suivant les instructions de l’article précédent
Vagrant Vagrant destroy -f
# Détruire la machine
Assurez-vous d’avoir une machine assez puissante soit minimun 8GO de RAM avec un processeur i5 ou plus. Vérifier que toutes les machines ont été supprimées de VirtualBox et qu’il ne reste aucun dossier dans le chemin C:\Users<Votre PC>\VirtualBox VMs.


Explication du fichier Vagrantfile :
# Version du Vagrantfile
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Redirection de ports
config.vm.network :forwarded_port, host: 8000, guest: 80
config.vm.network :forwarded_port, host: 8443, guest: 443
# Adresse IP privée accessible uniquement sur la machine hôte et pas sur le réseau
config.vm.network "private_network", ip: "192.168.33.10"
# Configuration SSH Agent pour les connexions sur un dépôt Git distant + utilisation de la même clé
config.ssh.forward_agent = true
config.ssh.insert_key = false
# Utilisation de la boîte Ubuntu Focal Fossa
config.vm.box = "ubuntu/focal64"
# Provisionnement Docker pour exécuter un conteneur NGINX
config.vm.provision "docker" do |d|
d.run "nginx"
end
end
Vagrant.configure("2") do |config|
# Installation Ansible et définition de ses paramètres
config.vm.box = "ubuntu/xenial64"
config.vm.provision "ansible_local" do |ansible|
ansible.compatibility_mode = "2.0"
ansible.galaxy_role_file = "role/requirement.yml"
ansible.galaxy_roles_path = "roles"
ansible.playbook = "playbook.yml"
ansible.verbose = "vvv"
end
end
# Ajout de plugins, mise à jour et boot si le temps dépasse
config.vagrant.plugins = ["vagrant-hostmanager", "vagrant-vbguest"]
config.vm.box_check_update = true
config.vm.boot_timeout = 1200
# Gestion de /etc/hosts
config.hostmanager.enabled = true
config.hostmanager.include_offline = true
config.hostmanager.manage_guest = true
config.hostmanager.manage_host = true
# Mettre à jour les pilotes externes à condition que le plugin vb-guest soit installé
if Vagrant.has_plugin?("vagrant-vbguest")
config.vbguest.auto_update = true
end
# Définition des caractéristiques de la machine virtuelle
config.vm.provider "virtualbox" do |vb|
vb.name = "web"
vb.customize ["modifyvm", :id,
"--audio", "none",
"--cpus", 2,
"--memory", 2048,
"--graphicscontroller", "VMSVGA",
"--vram", "64"
]
end
Création des Machines Virtuelles :
Après avoir compris ces lignes de configuration, vous pouvez copier les fichiers depuis mon repo git pour générer votre parc informatique, notamment les fichiers Vagrantfile et config.json. Vous pouvez clonez tout le dépôt ou juste la branche « ansible ». N’oubliez pas de faire votre « Fork » ou « Bifurcation »
git clone -b ansible --single-branch https://github.com/laeltirns/devops.git
Ou tout le dépôt


Vous aurez un fichier playbook.yml avec comme action de créer un repertoire et un fichier txt. Nous nous attarderons au playbook dans le prochain article.
Exécutez la commande suivante pour vérifier la configuration :
vagrant validate
Vous remarquerez peut-être une erreur indiquant qu’il ne parvient pas à parser le fichier JSON. Si vous examinez la fin du fichier, vous constaterez peut-être que la disposition des machines est différente de celle attendue. La disposition correcte du fichier JSON est la suivante :
[{
"name": "bullseye",
"cpus": 1,
"distro": "debian",
"family": "debian",
"gui": false,
"box": "generic/debian11",
"ip_addr": "192.168.56.3",
"memory": "1024",
"no_share": false,
"app_port": "80",
"forwarded_port": "8003"
},
{
"name": "rocky",
"cpus": 2,
"distro": "rocky",
"family": "redhat",
"gui": false,
"box": "generic/rocky8",
"ip_addr": "192.168.56.13",
"memory": "2048",
"no_share": false,
"app_port": "80",
"forwarded_port": "8013"
}]
Assurez-vous que la virgule à la fin du dernier dictionnaire est correctement placée, comme indiqué ci-dessus. Au lieu de },] on aura }] sur le fichier config.json
Ensuite, exécutez à nouveau la commande
vagrant validate
Si le plugin déclaré « vagrant-hostmanager », « vagrant-vbguest » dans votre Vagrantfile n’est pas installé, le système vous proposera de l’installer. Acceptez en tapant « Y ». Mais si vous souhaitez installer les nouveaux plugins de votre Vagrantfile exécutez la commande :
vagrant plugin install --local
Une fois le plugin installé, exécutez à nouveau « vagrant validate », et vous devriez voir le message « Vagrantfile validated successfully ».
Utilisez la commande suivante pour afficher l’état de toutes vos machines :
vagrant status

Ensuite, lancez la création des machines avec la commande suivante :
vagrant up bullseye focal fedora centos7 rocky
Cela peut prendre du temps, car il téléchargera l’image depuis Vagrant sur votre machine. Profitez-en pour faire autre chose, mais restez à proximité, car il pourrait demander une autorisation pendant le processus.

Vous avez vos petit parc informatique prêt à travailler pour vous

Configuration Avancée avec Ansible
Nous passons ensuite à l’utilisation d’Ansible pour configurer notre parc informatique virtuel. Des fichiers de configuration sont créés, notamment ansible.cfg et serveur.ini, permettant de gérer les connexions et d’organiser les informations sur les machines.
En nous connectant à la première machine (bullseye) nous allons créé un fichier ansible.cfg avec le contenu suivant :

[defaults]
inventory = ~/serveur.ini
host_key_checking = true
stdout_callback = yaml
callback_enabled = timer
Et un fichier serveur.ini avec le contenu suivant :
[parc]
bullseye ansible_host=192.168.56.2
focal ansible_host=192.168.56.3
fedora ansible_host=192.168.56.4
centos9 ansible_host=192.168.56.5
rocky ansible_host=192.168.56.6
Test de Connectivité et Partage de Clés SSH :
Nous explorons l’utilisation d’Ansible pour tester la connectivité entre les machines virtuelles et partageons les clés SSH entre elles, facilitant ainsi la communication sécurisée.
Nous allons essayer de joindre grâce à la commande `ping` les autres machines pour regarder si pour pouvons parler à tous notre parc informatique
ping 192.168.56.*
.

Puis nous allons envoyer notre clé public sur tous les autres serveurs. Pour ce faire, nous allons générer notre paire de clé ssh sur notre serveur principale qui sera sur la machine bullseye .
ssh-keygen -b 2048 -t rsa
<Entrée>
<Entrée>
<Entrée>
Une fois les clés générer, nous ajoutons la clé publique dans la fichier authorized_keys de tous les serveurs.
cat .ssh/id_rsa.pub
echo « <ta clé du dessus.pub> » >> .ssh/authorized_keys
sur vagrant@bullseye
Puis nous sortons de bullseye pour faire notre commande pour toute les machines
vagrant ssh bullseye -c '
echo "<id_rsa.pub>"
>> .ssh/authorized_keys' &&
vagrant ssh focal -c '
echo "<id_rsa.pub>"
>> .ssh/authorized_keys' &&
vagrant ssh fedora -c '
echo "<id_rsa.pub>"
>> .ssh/authorized_keys' &&
vagrant ssh centos7 -c '
echo "<id_rsa.pub>"
>> .ssh/authorized_keys' &&
vagrant ssh rocky -c '
echo "<id_rsa.pub>"
>> .ssh/authorized_keys'
Ce qui donne (il doit pas y avoir de retour à la ligne) :
PS C:\Users\PC\Documents\devops>vagrant ssh bullseye -c 'echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbK5Jq3tB9V+PY+yUzZvrbnPR+ul+/9t0kuRL5Om39am3+zGq/Hib+bbd/jF7GDKL1VPV19m2qWXGn5VQyybRS5z0fC0SrRFrGfB5BhETLpVchWFVMEgNEWvE1UsRkRvhAbGtyKtt5OE/R7UYMWkJbVpLXGzFb+hu7AKOE+VsZMwjEnXeCUkTtXCKjIY0RbakwPuFZgOpSLM+89855l0ZDTGgwnKiJifGuT9RaQK7begRP3ZTEIt55xmuda1B20U07Bkpwsm97hvwy/JipsF1YgX9lExb4gvb3JY+Srf77zIQ4VJREkhdmk7/8nB4O3pyLCKKofTVHNhNxovh97ozp vagrant@bullseye" >> .ssh/authorized_keys' && vagrant ssh focal -c 'echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbK5Jq3tB9V+PY+yUzZvrbnPR+ul+/9t0kuRL5Om39am3+zGq/Hib+bbd/jF7GDKL1VPV19m2qWXGn5VQyybRS5z0fC0SrRFrGfB5BhETLpVchWFVMEgNEWvE1UsRkRvhAbGtyKtt5OE/R7UYMWkJbVpLXGzFb+hu7AKOE+VsZMwjEnXeCUkTtXCKjIY0RbakwPuFZgOpSLM+89855l0ZDTGgwnKiJifGuT9RaQK7begRP3ZTEIt55xmuda1B20U07Bkpwsm97hvwy/JipsF1YgX9lExb4gvb3JY+Srf77zIQ4VJREkhdmk7/8nB4O3pyLCKKofTVHNhNxovh97ozp vagrant@bullseye" >> .ssh/authorized_keys' && vagrant ssh fedora -c 'echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbK5Jq3tB9V+PY+yUzZvrbnPR+ul+/9t0kuRL5Om39am3+zGq/Hib+bbd/jF7GDKL1VPV19m2qWXGn5VQyybRS5z0fC0SrRFrGfB5BhETLpVchWFVMEgNEWvE1UsRkRvhAbGtyKtt5OE/R7UYMWkJbVpLXGzFb+hu7AKOE+VsZMwjEnXeCUkTtXCKjIY0RbakwPuFZgOpSLM+89855l0ZDTGgwnKiJifGuT9RaQK7begRP3ZTEIt55xmuda1B20U07Bkpwsm97hvwy/JipsF1YgX9lExb4gvb3JY+Srf77zIQ4VJREkhdmk7/8nB4O3pyLCKKofTVHNhNxovh97ozp vagrant@bullseye" >> .ssh/authorized_keys' && vagrant ssh centos7 -c 'echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbK5Jq3tB9V+PY+yUzZvrbnPR+ul+/9t0kuRL5Om39am3+zGq/Hib+bbd/jF7GDKL1VPV19m2qWXGn5VQyybRS5z0fC0SrRFrGfB5BhETLpVchWFVMEgNEWvE1UsRkRvhAbGtyKtt5OE/R7UYMWkJbVpLXGzFb+hu7AKOE+VsZMwjEnXeCUkTtXCKjIY0RbakwPuFZgOpSLM+89855l0ZDTGgwnKiJifGuT9RaQK7begRP3ZTEIt55xmuda1B20U07Bkpwsm97hvwy/JipsF1YgX9lExb4gvb3JY+Srf77zIQ4VJREkhdmk7/8nB4O3pyLCKKofTVHNhNxovh97ozp vagrant@bullseye" >> .ssh/authorized_keys' && vagrant ssh rocky -c 'echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDbK5Jq3tB9V+PY+yUzZvrbnPR+ul+/9t0kuRL5Om39am3+zGq/Hib+bbd/jF7GDKL1VPV19m2qWXGn5VQyybRS5z0fC0SrRFrGfB5BhETLpVchWFVMEgNEWvE1UsRkRvhAbGtyKtt5OE/R7UYMWkJbVpLXGzFb+hu7AKOE+VsZMwjEnXeCUkTtXCKjIY0RbakwPuFZgOpSLM+89855l0ZDTGgwnKiJifGuT9RaQK7begRP3ZTEIt55xmuda1B20U07Bkpwsm97hvwy/JipsF1YgX9lExb4gvb3JY+Srf77zIQ4VJREkhdmk7/8nB4O3pyLCKKofTVHNhNxovh97ozp vagrant@bullseye" >> .ssh/authorized_keys'
ça donne :


Là nous retournons sur bullseye pour tenter un première connexion. Cela nous permettra d’avoir notre fingerprint. Il sert à identifier de manière univoque (qui n’admet aucun doute ou malentendu) notre clé.
ssh vagrant@focal -t ‘uptime’
vagrant@bullseye

DEBUG
Si vous avez une demande de mot de passe c’est que votre clé publique n’est pas dans le fichier .ssh/authorized_keys .
Allez dans votre machine bullseye (vagrant ssh bullseye), copiez la clé.pub (cat .ssh/id_rsa.pub), selectionnez par la souris sur terminal puis faite deux fois clique gauche.
Faite la commande suivante avec votre clé copiez, tout en changeant le nom de la machine (rocky, centos7, focal..)
vagrant ssh rocky -c ‘echo « <coller ici> » >> .ssh/authorized_keys’
Dans votre powershell
Exemple :

Fait en sorte que vous avez tous les fichiers et dossiers Vagrantfile, config.json, .vagrant, playbook.yml dans le même dossier.
Là nous pouvons faire notre ping sur toutes les machines via ansible grâce à la commande
ansible all -m ping

Conclusion :
En conclusion, ce deuxième volet de notre série sur Vagrant offre une compréhension approfondie de la configuration avancée de Vagrantfile et de l’intégration de services tels qu’Ansible. En suivant ces étapes détaillées, les utilisateurs peuvent créer un environnement de développement virtuel robuste et optimisé, prêt à répondre à leurs besoins spécifiques. Pour aller plus loin vous pouvez aller voir le livre Vagrant Up & Running. Inspirer du livre ANSIBLE Up & Running