Files
blog/content/posts/commits/2026-04-24-commit-e8778da.md
Betty 262abc8fe7
All checks were successful
Hugo Build & Deploy / build-deploy (push) Successful in 13s
post: commit e8778da in bojemoi
2026-04-24 23:00:23 +02:00

2.5 KiB

title, date, draft, tags, categories, summary, author
title date draft tags categories summary author
[bojemoi] feat(orchestrator): xe-guest-utilities in cloud-init, IP detection, boot disk from VDI 2026-04-24T23:00:22+02:00 false
commit
bojemoi
main
Git Activity
Commit e8778da par Betty dans bojemoi Betty

Commit e8778da

Repository bojemoi
Branch main
Author Betty
Hash e8778da95365c0e582aa011e7b12243abd6cf380

Description

Problem: alpine-meta XenServer template has no disk (CD-only); VMs halted immediately. IP was never detected because XenTools had nothing to run on.

Changes:

  • cloud-init alpine/minimal,webserver,database: add xe-guest-utilities to packages, rc-update add + rc-service start in runcmd so XenStore gets the guest IP after first boot
  • xenserver_client_real.py create_vm: after VM.provision(), check if any disk VBD exists. If not and boot_vdi_uuid is provided, copy the source VDI into the same SR, resize to requested disk size, and attach as primary bootable disk (userdevice=0, type=Disk, bootable=True). Removed the old step-4 pre-provision resize loop (now handled post-provision).
  • config.py: add ALPINE_BOOT_VDI_UUID (df288d22-..., "alpine root" VDI)
  • main.py: pass boot_vdi_uuid=settings.ALPINE_BOOT_VDI_UUID for alpine deploys; poll for guest IP after VM creation; register real IP in host_debug (fallback to UUID if XenTools not ready within timeout)
  • schemas.py: add ip_poll_timeout to VMDeployRequest (default 120s, 0=skip); add ip_address to DeploymentResponse

Tested: test-alpine-01 deployed, IP=192.168.1.247, host_debug id=5.

Co-Authored-By: Claude Sonnet 4.6 noreply@anthropic.com

Files Changed

M	provisioning/cloud-init/alpine/database.yaml
M	provisioning/cloud-init/alpine/minimal.yaml
M	provisioning/cloud-init/alpine/webserver.yaml
M	provisioning/orchestrator/app/config.py
M	provisioning/orchestrator/app/main.py
M	provisioning/orchestrator/app/models/schemas.py
M	provisioning/orchestrator/app/services/xenserver_client_real.py

Diff Summary

 provisioning/cloud-init/alpine/database.yaml       |  4 ++
 provisioning/cloud-init/alpine/minimal.yaml        |  4 ++
 provisioning/cloud-init/alpine/webserver.yaml      |  4 ++
 provisioning/orchestrator/app/config.py            |  3 +
 provisioning/orchestrator/app/main.py              | 32 +++++++--
 provisioning/orchestrator/app/models/schemas.py    |  7 ++
 .../app/services/xenserver_client_real.py          | 75 ++++++++++++++++++----
 7 files changed, 109 insertions(+), 20 deletions(-)