Maximiser l’Efficacité de Vagrant : Configuration Avancée et Intégration de Services Part 1.1.2

Vagrant
Vagrant

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 :

  1. Redirection de ports conditionnelle.
  2. Attribution des caractéristiques de la machine, d’adresses IP privées, et l’intégration de plugins.
  3. Installation de packages supplémentaires, notamment Ansible et Docker, tout en les faisant interagir avec un serveur NGINX.
  4. 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 :
    1. Ouvrez l’interface graphique de VirtualBox.
    2. Cliquez avec le bouton droit sur la machine, sélectionnez « Stop », puis « Éteindre ».
    3. Cliquez à nouveau avec le bouton droit sur la machine, puis choisissez « Supprimer ».
Eteindre une machine sur virtualbox
Supprimer une machine sur virtualbox

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

Automation Experts

Rejoignez-nous pour une newsletter exclusive sur l'automatisation des experts informatique !

Obtenez les dernières tendances, astuces et outils pour optimiser vos processus, accélérer vos projets et libérer tout le potentiel de l'automatisation dans le monde de la technologie. Abonnez-vous dès maintenant pour rester à la pointe de l'innovation et transformer votre manière de travailler."

Comments

No comments yet. Why don’t you start the discussion?

    Alors tu en pense quoi de cette article ? Dis-moi tous..