docs: def vm_state(vm_=None, **kwargs):
      '''
      Return list of all the vms and their state.
  
      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.
  
      :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
  
      CLI Example:
  
      .. code-block:: bash
  
          salt '*' virt.vm_state <domain>
      '''
      def _info(dom):
          '''
          Compute domain state
          '''
          state = ''
          raw = dom.info()
          state = VIRT_STATE_NAME_MAP.get(raw[0], 'unknown')
          return state
      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