Files
local-ci-cd-system/config.example.toml
T
Simone 927d6927fd feat(ip-pool): pre-assign static IPs to build VMs via VMX guestinfo
Eliminates VMware-Tools IP-detect polling (observed: 39–177 s variance on
Linux host B7 benchmark).  When [ip_pool] is configured the orchestrator:

  1. Allocates a slot IP from a JSON-backed pool (fcntl-locked on Linux)
  2. Injects guestinfo.ip-assignment / netmask / gateway into the cloned VMX
     before vmrun start
  3. Skips _wait_for_ip entirely — uses the pre-assigned IP immediately
  4. Releases the slot in _destroy_clone (all paths: success/failure/interrupt)

New modules / changes:
  src/ci_orchestrator/ip_pool.py      IpSlotPool + _file_lock context manager
  src/ci_orchestrator/config.py       IpPoolConfig dataclass; [ip_pool] TOML
  src/ci_orchestrator/commands/job.py _inject_guestinfo_ip helper; pool wiring
  tests/python/test_ip_pool.py        12 unit tests (acquire/release/persist)
  tests/python/test_config.py         ip_pool config parsing tests
  tests/python/test_commands_job.py   pool path + _inject_guestinfo_ip tests
  config.example.toml                 [ip_pool] section (commented example)

Coverage 90.02%; mypy --strict clean.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-24 00:26:59 +02:00

56 lines
2.2 KiB
TOML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ci-orchestrator config example.
#
# Copy to $CI_ROOT/config.toml or set $CI_CONFIG to the file path.
# Environment variables (CI_ROOT, CI_TEMPLATES, CI_BUILD_VMS, CI_ARTIFACTS,
# CI_KEYS, CI_VMRUN_PATH, CI_SSH_KEY_PATH, CI_GUEST_CRED_TARGET) override
# anything set here.
#
# IMPORTANT (TOML rule): top-level keys must appear BEFORE any [section] header.
# Keys placed after a [section] belong to that section, not to the root table.
# Top-level orchestrator settings.
vmrun_path = "C:/Program Files (x86)/VMware/VMware Workstation/vmrun.exe"
ssh_key_path = "F:/CI/keys/ci_linux"
guest_cred_target = "BuildVMGuest"
# --------------------------------------------------------------- Windows host
[paths]
root = "F:/CI"
templates = "F:/CI/Templates"
build_vms = "F:/CI/BuildVMs"
artifacts = "F:/CI/Artifacts"
keys = "F:/CI/keys"
# Phase B (Linux host) — uncomment after migration.
# [paths]
# root = "/var/lib/ci"
# templates = "/var/lib/ci/templates"
# build_vms = "/var/lib/ci/build-vms"
# artifacts = "/var/lib/ci/artifacts"
# keys = "/etc/ci/keys"
# Phase C hook: backend selector. Only "workstation" is implemented in Phase A.
[backend]
type = "workstation"
# Optional: pre-assign static IPs to build VMs via VMX guestinfo injection.
# Eliminates VMware-Tools IP-detect polling (20180 s variance) — the host
# injects guestinfo.ip-assignment into each cloned VMX before vmrun start,
# and the guest boot script applies the static IP immediately.
#
# Prerequisite: install the guest-side startup script from
# template/guest-setup/linux/ci-report-ip.sh (Linux guests)
# template/guest-setup/windows/ci-static-ip.ps1 (Windows guests)
# and re-take the BaseClean / BaseClean-Linux snapshot.
#
# Pool size should equal runner capacity (default 4).
# Addresses must be outside the VMnet8 DHCP range (check
# /etc/vmware/vmnet8/dhcpd/dhcpd.conf — typically .128.254).
#
# [ip_pool]
# addresses = ["192.168.79.201", "192.168.79.202",
# "192.168.79.203", "192.168.79.204"]
# netmask = "255.255.255.0"
# gateway = "192.168.79.2" # VMnet8 gateway; leave empty to skip default route
# lease_file = "/var/lib/ci/ip-pool.json"