I leave the host name and IP address out of my Windows Server 2025 image. For a VM Service deployment, I configure Cloudbase-Init inside Windows to read VMware GuestInfo through VMware Tools. My VCF Automation 9.1 All Apps blueprint supplies the values when someone requests a VM.

Configure Cloudbase-Init inside Windows

On the existing Windows image, install VMware Tools with rpctool.exe. I used Tools 13.1.0 and the Cloudbase-Init x64 MSI. These installer settings select the Administrator account, disable metadata password injection and run the service as LocalSystem:

msiexec.exe /i .\CloudbaseInitSetup_1_1_8_x64.msi /qn /norestart `
  USERNAME=Administrator USERGROUPS=Administrators INJECTMETADATAPASSWORD=FALSE RUN_SERVICE_AS_LOCAL_SYSTEM=1

Set the cloudbase-init service to Automatic. Both configuration files below are in C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\.

cloudbase-init.conf (Windows service). Set the metadata service to VMware GuestInfo. For this request I need the plugins that set the host name, configure the NIC and process cloud-config user data:

[DEFAULT]
username=Administrator
groups=Administrators
inject_user_password=false
first_logon_behaviour=no
metadata_services=cloudbaseinit.metadata.services.vmwareguestinfoservice.VMwareGuestInfoService
plugins=cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin,cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin,cloudbaseinit.plugins.common.userdata.UserDataPlugin
allow_reboot=true
stop_service_on_exit=false

[vmwareguestinfo]
vmware_rpctool_path=%ProgramFiles%\VMware\VMware Tools\rpctool.exe

cloudbase-init-unattend.conf (Windows specialize pass). Use the same GuestInfo source and Tools path, but run only the host name plugin. The Windows service handles networking on first boot.

[DEFAULT]
metadata_services=cloudbaseinit.metadata.services.vmwareguestinfoservice.VMwareGuestInfoService
plugins=cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin
allow_reboot=false

[vmwareguestinfo]
vmware_rpctool_path=%ProgramFiles%\VMware\VMware Tools\rpctool.exe

Unattend.xml. In the Sysprep answer file used by your image, check the Microsoft-Windows-Deployment component of the specialize pass. Its RunSynchronous list needs this command once. If you already have other commands, use the next free order number.

<RunSynchronousCommand xmlns:wcm="http://schemas.microsoft.com/WMIConfig/2002/State" wcm:action="add">
  <Order>1</Order>
  <Path>cmd.exe /c ""C:\Program Files\Cloudbase Solutions\Cloudbase-Init\Python\Scripts\cloudbase-init.exe" --config-file "C:\Program Files\Cloudbase Solutions\Cloudbase-Init\conf\cloudbase-init-unattend.conf" &amp;&amp; exit 1 || exit 2"</Path>
  <WillReboot>OnRequest</WillReboot>
</RunSynchronousCommand>

Pass the requested address through GuestInfo

In the blueprint’s CCI.Supervisor.Resource for the VM, these fields live under properties.manifest.spec. I set imageName to my generalized Windows image and used network to map the catalog inputs below. VM Operator writes the host name and NIC settings to guestinfo.metadata, where Cloudbase-Init matches the NIC by MAC address.

network:
  hostName: ${input.vmName}
  interfaces:
    - name: eth0
      network:
        apiVersion: crd.nsx.vmware.com/v1alpha1
        kind: Subnet
        name: ${input.subnetName}
      macAddr: ${input.macAddress}
      addresses:
        - ${input.ipAddress}/${input.prefixLength}
      gateway4: ${input.gateway}
      nameservers: ${input.dnsServers}

To send cloud-config to Windows, I selected cloudInit under spec.bootstrap. This excerpt tells VM Operator where to read the Administrator password: the encrypted catalog input supplies the password key of a per-VM Secret. The resulting cloud-config travels in guestinfo.userdata, which UserDataPlugin processes separately from the network metadata.

bootstrap:
  cloudInit:
    cloudConfig:
      users:
        - name: Administrator
          passwd:
            name: ${input.vmName}-admin
            key: password

For ws25-cbi-01 I requested 172.30.10.20/27 with MAC 00:50:56:3c:0a:14. Here is the decoded network metadata for that request:

Decoded GuestInfo for ws25-cbi-01: eth0 matches the requested MAC, with 172.30.10.20/27, gateway 172.30.10.1 and DNS 10.1.1.1.

I set wait.fields on the VCF Automation resource to wait for status.network.primaryIP4 to match the requested IP. VMware Tools also reported 172.30.10.20/27 on the Windows NIC with DHCP off. I verified the network settings; I did not test an Administrator login.