Aller au contenu principal

Libvirt resizing des images

· 3 minutes de lecture
Stéphane ROBERT
Consultant DevOps

logo terraform

Maintenant que nous savons comment lancer le provisioning avec ansible automatiquement, il manque juste le resizing de l'image de type cloud en automatique. En effet, les images fournies sont souvent trop petites. Le plugin libvirt de Terraform intègre cette fonctionnalité, qui évite de le faire manuellement.

Ajout d'un volume libvirt de base

Lorsqu'on déclare un volume à partir d'une image téléchargée, on ne peut modifier sa taille.

Pour le faire automatiquement, il suffit de créer un volume de base avec l'image téléchargée et de le dériver avec un autre volume en spécifiant la taille voulue. Je reprends l'exemple du billet sur le provisioning auto

Ce qui donne :

resource "libvirt_volume" "base" {
name = "ubuntu-base"
source = "https://cloud-images.ubuntu.com/minimal/daily/impish/20220209/impish-minimal-cloudimg-amd64.img"
pool = "devbox"
format = "qcow2"
}

resource "libvirt_volume" "test-os_image" {
name = "test-os_image"
base_volume_id = libvirt_volume.base.id
pool = "devbox"
size = 10737418240
}

Dans la seconde déclaration de volume, nous indiquons que celui-ci dérive du volume base avec base_volume_id. La taille demandée est de 10Go.

Dans la déclaration de la VM nous indiquons bien que nous utilisons cette seconde image :

// Create the machine
resource "libvirt_domain" "domain-alma" {
# domain name in libvirt, not hostname
name = var.hostname
memory = var.memoryMB
vcpu = var.cpu
autostart = true
qemu_agent = true
timeouts {
create = "20m"
// delete = "5m"
}


disk {
volume_id = libvirt_volume.test-os_image.id
}
network_interface {
network_name = "bridged-network"
mac = "52:54:00:36:14:e5"
wait_for_lease = true
}

Lançons le provisionnement et vérifions :

terraform apply -auto-approve

libvirt_domain.domain-alma: Creation complete after 6m4s [id=e73ad5f0-0b9e-433a-a2ad-1e516a81eece]

Apply complete! Resources: 4 added, 0 changed, 0 destroyed.

Outputs:

ips = [
tolist([
{
"addresses" = tolist([
"192.168.1.46",
])
"bridge" = "br0"
"hostname" = ""
"mac" = "52:54:00:36:14:E5"
"macvtap" = ""
"network_id" = ""
"network_name" = ""
"passthrough" = ""
"vepa" = ""
"wait_for_lease" = true
},
]),
]

ssh admuser@192.168.1.46

Welcome to Ubuntu 21.10 (GNU/Linux 5.13.0-1011-kvm x86_64)

* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
*** System restart required ***
Last login: Tue Mar 8 12:08:43 2022 from 192.168.1.11

admuser@test:~$ df -h
Sys. de fichiers Taille Utilisé Dispo Uti% Monté sur
/dev/root 9,6G 1,8G 7,8G 19% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 197M 456K 197M 1% /run
tmpfs 5,0M 0 5,0M 0% /run/lock
/dev/vda15 105M 5,2M 100M 5% /boot/efi
tmpfs 99M 4,0K 99M 1% /run/user/1000
admuser@test:~$

Nous avons bien une VM avec un fs / taillé à 10 Go.