Création d'une image OpenStack personnalisée sur OPCP
Objectif
Ce guide explique comment construire des images disque personnalisées pour OpenStack Ironic (bare metal) et Nova (machine virtuelle) en utilisant diskimage-builder.
C’est un bon point de départ pour comprendre le fonctionnement de diskimage-builder (DiB) avec un exemple pratique. Nous allons construire une image Debian 13 personnalisée à partir de l’image parent, puis la personnaliser avec Ansible.
À la fin, nous générerons une image disque complète debian13.qcow2 (incluant le noyau et l’initramfs), prête à être importée dans OpenStack Glance.
Attentes pour OpenStack Ironic/Nova
Format de l’image
- qcow2 (recommandé) : image disque compressée
- raw : image disque non compressée
L’image doit être une image disque complète qui inclut :
- Le secteur de boot / la partition système EFI
- La ou les partitions du système d’exploitation
- Le noyau et l’initramfs présents sur le disque
Partitionnement et exigences de démarrage
Pour un démarrage BIOS :
- Table de partition GPT ou MBR
- Partition de démarrage BIOS (1–2 Mo, type
ef02pour GPT) - Partition racine avec un chargeur de démarrage installé (GRUB2)
- Le chargeur de démarrage doit être installé dans le MBR / secteur de boot
Pour un démarrage EFI :
- Table de partition GPT obligatoire
- Partition système EFI (ESP) : 512 Mo, FAT32, montée sur
/boot/efi - Partition racine avec GRUB2 en mode EFI
- Entrées de démarrage EFI correctement configurées
Pour Ironic en bare metal (configuration recommandée) :
Schéma de partition standard (simple) :
Pré-requis
Pré-requis système :
- Droits root
- Au moins 10 Go d’espace disponible
- Quelques paquets nécessaires :
Installer diskimage-builder (DiB) dans un virtualenv :
Comprendre les éléments diskimage-builder
Les elements sont des composants modulaires qui permettent de personnaliser votre image.
| Dossier | Objectif |
|---|---|
environment.d/ | Variables d’environnement |
extra-data.d/ | Fichiers ajoutés avant l’installation |
pre-install.d/ | Scripts de pré-installation |
post-install.d/ | Scripts de post-installation |
finalise.d/ | Personnalisation finale |
cleanup.d/ | Tâches de nettoyage |
package-installs.yaml | Déclarations de paquets |
block-device-default.yaml | Partitionnement du disque |
Les scripts dans ces répertoires sont exécutés dans l’ordre numérique / alphabétique.
Créer un élément de personnalisation avec Ansible
Créez un element qui utilise Ansible pour la personnalisation :
Structure de répertoires :
Scripts post-install :
elements/os-custom/post-install.d/00-install-ansible :
elements/os-custom/post-install.d/01-apply-ansible :
elements/os-custom/post-install.d/02-remove-ansible :
Rendre les scripts exécutables :
Configuration Ansible :
elements/os-custom/extra-data.d/ansible/main.yml:
elements/os-custom/extra-data.d/ansible/inventory/hosts :
Dans cet exemple, nous utilisons cloud-init avec le moteur netplan pour configurer systemd-networkd. Il s’agit d’un exemple fonctionnel de personnalisation de la configuration réseau ; adaptez-le librement à vos besoins.
Note : lorsque Ironic configure le bare metal au premier démarrage, il fournit un manifeste network_metadata (configdrive) que cloud-init peut interpréter pour configurer automatiquement le réseau (IP statique, LACP, etc.).
elements/os-custom/extra-data.d/ansible/roles/customize/tasks/main.yml :
elements/os-custom/extra-data.d/ansible/roles/customize/files/50-netplan.cfg :
Paquets additionnels :
elements/os-custom/package-installs.yaml:
Dépendances de l’élément :
elements/os-custom/element-deps :
debian
Construire l’image
Créer un fichier d’environnement debian13.env :
Construire l’image :
Vous devriez obtenir un fichier debian13.qcow2.
Si vous voulez des fichiers SBOM pour les variables d'environnement et les paquets :
Tester l’image
Une façon rapide de tester l’image générée est d’utiliser qemu pour lancer une machine virtuelle à partir de l’image qcow2, puis un client VNC pour se connecter à la console. On peut tester aussi bien le démarrage EFI que BIOS.
Démarrage BIOS
Utilisez n’importe quel client VNC pour vous connecter sur le port :5200.
Démarrage EFI
Utilisez un client VNC pour vous connecter sur le port :5200.
Importer l’image dans OpenStack
C’est terminé ! Vous pouvez maintenant créer une instance bare metal ou une machine virtuelle avec cette nouvelle image.