Revision a01225a6
b/lib/cmdlib.py | ||
---|---|---|
12108 | 12108 |
constants.IALLOCATOR_MODE_RELOC: |
12109 | 12109 |
(_AddRelocateInstance, ["name", "relocate_from"], ht.TList), |
12110 | 12110 |
constants.IALLOCATOR_MODE_MEVAC: |
12111 |
(_AddEvacuateNodes, ["evac_nodes"], ht.TList), |
|
12111 |
(_AddEvacuateNodes, ["evac_nodes"], |
|
12112 |
ht.TListOf(ht.TAnd(ht.TIsLength(2), |
|
12113 |
ht.TListOf(ht.TString)))), |
|
12112 | 12114 |
constants.IALLOCATOR_MODE_MRELOC: |
12113 | 12115 |
(_AddMultiRelocate, ["instances", "reloc_mode", "target_groups"], |
12114 | 12116 |
ht.TListOf(ht.TListOf(ht.TStrictDict(True, False, { |
... | ... | |
12166 | 12168 |
(self._result_check, self.result), |
12167 | 12169 |
errors.ECODE_INVAL) |
12168 | 12170 |
|
12169 |
if self.mode == constants.IALLOCATOR_MODE_RELOC: |
|
12170 |
assert self.relocate_from is not None |
|
12171 |
assert self.required_nodes == 1 |
|
12172 |
|
|
12171 |
if self.mode in (constants.IALLOCATOR_MODE_RELOC, |
|
12172 |
constants.IALLOCATOR_MODE_MEVAC): |
|
12173 | 12173 |
node2group = dict((name, ndata["group"]) |
12174 | 12174 |
for (name, ndata) in self.in_data["nodes"].items()) |
12175 | 12175 |
|
12176 | 12176 |
fn = compat.partial(self._NodesToGroups, node2group, |
12177 | 12177 |
self.in_data["nodegroups"]) |
12178 | 12178 |
|
12179 |
request_groups = fn(self.relocate_from) |
|
12180 |
result_groups = fn(rdict["result"]) |
|
12181 |
|
|
12182 |
if result_groups != request_groups: |
|
12183 |
raise errors.OpExecError("Groups of nodes returned by iallocator (%s)" |
|
12184 |
" differ from original groups (%s)" % |
|
12185 |
(utils.CommaJoin(result_groups), |
|
12186 |
utils.CommaJoin(request_groups))) |
|
12179 |
if self.mode == constants.IALLOCATOR_MODE_RELOC: |
|
12180 |
assert self.relocate_from is not None |
|
12181 |
assert self.required_nodes == 1 |
|
12182 |
|
|
12183 |
request_groups = fn(self.relocate_from) |
|
12184 |
result_groups = fn(rdict["result"]) |
|
12185 |
|
|
12186 |
if result_groups != request_groups: |
|
12187 |
raise errors.OpExecError("Groups of nodes returned by iallocator (%s)" |
|
12188 |
" differ from original groups (%s)" % |
|
12189 |
(utils.CommaJoin(result_groups), |
|
12190 |
utils.CommaJoin(request_groups))) |
|
12191 |
elif self.mode == constants.IALLOCATOR_MODE_MEVAC: |
|
12192 |
request_groups = fn(self.evac_nodes) |
|
12193 |
for (instance_name, secnode) in self.result: |
|
12194 |
result_groups = fn([secnode]) |
|
12195 |
if result_groups != request_groups: |
|
12196 |
raise errors.OpExecError("Iallocator returned new secondary node" |
|
12197 |
" '%s' (group '%s') for instance '%s'" |
|
12198 |
" which is not in original group '%s'" % |
|
12199 |
(secnode, utils.CommaJoin(result_groups), |
|
12200 |
instance_name, |
|
12201 |
utils.CommaJoin(request_groups))) |
|
12202 |
else: |
|
12203 |
raise errors.ProgrammerError("Unhandled mode '%s'" % self.mode) |
|
12187 | 12204 |
|
12188 | 12205 |
self.out_data = rdict |
12189 | 12206 |
|
Also available in: Unified diff