155 lines
4.4 KiB
Markdown
155 lines
4.4 KiB
Markdown
---
|
|
title: Howto Vagrant
|
|
categories: virtualisation dev
|
|
---
|
|
|
|
* Documentation : <https://www.vagrantup.com/docs/>
|
|
|
|
[Vagrant](https://www.vagrantup.com) est un logiciel qui permet de configurer des environnements de développement légers, portables et reproductibles.
|
|
|
|
À travers son fichier de configuration nommé **Vagrantfile**, il permet d'orchestrer la mise en place d'environnement virtuel à base de VM ou de conteneur.
|
|
|
|
## Installation
|
|
|
|
Debian Stretch propose Vagrant 1.9.1, pour l'installer (ainsi que le plugin libvirt) :
|
|
|
|
~~~
|
|
apt install vagrant vagrant-libvirt
|
|
~~~
|
|
|
|
Des paquets Debian officiels (maintenu par Hashicorp) sont aussi disponibles dans des versions plus récentes mais sans dépôts : <https://www.vagrantup.com/downloads.html>
|
|
|
|
## Providers
|
|
|
|
Vagrant permet de lancer et configurer des environnements basés sur VirtualBox, Libvirt, VMware, Docker, Amazon EC2 et plusieurs autres, ces providers peuvent être locaux ou situés sur des serveurs distants.
|
|
|
|
### Libvirt
|
|
|
|
Le [provider libvirt](https://github.com/vagrant-libvirt/vagrant-libvirt/blob/master/README.md) permet d'utiliser les services supportés par l'API [libvirt](https://libvirt.org/), notamment [KVM](HowtoKVM), voici un example d'utilisation d'un serveur KVM distant :
|
|
|
|
~~~
|
|
Vagrant.configure('2') do |config|
|
|
config.vm.provider :libvirt do |libvirt, override|
|
|
libvirt.host = "kvm-host.example.com"
|
|
libvirt.connect_via_ssh = 'yes'
|
|
libvirt.memory = 1024
|
|
libvirt.cpus = 2
|
|
libvirt.cpu_mode = "host-passthrough"
|
|
libvirt.random :model => 'random'
|
|
override.ssh.proxy_command = "ssh kvm-host.example.com nc -N %h %p"
|
|
end
|
|
end
|
|
~~~
|
|
|
|
### Virtualbox
|
|
|
|
Le provider originel et par défaut de Vagrant est [Virtualbox](https://www.virtualbox.org/), il a l'avantage de pouvoir tourner sur Linux, Windows et Mac OS :
|
|
|
|
~~~
|
|
config.vm.provider :virtualbox do |v|
|
|
v.memory = 1024
|
|
v.cpus = 2
|
|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
|
v.customize ["modifyvm", :id, "--ioapic", "on"]
|
|
end
|
|
~~~
|
|
|
|
### Configuration locale
|
|
|
|
Afin de permettre à chacun d'utiliser son propre provider, qu'il soit local ou distant, on peut mettre en place une surcharge de la configuration via un fichier ~/.VagrantFile :
|
|
|
|
~~~
|
|
# Load ~/.VagrantFile if exist, permit local config provider
|
|
vagrantfile = File.join("#{Dir.home}", '.VagrantFile')
|
|
load File.expand_path(vagrantfile) if File.exists?(vagrantfile)
|
|
~~~
|
|
|
|
Ce ~/.VagrantFile contiendra la configuration du provider spécifique a chaque utilisateur, s'il n'existe pas et qu'aucun provider n'est défini, le provider par défaut du système sera utilisé.
|
|
|
|
## Commandes de base
|
|
|
|
1. Lancer l'environnement:
|
|
|
|
~~~
|
|
vagrant up
|
|
~~~
|
|
|
|
2. Provisionner l'environnement:
|
|
|
|
~~~
|
|
vagrant provision
|
|
~~~
|
|
|
|
3. Stopper l'exécution de l'environnement:
|
|
|
|
~~~
|
|
vagrant halt
|
|
~~~
|
|
|
|
4. Supprimer l'environnement:
|
|
|
|
~~~
|
|
vagrant destroy
|
|
~~~
|
|
|
|
5. Accéder à la machine virtuelle par SSH
|
|
|
|
~~~
|
|
vagrant ssh
|
|
~~~
|
|
|
|
6. Synchro automatique
|
|
|
|
~~~
|
|
vagrant rsync-auto
|
|
~~~
|
|
|
|
Voir la [documentation](https://developer.hashicorp.com/vagrant/docs/cli/rsync-auto).
|
|
|
|
## Vagrantfile
|
|
|
|
Le Vagrantfile un fichier en Ruby qui décrit le type de machine à démarrer, leurs spécifications et leur configuration initiale (provision).
|
|
|
|
Ce fichier est unique à un projet et doit être situé à la racine de ce dernier.
|
|
|
|
Exemple:
|
|
|
|
~~~{.ruby}
|
|
# -*- mode: ruby -*-
|
|
# vi: set ft=ruby :
|
|
|
|
Vagrant.configure('2') do |config|
|
|
#Image de base de la machine virtuelle
|
|
config.vm.box = "debian/bookworm64"
|
|
|
|
#Désactivation de la synchronisation des fichiers à la racine du projet. (activé par défaut)
|
|
config.vm.synced_folder "./", "/vagrant", disabled: true
|
|
|
|
#Spécification du provider et caractéristiques des VM.
|
|
config.vm.provider :virtualbox do |v|
|
|
v.memory = 1024
|
|
v.cpus = 2
|
|
v.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
|
|
v.customize ["modifyvm", :id, "--ioapic", "on"]
|
|
end
|
|
|
|
#Définition de la machine virtuelle qui sera lancée.
|
|
config.vm.define :default do |default|
|
|
default.vm.hostname = "default"
|
|
default.vm.network :private_network, ip: "192.168.33.33"
|
|
default.vm.provision :ansible do |ansible|
|
|
ansible.limit = "default"
|
|
ansible.playbook = "provisioning/vagrant.yml"
|
|
ansible.raw_arguments = ["-b"]
|
|
end
|
|
end
|
|
|
|
#Configuration permettant de distribuer l'image dans le Vagrant Atlas
|
|
config.push.define "atlas" do |push|
|
|
push.app = "evolix/evolinux"
|
|
push.vcs = false
|
|
end
|
|
|
|
end
|
|
~~~
|