From d00884a241055546692c8535d9aec16492b59ccc Mon Sep 17 00:00:00 2001 From: Bernardo Dal Seno <bdalseno@google.com> Date: Thu, 28 Mar 2013 12:34:31 +0100 Subject: [PATCH] Refactor out function to format instance policy The new function can be used for group-level instance policies. Support for roman numeral formatting has been dropped to make the code simpler. For other info items it's already unsupported, and it's not exactly documented anyway. Signed-off-by: Bernardo Dal Seno <bdalseno@google.com> Reviewed-by: Helga Velroyen <helgav@google.com> --- lib/cli.py | 52 +++++++++++++++++++++++++++++++++++++++ lib/client/gnt_cluster.py | 18 +------------- 2 files changed, 53 insertions(+), 17 deletions(-) diff --git a/lib/cli.py b/lib/cli.py index 0e7918ad3..fea2c1d40 100644 --- a/lib/cli.py +++ b/lib/cli.py @@ -236,6 +236,7 @@ __all__ = [ "FormatQueryResult", "FormatParameterDict", "FormatParamsDictInfo", + "FormatPolicyInfo", "PrintGenericInfo", "GenerateTable", "AskUser", @@ -3639,6 +3640,57 @@ def FormatParamsDictInfo(param_dict, actual): return ret +def _FormatListInfoDefault(data, def_data): + if data is not None: + ret = utils.CommaJoin(data) + else: + ret = "default (%s)" % utils.CommaJoin(def_data) + return ret + + +def FormatPolicyInfo(custom_ipolicy, eff_ipolicy, iscluster): + """Formats an instance policy. + + @type custom_ipolicy: dict + @param custom_ipolicy: own policy + @type eff_ipolicy: dict + @param eff_ipolicy: effective policy (including defaults); ignored for + cluster + @type iscluster: bool + @param iscluster: the policy is at cluster level + @rtype: list of pairs + @return: formatted data, suitable for L{PrintGenericInfo} + + """ + if iscluster: + eff_ipolicy = custom_ipolicy + + custom_minmax = custom_ipolicy.get(constants.ISPECS_MINMAX) + ret = [ + (key, + FormatParamsDictInfo(custom_minmax.get(key, {}), + eff_ipolicy[constants.ISPECS_MINMAX][key])) + for key in constants.ISPECS_MINMAX_KEYS + ] + if iscluster: + stdspecs = custom_ipolicy[constants.ISPECS_STD] + ret.append( + (constants.ISPECS_STD, + FormatParamsDictInfo(stdspecs, stdspecs)) + ) + + ret.append( + ("enabled disk templates", + _FormatListInfoDefault(custom_ipolicy.get(constants.IPOLICY_DTS), + eff_ipolicy[constants.IPOLICY_DTS])) + ) + ret.extend([ + (key, str(custom_ipolicy.get(key, "default (%s)" % eff_ipolicy[key]))) + for key in constants.IPOLICY_PARAMETERS + ]) + return ret + + def ConfirmOperation(names, list_type, text, extra=""): """Ask the user to confirm an operation on a list of list_type. diff --git a/lib/client/gnt_cluster.py b/lib/client/gnt_cluster.py index bbee602fb..e44f83442 100644 --- a/lib/client/gnt_cluster.py +++ b/lib/client/gnt_cluster.py @@ -474,23 +474,7 @@ def ShowClusterConfig(opts, args): _FormatGroupedParams(result["diskparams"], roman=opts.roman_integers)), ("Instance policy - limits for instances", - [ - (key, - _FormatGroupedParams(result["ipolicy"][constants.ISPECS_MINMAX][key], - roman=opts.roman_integers)) - for key in constants.ISPECS_MINMAX_KEYS - ] + - [ - (constants.ISPECS_STD, - _FormatGroupedParams(result["ipolicy"][constants.ISPECS_STD], - roman=opts.roman_integers)), - ("enabled disk templates", - utils.CommaJoin(result["ipolicy"][constants.IPOLICY_DTS])), - ] + - [ - (key, result["ipolicy"][key]) - for key in constants.IPOLICY_PARAMETERS - ]), + FormatPolicyInfo(result["ipolicy"], None, True)), ] PrintGenericInfo(info) -- GitLab