[FIX] qemu: user-data invalide (YAML) cassait cloud-init -> VM figée

La ligne runcmd Fedora commençait par « - [ -f … ] » : en YAML, «  - [ »
démarre une SÉQUENCE EN FLUX, donc « [ -f … ] && sed … » rendait tout le
user-data invalide. cloud-init rejetait alors la config ENTIÈRE : aucun
utilisateur créé, pas de SSH, login console erplibre/erplibre impossible,
VM « en attente de démarrage ».

- « test -f … && … » au lieu de « [ -f … ] && … » (ne démarre pas de
  séquence YAML).
- timeout 300 sur l'installation de qemu-guest-agent : un miroir lent ne
  bloque plus cloud-init.
- Validé : le user-data se parse en YAML (tous les runcmd sont des chaînes),
  avec et sans mot de passe.

Les VM déjà déployées avec le mauvais seed doivent être redéployées ; les
prochaines repartent correctement.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Mathieu Benoit 2026-07-29 12:23:05 +00:00
parent 8278c38f46
commit e2b940a3af

View file

@ -974,10 +974,12 @@ def build_cloud_config(
# disponible tout de suite, sans attendre le réseau). Tout est
# « || true » : si l'installation échoue (réseau lent/absent), le boot
# n'est pas bloqué. La plupart des images cloud l'incluent déjà.
" - (command -v apt-get >/dev/null && apt-get install -y"
" qemu-guest-agent) || (command -v dnf >/dev/null && dnf install -y"
" qemu-guest-agent) || (command -v pacman >/dev/null && pacman -S"
" --noconfirm qemu-guest-agent) || true",
# timeout 300 : un miroir lent/absent ne doit JAMAIS bloquer cloud-init
# (sinon la VM reste « en attente de démarrage »). Non fatal (|| true).
" - (command -v apt-get >/dev/null && timeout 300 apt-get install -y"
" qemu-guest-agent) || (command -v dnf >/dev/null && timeout 300 dnf"
" install -y qemu-guest-agent) || (command -v pacman >/dev/null &&"
" timeout 300 pacman -S --noconfirm qemu-guest-agent) || true",
# Autorise guest-exec (bloqué par défaut sur certaines distros).
# On VIDE la liste de blocage (block-rpcs/blacklist) plutôt que
# d'utiliser allow-rpcs (liste BLANCHE : casserait les autres RPC).
@ -986,7 +988,10 @@ def build_cloud_config(
" - mkdir -p /etc/qemu && printf '[general]\\nblock-rpcs=\\n"
"blacklist=\\n' > /etc/qemu/qemu-ga.conf || true",
# Fedora/RHEL bloquent guest-exec via /etc/sysconfig/qemu-ga.
" - [ -f /etc/sysconfig/qemu-ga ] && sed -i"
# « test -f » et NON « [ -f … ] » : en YAML, « - [ » démarre une
# séquence en flux -> user-data invalide -> cloud-init rejeté (aucun
# utilisateur créé, VM figée, login console impossible).
" - test -f /etc/sysconfig/qemu-ga && sed -i"
" 's/^BLACKLIST_RPC=.*/BLACKLIST_RPC=/'"
" /etc/sysconfig/qemu-ga || true",
" - systemctl enable qemu-guest-agent 2>/dev/null"