On Fri Apr 11, 2025 at 5:06 PM CEST, Daniel Kral wrote: > While at it, factor out the checks to make the control flow a little > easier to read and add information why there is an extra check for the > vm.config.
Both of these patches LGTM. Neat! Side note: Shame that the type annotations in that regard are incomplete, but that's something we have to deal with, unfortunately :s Consider: Reviewed-by: Max Carrara <m.carr...@proxmox.com> > > Signed-off-by: Daniel Kral <d.k...@proxmox.com> > --- > This is not essential, but I thought it wouldn't hurt to let people know > of both types being skipped, but could also get quite noisy if there are > vCLS and/or diskless VMs. > > listvms.py | 30 ++++++++++++++++++------------ > 1 file changed, 18 insertions(+), 12 deletions(-) > > diff --git a/listvms.py b/listvms.py > index bd0adcf..be03759 100755 > --- a/listvms.py > +++ b/listvms.py > @@ -251,6 +251,20 @@ def fetch_and_update_vm_data(vm: vim.VirtualMachine, > data: dict[Any, Any]): > datastores.update({ds.name: ds.url for ds in vm.config.datastoreUrl}) > > > +def is_vcls_agent_vm(vm: vim.VirtualMachine) -> bool: > + # older ESXi installations seem to not expose the vm config > + if vm.config is not None: > + return False > + > + return any(cfg.key == "HDCS.agent" > + and cfg.value.lower() == "true" > + for cfg in vm.config.extraConfig) > + > +def is_diskless_vm(vm: vim.VirtualMachine) -> bool: > + datastore_name, _ = parse_file_path(vm.config.files.vmPathName) > + > + return not datastore_name > + > def main(): > args = parse_args() > > @@ -266,20 +280,12 @@ def main(): > data = {} > for vm in list_vms(connection): > # drop vCLS machines > - vCLS = vm.config is not None and any( > - cfg.key == "HDCS.agent" > - and cfg.value.lower() == "true" > - for cfg in vm.config.extraConfig > - ) > - if vCLS: > + if is_vcls_agent_vm(vm): > + print(f"Skipping vCLS agent VM: {vm.name}", file=sys.stderr) > 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) > + if is_diskless_vm(vm): > + print(f"Skipping diskless VM: {vm.name}", file=sys.stderr) > continue > try: > fetch_and_update_vm_data(vm, data) _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel