docs: def _get_domain(conn, *vms, **kwargs):
      '''
      Return a domain object for the named VM or return domain object for all VMs.
  
      :params conn: libvirt connection object
      :param vms: list of domain names to look for
      :param iterable: True to return an array in all cases
      '''
      ret = list()
      lookup_vms = list()
  
      all_vms = []
      if kwargs.get('active', True):
          for id_ in conn.listDomainsID():
              all_vms.append(conn.lookupByID(id_).name())
  
      if kwargs.get('inactive', True):
          for id_ in conn.listDefinedDomains():
              all_vms.append(id_)
  
      if not all_vms:
          raise CommandExecutionError('No virtual machines found.')
  
      if vms:
          for name in vms:
              if name not in all_vms:
                  raise CommandExecutionError('The VM "{name}" is not present'.format(name=name))
              else:
                  lookup_vms.append(name)
      else:
          lookup_vms = list(all_vms)
  
      for name in lookup_vms:
          ret.append(conn.lookupByName(name))
  
      return len(ret) == 1 and not kwargs.get('iterable') and ret[0] or ret