Revision b7a1c816 lib/rapi/client.py

b/lib/rapi/client.py
92 92
_REQ_DATA_VERSION_FIELD = "__version__"
93 93
_INST_CREATE_REQV1 = "instance-create-reqv1"
94 94
_INST_REINSTALL_REQV1 = "instance-reinstall-reqv1"
95
_NODE_MIGRATE_REQV1 = "node-migrate-reqv1"
95 96
_INST_NIC_PARAMS = frozenset(["mac", "ip", "mode", "link"])
96 97
_INST_CREATE_V0_DISK_PARAMS = frozenset(["size"])
97 98
_INST_CREATE_V0_PARAMS = frozenset([
......
1289 1290
                             ("/%s/nodes/%s/evacuate" %
1290 1291
                              (GANETI_RAPI_VERSION, node)), query, None)
1291 1292

  
1292
  def MigrateNode(self, node, mode=None, dry_run=False):
1293
  def MigrateNode(self, node, mode=None, dry_run=False, iallocator=None,
1294
                  target_node=None):
1293 1295
    """Migrates all primary instances from a node.
1294 1296

  
1295 1297
    @type node: str
......
1299 1301
        otherwise the hypervisor default will be used
1300 1302
    @type dry_run: bool
1301 1303
    @param dry_run: whether to perform a dry run
1304
    @type iallocator: string
1305
    @param iallocator: instance allocator to use
1306
    @type target_node: string
1307
    @param target_node: Target node for shared-storage instances
1302 1308

  
1303 1309
    @rtype: string
1304 1310
    @return: job id
1305 1311

  
1306 1312
    """
1307 1313
    query = []
1308
    if mode is not None:
1309
      query.append(("mode", mode))
1310 1314
    if dry_run:
1311 1315
      query.append(("dry-run", 1))
1312 1316

  
1313
    return self._SendRequest(HTTP_POST,
1314
                             ("/%s/nodes/%s/migrate" %
1315
                              (GANETI_RAPI_VERSION, node)), query, None)
1317
    if _NODE_MIGRATE_REQV1 in self.GetFeatures():
1318
      body = {}
1319

  
1320
      if mode is not None:
1321
        body["mode"] = mode
1322
      if iallocator is not None:
1323
        body["iallocator"] = iallocator
1324
      if target_node is not None:
1325
        body["target_node"] = target_node
1326

  
1327
      assert len(query) <= 1
1328

  
1329
      return self._SendRequest(HTTP_POST,
1330
                               ("/%s/nodes/%s/migrate" %
1331
                                (GANETI_RAPI_VERSION, node)), query, body)
1332
    else:
1333
      # Use old request format
1334
      if target_node is not None:
1335
        raise GanetiApiError("Server does not support specifying target node"
1336
                             " for node migration")
1337

  
1338
      if mode is not None:
1339
        query.append(("mode", mode))
1340

  
1341
      return self._SendRequest(HTTP_POST,
1342
                               ("/%s/nodes/%s/migrate" %
1343
                                (GANETI_RAPI_VERSION, node)), query, None)
1316 1344

  
1317 1345
  def GetNodeRole(self, node):
1318 1346
    """Gets the current role for a node.

Also available in: Unified diff