docs: def vm_info(vm_=None, **kwargs):
      '''
      Return detailed information about the vms on this hyper in a
      list of dicts:
  
      :param vm_: name of the domain
      :param connection: libvirt connection URI, overriding defaults
  
          .. versionadded:: 2019.2.0
      :param username: username to connect with, overriding defaults
  
          .. versionadded:: 2019.2.0
      :param password: password to connect with, overriding defaults
  
          .. versionadded:: 2019.2.0
  
      .. code-block:: python
  
          [
              'your-vm': {
                  'cpu': <int>,
                  'maxMem': <int>,
                  'mem': <int>,
                  'state': '<state>',
                  'cputime' <int>
                  },
              ...
              ]
  
      If you pass a VM name in as an argument then it will return info
      for just the named VM, otherwise it will return all VMs.
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' virt.vm_info
      '''
      def _info(dom):
          '''
          Compute the infos of a domain
          '''
          raw = dom.info()
          return {'cpu': raw[3],
                  'cputime': int(raw[4]),
                  'disks': _get_disks(dom),
                  'graphics': _get_graphics(dom),
                  'nics': _get_nics(dom),
                  'uuid': _get_uuid(dom),
                  'loader': _get_loader(dom),
                  'on_crash': _get_on_crash(dom),
                  'on_reboot': _get_on_reboot(dom),
                  'on_poweroff': _get_on_poweroff(dom),
                  'maxMem': int(raw[1]),
                  'mem': int(raw[2]),
                  'state': VIRT_STATE_NAME_MAP.get(raw[0], 'unknown')}
      info = {}
      conn = __get_conn(**kwargs)
      if vm_:
          info[vm_] = _info(_get_domain(conn, vm_))
      else:
          for domain in _get_domain(conn, iterable=True):
              info[domain.name()] = _info(domain)
      conn.close()
      return info