Aller au contenu principal

Multiple disques pour VM KVM et Vagrant

· 3 minutes de lecture
Stéphane ROBERT

logo

Dans un mes précédents billets, je vous proposais de vous monter un environnement de dev Linux sous Windows utilisant vagrant et libvirt/kvm. Et après une introduction à l'utilisation de vagrant je vous propose ici de provisionner des disques supplémentaires et de les intégrer à vos VM via ansible.

J'utilise packer pour construire mes box vagrant intégrant tous les outils que j'utilise pour mettre au point mes rôles et playbooks Ansible entre autre. Mais par souci de place, je les ai provisionné avec seulement 5Go de disque. Mais parfois je dois construire des machines intégrant plusieurs applications ou utilisant des belles bases de données. Alors je vous propose de vous montrer comment ajouter facilement du disque à vos box vagrant.

Voici le fichier Vagrantfile ajoutant deux disques à ma box ol8.

Vagrant.configure("2") do |config|

config.vm.box = "ol8"

config.vm.provider "libvirt" do |hv|
hv.cpus = "5"
hv.memory = "6656"
hv.storage :file, :size => "20G"
hv.storage :file, :size => "10G"
end
config.vm.synced_folder '.', '/vagrant', disabled: true
config.vm.define "host1" do |host1|
host1.vm.network :forwarded_port, guest: 80, host: 8080
host1.vm.network :private_network, ip: "192.168.3.10"
host1.vm.hostname = "host1"
host1.vm.provision "ansible" do |a|
a.verbose = "v"
a.playbook = "provision-playbook.yml"
end
end
end

Dans un premier temps il faut ajouter dans la partie provider libvirt ajouter la création de deux disques :

  config.vm.provider "libvirt" do |hv|
hv.cpus = "5"
hv.memory = "6656"
hv.storage :file, :size => "20G"
hv.storage :file, :size => "10G"
end

Ensuite il suffit soit d'ajouter ces disques à vos volumes logiques soit créer des partitions. Je le fais avec Ansible en installant les collections de la communauté.

ansible-galaxy collection install -f community.general:==2.0.0

Ici je demande d'installer la version 2.0.0 en forçant l'installation, car parfois il refuse de mettre à jour la collection.

Ensuite dans votre playbook pour ajouter un disque à un volume logique existant. Il faut dans un premier temps créer la partition en le flagant lvm, puis l'assigner au volume groupe, au volume logique et pour finir par étendre la partition ici au format xfs.

  - name: create vdc1
parted:
device: /dev/vdc
number: 1
state: present
flags: [ lvm ]

- name: add sdc1 to volume group
lvg:
vg: ol_ol8
pvs:
- /dev/vdc1
- /dev/vda2
pesize: 13.88G

- name: add sdc1
lvol:
vg: ol_ol8
lv: root
size: 13G

- name: grow xfs
filesystem:
dev: /dev/mapper/ol_ol8-root
fstype: xfs
resizefs: yes

Une autre possibilité est de ne pas utiliser des volumes logiques, mais de formater des partitions classiques et de les monter. Ce qui donne dans le playbook ceci, je coupe le disque vdb en partition égale et je les monte sur deux filesystem (/opt /data) :

  - name: partition 1
parted:
device: /dev/vdb
number: 1
state: present
part_start: 0%
part_end: 50%

- name: partition 2
parted:
device: /dev/vdb
number: 2
state: present
part_start: 50%
part_end: 100%

- name: Create a ext4 filesystem on /dev/sdb1
filesystem:
fstype: ext4
dev: /dev/vdb1

- name: Create a ext4 filesystem on /dev/sdb1
filesystem:
fstype: ext4
dev: /dev/vdb2

- name: mount /opt
mount:
path: /opt
src: /dev/vdb1
fstype: ext4
state: mounted

- name: mount /data
mount:
path: /data
src: /dev/vdb2
fstype: ext4
state: mounted

Voilà ça vous évitera de chercher. À bientôt.