Loading search data...

Terraform - Libvirt resizing des images

Publié le : 8 mars 2022 | Mis à jour le : 19 septembre 2022

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.


Si vous avez apprécié cet article de blog, vous pouvez m'encourager à produire plus de contenu en m'offrant un café sur   Ko-Fi  . Vous pouvez aussi passer votre prochaine commande sur amazon, sans que cela ne nous coûte plus cher, via   ce lien  . Vous pouvez aussi partager le lien sur twitter ou linkedin via les boutons ci-dessous. Je vous remercie de votre soutien


Mots clés :

devops tutorials infra as code terraform

Autres Articles


Commentaires: