docs: def EvacuateNode(r, node, iallocator=None, remote_node=None, dry_run=False,
                   early_release=False, mode=None, accept_old=False):
      """
      Evacuates instances from a Ganeti node.
  
      @type node: str
      @param node: node to evacuate
      @type iallocator: str or None
      @param iallocator: instance allocator to use
      @type remote_node: str
      @param remote_node: node to evaucate to
      @type dry_run: bool
      @param dry_run: whether to perform a dry run
      @type early_release: bool
      @param early_release: whether to enable parallelization
      @type accept_old: bool
      @param accept_old: Whether caller is ready to accept old-style
          (pre-2.5) results
  
      @rtype: string, or a list for pre-2.5 results
      @return: Job ID or, if C{accept_old} is set and server is pre-2.5,
          list of (job ID, instance name, new secondary node); if dry_run
          was specified, then the actual move jobs were not submitted and
          the job IDs will be C{None}
  
      @raises GanetiApiError: if an iallocator and remote_node are both
              specified
      """
  
      if iallocator and remote_node:
          raise GanetiApiError("Only one of iallocator or remote_node can"
                               " be used")
  
      query = {
          "dry-run": dry_run,
      }
  
      if iallocator:
          query["iallocator"] = iallocator
      if remote_node:
          query["remote_node"] = remote_node
  
      if NODE_EVAC_RES1 in r.features:
          # Server supports body parameters
          body = {
              "early_release": early_release,
          }
  
          if iallocator is not None:
              body["iallocator"] = iallocator
          if remote_node is not None:
              body["remote_node"] = remote_node
          if mode is not None:
              body["mode"] = mode
      else:
          # Pre-2.5 request format
          body = None
  
          if not accept_old:
              raise GanetiApiError("Server is version 2.4 or earlier and"
                                   " caller does not accept old-style"
                                   " results (parameter accept_old)")
  
          # Pre-2.5 servers can only evacuate secondaries
          if mode is not None and mode != NODE_EVAC_SEC:
              raise GanetiApiError("Server can only evacuate secondary instances")
  
          if iallocator is not None:
              query["iallocator"] = iallocator
          if remote_node is not None:
              query["remote_node"] = remote_node
          if query:
              query["early_release"] = 1
  
      return r.request("post", "/2/nodes/%s/evacuate" % node, query=query,
                       content=body)