code: def MigrateNode(r, node, mode=None, dry_run=False, iallocator=None,
                  target_node=None):
      
  
      query = {
          "dry-run": dry_run,
      }
  
      if NODE_MIGRATE_REQV1 in r.features:
          body = {}
  
          if mode is not None:
              body["mode"] = mode
          if iallocator is not None:
              body["iallocator"] = iallocator
          if target_node is not None:
              body["target_node"] = target_node
  
      else:
          # Use old request format
          if target_node is not None:
              raise GanetiApiError("Server does not support specifying"
                                   " target node for node migration")
  
          body = None
  
          if mode is not None:
              query["mode"] = mode
  
      return r.request("post", "/2/nodes/%s/migrate" % node, query=query,
                       content=body)
docs: Migrates all primary instances from a node.
  
      @type node: str
      @param node: node to migrate
      @type mode: string
      @param mode: if passed, it will overwrite the live migration type,
              otherwise the hypervisor default will be used
      @type dry_run: bool
      @param dry_run: whether to perform a dry run
      @type iallocator: string
      @param iallocator: instance allocator to use
      @type target_node: string
      @param target_node: Target node for shared-storage instances
  
      @rtype: int
      @return: job id