def _get_vms_from_inventory(self, inventory_path):
        """
        Searches for VMs by parsing a VMware inventory file.

        :param inventory_path: path to the inventory file

        :returns: list of VMs
        """

        vm_entries = {}
        vmware_vms = []
        log.info('Searching for VMware VMs in inventory file "{}"'.format(inventory_path))
        try:
            pairs = self.parse_vmware_file(inventory_path)
            for key, value in pairs.items():
                if key.startswith("vmlist"):
                    try:
                        vm_entry, variable_name = key.split('.', 1)
                    except ValueError:
                        continue
                    if vm_entry not in vm_entries:
                        vm_entries[vm_entry] = {}
                    vm_entries[vm_entry][variable_name.strip()] = value
        except OSError as e:
            log.warning("Could not read VMware inventory file {}: {}".format(inventory_path, e))

        for vm_settings in vm_entries.values():
            if "displayname" in vm_settings and "config" in vm_settings:
                if os.path.exists(vm_settings["config"]):
                    log.debug('Found VM named "{}" with VMX file "{}"'.format(vm_settings["displayname"], vm_settings["config"]))
                    vmware_vms.append({"vmname": vm_settings["displayname"], "vmx_path": vm_settings["config"]})
        return vmware_vms
def _get_vms_from_inventory ( self , inventory_path ) : vm_entries = { } vmware_vms = [ ] log . info ( 'Searching for VMware VMs in inventory file "{}"' . format ( inventory_path ) ) try : pairs = self . parse_vmware_file ( inventory_path ) for key , value in pairs . items ( ) : if key . startswith ( "vmlist" ) : try : vm_entry , variable_name = key . split ( '.' , 1 ) except ValueError : continue if vm_entry not in vm_entries : vm_entries [ vm_entry ] = { } vm_entries [ vm_entry ] [ variable_name . strip ( ) ] = value except OSError as e : log . warning ( "Could not read VMware inventory file {}: {}" . format ( inventory_path , e ) ) for vm_settings in vm_entries . values ( ) : if "displayname" in vm_settings and "config" in vm_settings : if os . path . exists ( vm_settings [ "config" ] ) : log . debug ( 'Found VM named "{}" with VMX file "{}"' . format ( vm_settings [ "displayname" ] , vm_settings [ "config" ] ) ) vmware_vms . append ( { "vmname" : vm_settings [ "displayname" ] , "vmx_path" : vm_settings [ "config" ] } ) return vmware_vms
Searches for VMs by parsing a VMware inventory file.

        :param inventory_path: path to the inventory file

        :returns: list of VMs