listvms: exclude VMs without datastore_name from manifest.json

On newer ESXI-8x versions, the diskless vCLS machines in an
ESXI-cluster are not stored on a datastore anymore.

Instead, they are placed under `/var/run/crx` on the ESXI-hosts'
filesystem. This can lead to issues with the ESXI-storage not being
activated on the PVE-side [0].

This commit prevents these machines from being included in `manifest.json`.

It also excludes VMs without a datastore string in its configuration.

[0] https://forum.proxmox.com/threads/new-import-wizard-available-for-migrating-vmware-esxi-based-virtual-machines.144023/post-759288
This commit is contained in:
Daniel Herzig 2025-04-08 15:24:30 +02:00 committed by Wolfgang Bumiller
parent fd97b5d38a
commit d793cd1834

View File

@ -265,6 +265,20 @@ def main():
with connect_to_esxi_host(connection_args) as connection:
data = {}
for vm in list_vms(connection):
# drop vCLS machines
vCLS = any(cfg.key == "HDCS.agent"
and cfg.value.lower() == "true"
for cfg in vm.config.extraConfig)
if vCLS:
continue
# drop vms with empty datastore
datastore_name, relative_vmx_path = parse_file_path(
vm.config.files.vmPathName
)
if not datastore_name:
print(f"Skipping VM (no datastore value): {vm.name}",
file=sys.stderr)
continue
try:
fetch_and_update_vm_data(vm, data)
except Exception as err: