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