Dans cet article, je m’appuie sur mon lab HPE Morpheus Enterprise Community Edition pour vous proposer un pas-à-pas concret autour du provisioning de machines virtuelles sur HVM (HPE VM Essentials).
L’objectif est de construire une image Ubuntu 24.04 de référence, puis de l’utiliser dans Morpheus pour déployer de nouvelles VM de manière simple et reproductible grâce à Cloud-Init et QEMU Guest Agent.
Nous partirons d’une VM Ubuntu classique pour créer une image réutilisable, prête à être intégrée dans le catalogue de provisioning Morpheus.
Lors de la création d’une instance, l’administrateur choisira les ressources, le réseau et renseignera une adresse IP statique. Morpheus transmettra ensuite les paramètres nécessaires à Cloud-Init afin de personnaliser automatiquement la VM : hostname, configuration réseau, gateway, DNS et accès utilisateur/SSH.
Dans mon environnement de lab, j’utilise :
VM de préparation : tpl-ubuntu-001 Virtual Image : tpl-ubuntu-2404-hvm VM de validation : hvm-ubuntu-001
L’architecture logique est la suivante :

L’objectif final est d’obtenir une VM entièrement provisionnée sans correction manuelle après son démarrage.
1. Les prérequis
Pour cette mise en œuvre, nous avons besoin :
- d’une plateforme HPE Morpheus Enterprise Community Edition opérationnelle ;
- d’un cluster HVM ;
- d’un datastore accessible par le cluster ;
- d’un réseau déclaré dans Morpheus ;
- d’un partage NFS destiné au stockage des images ;
- d’une VM Ubuntu 24.04 qui servira à fabriquer l’image ;
- de Cloud-Init ;
- de QEMU Guest Agent.
Dans mon cas, le partage NFS est un prérequis de l’architecture, car je l’utilise pour centraliser le stockage des Virtual Images.
2. Préparer le stockage NFS pour les images
Avant de créer notre image Ubuntu, nous allons commencer par le stockage qui accueillera les images.
Dans Morpheus, rendez-vous dans :
Infrastructure → Storage → File Shares
Puis :
+ Add File Share
Sélectionnez le type NFS et renseignez votre serveur.
Par exemple :
Name : FS-NFS-MORPHEUS-IMG-01 Host : <IP_SERVEUR_NFS> Export : /volume1/HVM NFS Version : 3
3. Définir le stockage des Virtual Images
Une fois le File Share créé, il peut être utilisé comme stockage des images Morpheus.
Rendez-vous dans :
Administration → Settings → Provisioning
Recherchez le paramètre :
Default Virtual Image Store
Sélectionnez votre File Share NFS :
FS-NFS-MORPHEUS-IMG-01
On obtient ainsi :
Morpheus
│
▼
Virtual Image Store
│
▼
Partage NFS centralisé
│
▼
/volume1/HVM
Cela évite notamment de stocker les images sur le filesystem local de l’appliance Morpheus.
4. Préparer le Network Morpheus
Avant de travailler sur Cloud-Init, il est également important de préparer correctement le réseau.
Dans Morpheus :
Infrastructure → Network → Networks
Ouvrez le réseau destiné aux VM puis Edit.
Dans notre exemple :
Name : NET-PROD-SRV CIDR : 10.10.20.0/24 Gateway : 10.10.20.1 Primary DNS : 10.10.10.10 Secondary DNS : 10.10.10.11
Ces adresses sont uniquement des exemples.
Les informations importantes sont :
CIDR Gateway Primary DNS Secondary DNS
Dans notre configuration, nous n’utilisons pas d’IP Pool.
L’adresse IP de la VM sera saisie manuellement lors de Add Instance.
Le fonctionnement sera donc :
Add Instance
│
├── Network
│
└── Static IP
│
▼
Morpheus
│
Network configuration
├── CIDR
├── Gateway
└── DNS
│
▼
Cloud-Init
│
▼
Ubuntu
C’est un point à ne pas négliger : si Gateway ou DNS ne sont pas renseignés dans le Network Morpheus, Cloud-Init ne pourra pas les intégrer correctement à la configuration de la VM.
5. Créer la VM de préparation
Nous allons maintenant créer une VM Ubuntu 24.04 classique sur HVM.
Dans mon environnement, je l’ai appelée :
tpl-ubuntu-001
Cette VM ne sera pas utilisée en production. Elle sert uniquement à construire notre image de référence.
La séquence est :

6. Mettre Ubuntu à jour
Sur tpl-ubuntu-001 :
sudo apt update sudo apt upgrade -y
Puis :
sudo apt autoremove -y sudo apt clean
Je préfère réaliser cette mise à jour avant la capture afin de partir sur une image aussi propre que possible.
7. Installer Cloud-Init
Installez Cloud-Init :
sudo apt install -y cloud-init
Vérifiez :
cloud-init --version
Puis :
systemctl status cloud-init
Cloud-Init repose notamment sur les composants :
cloud-init-local cloud-init cloud-config cloud-final
8. Configurer la datasource NoCloud
Pour HVM, nous allons utiliser la datasource NoCloud.
Regardez d’abord la configuration :
ls -la /etc/cloud/cloud.cfg.d/
Puis :
grep -R "datasource_list" /etc/cloud/cloud.cfg.d/
Configurez si nécessaire :
sudo vi /etc/cloud/cloud.cfg.d/90_dpkg.cfg
avec :
datasource_list: [ NoCloud, None ]
Vérifiez :
grep -R "datasource_list" /etc/cloud/cloud.cfg.d/
Nous voulons retrouver :
datasource_list: [ NoCloud, None ]
Lors du provisioning, Cloud-Init pourra ainsi exploiter les données fournies à la VM pour appliquer la personnalisation du système.
9. Installer QEMU Guest Agent
Il faut également installer QEMU Guest Agent dans notre image Ubuntu HVM.
sudo apt install -y qemu-guest-agent
Sur Ubuntu 24.04, ne soyez pas surpris si :
sudo systemctl enable qemu-guest-agent
indique que l’unité est static.
Il n’est pas nécessaire de forcer son activation de cette manière.
Vérifiez plutôt :
systemctl status qemu-guest-agent --no-pager
Nous voulons obtenir :
Active: active (running)
10. Vérifier le canal VirtIO
Le QEMU Guest Agent communique avec l’hyperviseur à travers un canal VirtIO.
Vérifiez :
ls -la /dev/virtio-ports/
Vous devez retrouver :
org.qemu.guest_agent.0
Par exemple :
org.qemu.guest_agent.0 -> ../vport2p1
Le fonctionnement est donc :
HVM / QEMU
│
VirtIO Serial
│
▼
/dev/virtio-ports/org.qemu.guest_agent.0
│
▼
qemu-guest-agent
│
▼
Ubuntu
Cette vérification est particulièrement utile si Morpheus affiche :
Guest Ready Status Failed.. Is QEMU Guest Tools Installed?
11. Vérifier Cloud-Init
Avant de généraliser la machine :
cloud-init status --long
Nous voulons :
status: done
En cas de problème, les deux fichiers à consulter en priorité sont :
sudo less /var/log/cloud-init.log
et :
sudo less /var/log/cloud-init-output.log
12. Vérifier les paramètres Cloud-Init de Morpheus
Morpheus possède également des paramètres Cloud-Init globaux.
Rendez-vous dans :
Administration → Settings → Provisioning
Puis recherchez la section concernant Cloud-Init.
Selon votre configuration, vous pouvez notamment y définir les paramètres utilisés pour la création des utilisateurs et l’accès aux VM.
Pour une infrastructure industrialisée, je privilégie un compte d’administration dédié et une authentification par clé SSH, plutôt qu’un mot de passe intégré à l’image.
13. Généraliser tpl-ubuntu-001
À ce stade, tpl-ubuntu-001 fonctionne, mais elle contient encore des éléments propres à cette machine.
Nous devons les supprimer avant de fabriquer notre image.
Nettoyer Cloud-Init
sudo cloud-init clean --logs
Le prochain clone pourra ainsi exécuter une nouvelle initialisation Cloud-Init.
Nettoyer machine-id
sudo truncate -s 0 /etc/machine-id
Puis :
sudo rm -f /var/lib/dbus/machine-id
Chaque nouvelle VM générera sa propre identité.
Supprimer les clés SSH hôte
sudo rm -f /etc/ssh/ssh_host_*
Chaque VM créée depuis l’image générera ainsi ses propres clés SSH hôte.
On évite donc que :
hvm-ubuntu-001 hvm-ubuntu-002 hvm-ubuntu-003
partagent toutes la même identité SSH.
14. Nettoyer Netplan
C’est particulièrement important puisque nous utilisons des IP statiques différentes pour chaque VM.
Vérifiez :
ls -la /etc/netplan/
Puis :
cat /etc/netplan/*.yaml
L’image ne doit pas conserver l’adresse IP utilisée par tpl-ubuntu-001.
Si le fichier généré pour cette VM est :
/etc/netplan/50-cloud-init.yaml
et qu’il contient sa configuration réseau spécifique, supprimez-le :
sudo rm -f /etc/netplan/50-cloud-init.yaml
Le principe est :
tpl-ubuntu-001
10.10.20.100
│
│ nettoyage
▼
tpl-ubuntu-2404-hvm
Aucune IP propre au template
│
│ nouveau provisioning
▼
hvm-ubuntu-001
10.10.20.150
Les adresses ci-dessus ne sont que des exemples.
15. Dernières vérifications
Avant d’arrêter tpl-ubuntu-001, vérifiez les packages :
dpkg -l | grep -E 'cloud-init|qemu-guest-agent'
Vérifiez la datasource :
grep -R "datasource_list" /etc/cloud/cloud.cfg.d/
Vous devez retrouver :
datasource_list: [ NoCloud, None ]
Et vérifiez une dernière fois Netplan :
ls -la /etc/netplan/
Aucune adresse IP propre à tpl-ubuntu-001 ne doit rester dans l’image.
16. Arrêter le template
Arrêtez maintenant la VM :
sudo shutdown -h now
À partir de ce moment, ne redémarrez plus tpl-ubuntu-001 avant sa capture.
Un redémarrage pourrait recréer certains éléments que nous venons volontairement de nettoyer.
17. Créer l’image tpl-ubuntu-2404-hvm
Dans Morpheus, la gestion des images se trouve dans :
Library → Virtual Images
À partir de tpl-ubuntu-001, créez/importez votre image de référence.
Dans mon cas, elle s’appelle :
tpl-ubuntu-2404-hvm
La nomenclature permet immédiatement d’identifier :
tpl │ ├── ubuntu │ ├── 2404 │ └── hvm
On pourra ensuite facilement avoir :
tpl-ubuntu-2404-hvm tpl-ubuntu-2604-hvm tpl-rocky-10-hvm tpl-debian-13-hvm
18. Configurer la Virtual Image
Dans :
Library → Virtual Images → tpl-ubuntu-2404-hvm
puis Edit.
Vérifiez les propriétés de l’image.
En particulier :
Operating System Ubuntu 24.04 Cloud Init Enabled? YES VirtIO Drivers Loaded? YES
L’image étant destinée à HVM/KVM, les pilotes VirtIO doivent être disponibles.
Cloud-Init User Data
Vous trouverez également :
Cloud-Init User Data
Pour cette première image :
laissez ce champ vide.
Nous n’avons pas besoin d’ajouter de runcmd ou de configuration Cloud-Init personnalisée.
Notre objectif est d’abord d’obtenir une image générique et fiable.
19. VM Tools / Guest Tools
Selon votre version de Morpheus, vous pouvez également rencontrer un paramètre relatif aux VM Tools dans les propriétés de l’image.
Dans notre cas, le point essentiel est que qemu-guest-agent soit installé dans Ubuntu et que le canal :
/dev/virtio-ports/org.qemu.guest_agent.0
soit disponible.
Cela permet à HVM/Morpheus de récupérer correctement l’état du guest.
20. Vérifier le stockage de l’image
Puisque nous avons configuré le partage NFS comme stockage des Virtual Images, vérifiez que tpl-ubuntu-2404-hvm est correctement stockée et disponible depuis ce Storage Provider.
Notre architecture est maintenant :
Morpheus
│
▼
Library / Virtual Images
│
▼
tpl-ubuntu-2404-hvm
│
▼
NFS Image Store
│
▼
Cluster HVM
Le stockage NFS constitue donc bien un prérequis de cette implémentation.
21. Préparer les Service Plans
Le Service Plan permet de proposer des tailles de VM standardisées.
Je préfère proposer quelques tailles simples plutôt que de laisser les utilisateurs choisir n’importe quelle combinaison CPU/RAM.
Par exemple :
| Plan | vCPU | RAM |
|---|---|---|
PLN-XS | 2 | 4 Go |
PLN-S | 2 | 8 Go |
PLN-M | 4 | 16 Go |
PLN-L | 8 | 32 Go |
PLN-XL | 16 | 64 Go |
Cela devient également très pratique lorsqu’on utilise les quotas Morpheus au niveau des tenants.
22. Déployer hvm-ubuntu-001
Nous pouvons maintenant faire le véritable test de notre image.
Dans Morpheus :
Provisioning → Instances
Cliquez sur :
+ Add
Sélectionnez l’Instance Type HVM proposé par votre environnement.
Dans l’assistant, sélectionnez votre contexte :
Group : <GROUP> Cloud : <CLOUD-HVM> Environment : <ENVIRONMENT> Name hvm-ubuntu-001
23. Sélectionner l’image
Dans la partie configuration de l’instance, sélectionnez :
Virtual Image tpl-ubuntu-2404-hvm
Puis le Service Plan souhaité.
Par exemple :
Plan PLN-S CPU 2 vCPU RAM 8 Go
Configurez également la taille du disque si nécessaire.
24. Sélectionner le réseau
Dans la section Networks, sélectionnez le Network Morpheus précédemment configuré :
NET-PROD-SRV
Morpheus connaît déjà :
CIDR Gateway Primary DNS Secondary DNS
25. Renseigner l’adresse IP statique
Pour cette implémentation, l’adresse est saisie directement lors du Add Instance.
Par exemple :
Network NET-PROD-SRV IP Address 10.10.20.150
Encore une fois, cette adresse est fictive.
Il n’y a volontairement aucun IP Pool dans notre architecture.
L’administrateur fournit :
hvm-ubuntu-001
│
├── Plan
├── Network
└── Static IP
│
▼
Morpheus
│
├── IP saisie
├── CIDR
├── Gateway
└── DNS
│
▼
Cloud-Init
│
▼
Ubuntu
26. Lancer le provisioning
Cliquez sur :
Provision
Morpheus utilise alors tpl-ubuntu-2404-hvm pour construire :
hvm-ubuntu-001
Cloud-Init reçoit les informations nécessaires à la personnalisation de la VM.
Pour le premier déploiement de validation, je recommande de ne rien modifier manuellement dans Ubuntu.
Le but est précisément de vérifier que le provisioning est entièrement fonctionnel.
27. Vérifier Cloud-Init sur hvm-ubuntu-001
Une fois la VM démarrée :
cloud-init status --long
Résultat attendu :
status: done
28. Vérifier le hostname
hostnamectl
Vous devez retrouver :
hvm-ubuntu-001
29. Vérifier l’adresse IP
ip addr
L’adresse doit correspondre exactement à celle saisie dans Add Instance.
30. Vérifier la gateway
ip route
Vous devez retrouver une route par défaut :
default via <GATEWAY>
Cette gateway doit correspondre à celle définie dans :
Infrastructure → Network → Networks → NET-PROD-SRV
31. Vérifier les DNS
resolvectl status
Vous devez retrouver les DNS configurés dans le Network Morpheus.
Par exemple :
DNS Servers: 10.10.10.10 10.10.10.11
Ces valeurs sont fictives.
32. Vérifier QEMU Guest Agent
Sur hvm-ubuntu-001 :
systemctl status qemu-guest-agent --no-pager
Résultat attendu :
Active: active (running)
Puis :
ls -la /dev/virtio-ports/
Nous devons retrouver :
org.qemu.guest_agent.0
33. Vérifier le provisioning dans Morpheus
Retournez dans :
Provisioning → Instances → hvm-ubuntu-001
La VM doit être :
Running
Consultez également :
Provisioning → Instances → hvm-ubuntu-001 → History
Le provisioning doit s’être terminé correctement.
Le résultat attendu est donc :
Morpheus │ ▼ hvm-ubuntu-001 │ ├── Running ├── Cloud-Init OK ├── Network OK ├── QEMU Guest Agent OK └── Guest Ready OK
34. Checklist de validation
Voici la checklist que je conserve pour valider une nouvelle image :
| Élément | Commande / emplacement | Résultat attendu |
|---|---|---|
| Cloud-Init | cloud-init status --long | done |
| Hostname | hostnamectl | hvm-ubuntu-001 |
| Adresse IP | ip addr | IP saisie dans Morpheus |
| Gateway | ip route | Gateway du Network |
| DNS | resolvectl status | DNS du Network |
| QEMU Agent | systemctl status qemu-guest-agent | active (running) |
| VirtIO | /dev/virtio-ports/ | org.qemu.guest_agent.0 |
| Morpheus | Instance | Running |
| Provisioning | History | Success |
| Guest Ready | Instance | OK |
Si tous ces contrôles sont bons, tpl-ubuntu-2404-hvm peut être considérée comme une image de référence validée.
35. Diagnostic Cloud-Init
En cas de problème :
cloud-init status --long
Puis :
sudo less /var/log/cloud-init.log
et :
sudo less /var/log/cloud-init-output.log
Pour examiner les informations connues de Cloud-Init :
sudo cloud-init query --all
36. Diagnostic réseau
Si la VM récupère son IP mais pas sa gateway ou ses DNS :
ip addr ip route resolvectl status
Puis :
cat /etc/netplan/*.yaml
Avant de modifier Ubuntu, vérifiez surtout dans Morpheus :
Infrastructure → Network → Networks → NET-PROD-SRV → Edit
et contrôlez :
CIDR Gateway Primary DNS Secondary DNS
Cloud-Init ne pourra transmettre que les informations correctement définies dans Morpheus.
37. Diagnostic QEMU Guest Agent
Si Morpheus indique :
Guest Ready Status Failed.. Is QEMU Guest Tools Installed?
vérifiez :
systemctl status qemu-guest-agent --no-pager
Puis :
ls -la /dev/virtio-ports/
Enfin :
journalctl -u qemu-guest-agent --no-pager -n 50
Nous voulons :
qemu-guest-agent └── active (running) /dev/virtio-ports/ └── org.qemu.guest_agent.0
Si l’agent est installé mais que org.qemu.guest_agent.0 n’existe pas, le diagnostic doit alors se poursuivre côté HVM/présentation du canal VirtIO.
38. Diagnostic du stockage NFS
Si Morpheus rencontre un problème lors de l’utilisation d’une image, vérifiez également le stockage NFS.
Depuis l’appliance :
showmount -e <IP_SERVEUR_NFS>
Puis, si nécessaire :
sudo mount -v -t nfs \ -o vers=3 \ <IP_SERVEUR_NFS>:/volume1/HVM \ /mnt/test-hvm
Testez ensuite l’écriture :
touch /mnt/test-hvm/test-morpheus rm /mnt/test-hvm/test-morpheus
Un problème de stockage d’image peut être totalement indépendant de Cloud-Init. Il faut donc bien séparer :
Stockage NFS
│
└── disponibilité de l’image
Cloud-Init
│
└── personnalisation de la VM
QEMU Guest Agent
│
└── communication HVM ↔ Guest
Cette séparation facilite énormément le diagnostic.
Architecture finale
Au terme de cette configuration, nous obtenons :

Conclusion
Avec cette configuration, nous disposons maintenant d’une chaîne de provisioning Ubuntu reproductible sur HPE Morpheus Enterprise Community Edition + HVM.
La VM tpl-ubuntu-001 sert uniquement à construire et maintenir notre image de référence :
tpl-ubuntu-001
│
▼
tpl-ubuntu-2404-hvm
│
▼
Morpheus / HVM
│
▼
hvm-ubuntu-001
L’image reste volontairement générique : aucune IP, gateway, DNS ou identité machine propre à la VM de préparation n’est conservée.
Au moment du Add Instance, l’administrateur fournit l’adresse IP statique et choisit le Network. Morpheus connaît le CIDR, la gateway et les DNS et transmet ces informations à Ubuntu via Cloud-Init.
Enfin, QEMU Guest Agent permet à HVM de communiquer correctement avec le système invité et d’obtenir le Guest Ready Status.
Cette première image validée fournit une bonne base pour construire progressivement une bibliothèque standardisée :
tpl-ubuntu-2404-hvm tpl-ubuntu-2604-hvm tpl-rocky-10-hvm tpl-debian-13-hvm
On pourra ensuite aller plus loin avec les Service Plans, Instance Types, permissions par tenant, quotas, workflows de post-provisioning et cycle de maintenance/versioning des images.
Sources et documentation HPE
- Préparation d’une image Linux Ubuntu 24.04 pour un cluster HVM — C’est probablement la source la plus importante pour ton article : HPE y décrit spécifiquement la préparation d’Ubuntu 24.04 pour HVM, l’import dans
Library → Virtual Imageset le provisioning.
HPE — Configuring Linux images for use with HVM Clusters - Provisioning d’une VM sur HVM — Explique le workflow
Provisioning → Instances, le choix du Plan, du cluster HVM, du stockage, du réseau et de l’image.
HPE — Provisioning a Workload on HVM - Création détaillée d’une Instance HVM — Très utile pour les menus de ton tuto :
Provisioning → Instances → + ADD → HVM, puis Group, Cloud, Layout, Plan, Resource Pool, Volumes, Network, Image et Host.
HPE — Create Instance - Fonctionnement interne du provisioning — Explique les différentes étapes : recherche de la Virtual Image, clone, redimensionnement, Cloud-Init, ISO de metadata, attente du réseau et finalisation. C’est également cette page qui confirme que les informations Network, Machine et User peuvent être fournies via l’ISO Cloud-Init.
HPE — VM Provision Steps - Configuration des Virtual Images — Documente notamment
Cloud Init Enabled?,Storage Provider,Cloud-Init User Data, les credentials et les paramètres des images. Il confirme aussi que des Storage Providers supplémentaires peuvent être configurés dansInfrastructure → Storage.
HPE — Virtual Images configuration - Virtual Images et Cloud-Init — Autre page HPE utile pour comprendre l’intégration Cloud-Init et les paramètres globaux configurables dans
Administration → Settings → Provisioning.
HPE — Virtual Images / Blueprints


