Revision 63e08b25 qa/qa_cluster.py
b/qa/qa_cluster.py | ||
---|---|---|
538 | 538 |
""" |
539 | 539 |
info = qa_utils.GetObjectInfo(["gnt-cluster", "info"]) |
540 | 540 |
policy = info["Instance policy - limits for instances"] |
541 |
ret_specs = {} |
|
542 |
ret_policy = {} |
|
543 |
ispec_keys = constants.ISPECS_MINMAX_KEYS | frozenset([constants.ISPECS_STD]) |
|
544 |
for (key, val) in policy.items(): |
|
545 |
if key in ispec_keys: |
|
546 |
for (par, pval) in val.items(): |
|
547 |
d = ret_specs.setdefault(par, {}) |
|
548 |
d[key] = pval |
|
549 |
else: |
|
550 |
ret_policy[key] = val |
|
541 |
(ret_policy, ret_specs) = qa_utils.ParseIPolicy(policy) |
|
551 | 542 |
|
552 | 543 |
# Sanity checks |
553 | 544 |
assert len(ret_specs) > 0 |
... | ... | |
615 | 606 |
AssertEqual(eff_policy[p], old_policy[p]) |
616 | 607 |
|
617 | 608 |
|
618 |
def _GetParameterOptions(key, specs, old_specs): |
|
619 |
values = ["%s=%s" % (par, keyvals[key]) |
|
620 |
for (par, keyvals) in specs.items() |
|
621 |
if key in keyvals] |
|
622 |
if old_specs: |
|
623 |
present_pars = frozenset(par |
|
624 |
for (par, keyvals) in specs.items() |
|
625 |
if key in keyvals) |
|
626 |
values.extend("%s=%s" % (par, keyvals[key]) |
|
627 |
for (par, keyvals) in old_specs.items() |
|
628 |
if key in keyvals and par not in present_pars) |
|
629 |
return ",".join(values) |
|
630 |
|
|
631 |
|
|
632 | 609 |
def TestClusterSetISpecs(new_specs, fail=False, old_values=None): |
633 | 610 |
"""Change instance specs. |
634 | 611 |
|
... | ... | |
643 | 620 |
@return: same as L{_GetClusterIPolicy} |
644 | 621 |
|
645 | 622 |
""" |
646 |
if old_values: |
|
647 |
(old_policy, old_specs) = old_values |
|
648 |
else: |
|
649 |
(old_policy, old_specs) = _GetClusterIPolicy() |
|
650 |
if new_specs: |
|
651 |
cmd = ["gnt-cluster", "modify"] |
|
652 |
if any(("min" in val or "max" in val) for val in new_specs.values()): |
|
653 |
minmax_opt_items = [] |
|
654 |
for key in ["min", "max"]: |
|
655 |
keyopt = _GetParameterOptions(key, new_specs, old_specs) |
|
656 |
minmax_opt_items.append("%s:%s" % (key, keyopt)) |
|
657 |
cmd.extend([ |
|
658 |
"--ipolicy-bounds-specs", |
|
659 |
"/".join(minmax_opt_items) |
|
660 |
]) |
|
661 |
std_opt = _GetParameterOptions("std", new_specs, {}) |
|
662 |
if std_opt: |
|
663 |
cmd.extend(["--ipolicy-std-specs", std_opt]) |
|
664 |
AssertCommand(cmd, fail=fail) |
|
665 |
|
|
666 |
# Check the new state |
|
667 |
(eff_policy, eff_specs) = _GetClusterIPolicy() |
|
668 |
AssertEqual(eff_policy, old_policy) |
|
669 |
if fail: |
|
670 |
AssertEqual(eff_specs, old_specs) |
|
671 |
else: |
|
672 |
for par in eff_specs: |
|
673 |
for key in eff_specs[par]: |
|
674 |
if par in new_specs and key in new_specs[par]: |
|
675 |
AssertEqual(int(eff_specs[par][key]), int(new_specs[par][key])) |
|
676 |
else: |
|
677 |
AssertEqual(int(eff_specs[par][key]), int(old_specs[par][key])) |
|
678 |
return (eff_policy, eff_specs) |
|
623 |
build_cmd = lambda opts: ["gnt-cluster", "modify"] + opts |
|
624 |
return qa_utils.TestSetISpecs(new_specs, get_policy_fn=_GetClusterIPolicy, |
|
625 |
build_cmd_fn=build_cmd, fail=fail, |
|
626 |
old_values=old_values) |
|
679 | 627 |
|
680 | 628 |
|
681 | 629 |
def TestClusterModifyISpecs(): |
Also available in: Unified diff