Revision 60152bbe lib/cmdlib.py
b/lib/cmdlib.py | ||
---|---|---|
12033 | 12033 |
self.name = None |
12034 | 12034 |
self.evac_nodes = None |
12035 | 12035 |
self.instances = None |
12036 |
self.reloc_mode = None
|
|
12036 |
self.evac_mode = None
|
|
12037 | 12037 |
self.target_groups = [] |
12038 | 12038 |
# computed fields |
12039 | 12039 |
self.required_nodes = None |
... | ... | |
12087 | 12087 |
hypervisor_name = self.hypervisor |
12088 | 12088 |
elif self.mode == constants.IALLOCATOR_MODE_RELOC: |
12089 | 12089 |
hypervisor_name = cfg.GetInstanceInfo(self.name).hypervisor |
12090 |
elif self.mode in (constants.IALLOCATOR_MODE_MEVAC, |
|
12091 |
constants.IALLOCATOR_MODE_MRELOC): |
|
12090 |
else: |
|
12092 | 12091 |
hypervisor_name = cluster_info.enabled_hypervisors[0] |
12093 | 12092 |
|
12094 | 12093 |
node_data = self.rpc.call_node_info(node_list, cfg.GetVGName(), |
... | ... | |
12323 | 12322 |
} |
12324 | 12323 |
return request |
12325 | 12324 |
|
12326 |
def _AddMultiRelocate(self): |
|
12327 |
"""Get data for multi-relocate requests. |
|
12325 |
def _AddNodeEvacuate(self): |
|
12326 |
"""Get data for node-evacuate requests. |
|
12327 |
|
|
12328 |
""" |
|
12329 |
return { |
|
12330 |
"instances": self.instances, |
|
12331 |
"evac_mode": self.evac_mode, |
|
12332 |
} |
|
12333 |
|
|
12334 |
def _AddChangeGroup(self): |
|
12335 |
"""Get data for node-evacuate requests. |
|
12328 | 12336 |
|
12329 | 12337 |
""" |
12330 | 12338 |
return { |
12331 | 12339 |
"instances": self.instances, |
12332 |
"reloc_mode": self.reloc_mode, |
|
12333 | 12340 |
"target_groups": self.target_groups, |
12334 | 12341 |
} |
12335 | 12342 |
|
... | ... | |
12355 | 12362 |
self.in_text = serializer.Dump(self.in_data) |
12356 | 12363 |
|
12357 | 12364 |
_STRING_LIST = ht.TListOf(ht.TString) |
12365 |
_JOBSET_LIST = ht.TListOf(ht.TListOf(ht.TStrictDict(True, False, { |
|
12366 |
# pylint: disable-msg=E1101 |
|
12367 |
# Class '...' has no 'OP_ID' member |
|
12368 |
"OP_ID": ht.TElemOf([opcodes.OpInstanceFailover.OP_ID, |
|
12369 |
opcodes.OpInstanceMigrate.OP_ID, |
|
12370 |
opcodes.OpInstanceReplaceDisks.OP_ID]) |
|
12371 |
}))) |
|
12358 | 12372 |
_MODE_DATA = { |
12359 | 12373 |
constants.IALLOCATOR_MODE_ALLOC: |
12360 | 12374 |
(_AddNewInstance, |
... | ... | |
12376 | 12390 |
constants.IALLOCATOR_MODE_MEVAC: |
12377 | 12391 |
(_AddEvacuateNodes, [("evac_nodes", _STRING_LIST)], |
12378 | 12392 |
ht.TListOf(ht.TAnd(ht.TIsLength(2), _STRING_LIST))), |
12379 |
constants.IALLOCATOR_MODE_MRELOC: |
|
12380 |
(_AddMultiRelocate, [ |
|
12393 |
constants.IALLOCATOR_MODE_NODE_EVAC: |
|
12394 |
(_AddNodeEvacuate, [ |
|
12395 |
("instances", _STRING_LIST), |
|
12396 |
("evac_mode", ht.TElemOf(constants.IALLOCATOR_NEVAC_MODES)), |
|
12397 |
], _JOBSET_LIST), |
|
12398 |
constants.IALLOCATOR_MODE_CHG_GROUP: |
|
12399 |
(_AddChangeGroup, [ |
|
12381 | 12400 |
("instances", _STRING_LIST), |
12382 |
("reloc_mode", ht.TElemOf(constants.IALLOCATOR_MRELOC_MODES)), |
|
12383 | 12401 |
("target_groups", _STRING_LIST), |
12384 |
], |
|
12385 |
ht.TListOf(ht.TListOf(ht.TStrictDict(True, False, { |
|
12386 |
# pylint: disable-msg=E1101 |
|
12387 |
# Class '...' has no 'OP_ID' member |
|
12388 |
"OP_ID": ht.TElemOf([opcodes.OpInstanceFailover.OP_ID, |
|
12389 |
opcodes.OpInstanceMigrate.OP_ID, |
|
12390 |
opcodes.OpInstanceReplaceDisks.OP_ID]) |
|
12391 |
})))), |
|
12402 |
], _JOBSET_LIST), |
|
12392 | 12403 |
} |
12393 | 12404 |
|
12394 | 12405 |
def Run(self, name, validate=True, call_fn=None): |
... | ... | |
12553 | 12564 |
if not hasattr(self.op, "evac_nodes"): |
12554 | 12565 |
raise errors.OpPrereqError("Missing attribute 'evac_nodes' on" |
12555 | 12566 |
" opcode input", errors.ECODE_INVAL) |
12556 |
elif self.op.mode == constants.IALLOCATOR_MODE_MRELOC: |
|
12557 |
if self.op.instances: |
|
12558 |
self.op.instances = _GetWantedInstances(self, self.op.instances) |
|
12559 |
else: |
|
12560 |
raise errors.OpPrereqError("Missing instances to relocate", |
|
12561 |
errors.ECODE_INVAL) |
|
12567 |
elif self.op.mode in (constants.IALLOCATOR_MODE_CHG_GROUP, |
|
12568 |
constants.IALLOCATOR_MODE_NODE_EVAC): |
|
12569 |
if not self.op.instances: |
|
12570 |
raise errors.OpPrereqError("Missing instances", errors.ECODE_INVAL) |
|
12571 |
self.op.instances = _GetWantedInstances(self, self.op.instances) |
|
12562 | 12572 |
else: |
12563 | 12573 |
raise errors.OpPrereqError("Invalid test allocator mode '%s'" % |
12564 | 12574 |
self.op.mode, errors.ECODE_INVAL) |
... | ... | |
12598 | 12608 |
ial = IAllocator(self.cfg, self.rpc, |
12599 | 12609 |
mode=self.op.mode, |
12600 | 12610 |
evac_nodes=self.op.evac_nodes) |
12601 |
elif self.op.mode == constants.IALLOCATOR_MODE_MRELOC:
|
|
12611 |
elif self.op.mode == constants.IALLOCATOR_MODE_CHG_GROUP:
|
|
12602 | 12612 |
ial = IAllocator(self.cfg, self.rpc, |
12603 | 12613 |
mode=self.op.mode, |
12604 | 12614 |
instances=self.op.instances, |
12605 |
reloc_mode=self.op.reloc_mode, |
|
12606 | 12615 |
target_groups=self.op.target_groups) |
12616 |
elif self.op.mode == constants.IALLOCATOR_MODE_NODE_EVAC: |
|
12617 |
ial = IAllocator(self.cfg, self.rpc, |
|
12618 |
mode=self.op.mode, |
|
12619 |
instances=self.op.instances, |
|
12620 |
evac_mode=self.op.evac_mode) |
|
12607 | 12621 |
else: |
12608 | 12622 |
raise errors.ProgrammerError("Uncatched mode %s in" |
12609 | 12623 |
" LUTestAllocator.Exec", self.op.mode) |
Also available in: Unified diff