Aller au contenu principal

Libvirt resizing des images

· 3 minutes de lecture
Stéphane ROBERT
Consultant DevOps

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.