Refactor out function to format instance policy
authorBernardo Dal Seno <bdalseno@google.com>
Thu, 28 Mar 2013 11:34:31 +0000 (12:34 +0100)
committerBernardo Dal Seno <bdalseno@google.com>
Thu, 4 Apr 2013 09:27:55 +0000 (11:27 +0200)
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
lib/client/gnt_cluster.py

index 0e7918a..fea2c1d 100644 (file)
@@ -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.
 
index bbee602..e44f834 100644 (file)
@@ -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)