LUClusterSetParams: When ipolicy is updated warn for new violations
[ganeti-local] / lib / client / gnt_cluster.py
index 5087ffd..2fa42cd 100644 (file)
@@ -52,6 +52,10 @@ GROUPS_OPT = cli_option("--groups", default=False,
                     action="store_true", dest="groups",
                     help="Arguments are node groups instead of nodes")
 
+SHOW_MACHINE_OPT = cli_option("-M", "--show-machine-names", default=False,
+                              action="store_true",
+                              help="Show machine name for every line in output")
+
 _EPO_PING_INTERVAL = 30 # 30 seconds between pings
 _EPO_PING_TIMEOUT = 1 # 1 second
 _EPO_REACHABLE_TIMEOUT = 15 * 60 # 15 minutes
@@ -139,15 +143,16 @@ def InitCluster(opts, args):
     utils.ForceDictType(diskparams[templ], constants.DISK_DT_TYPES)
 
   # prepare ipolicy dict
+  ispecs_dts = opts.ipolicy_disk_templates # hate long var names
   ipolicy_raw = \
     objects.CreateIPolicyFromOpts(ispecs_mem_size=opts.ispecs_mem_size,
                                   ispecs_cpu_count=opts.ispecs_cpu_count,
                                   ispecs_disk_count=opts.ispecs_disk_count,
                                   ispecs_disk_size=opts.ispecs_disk_size,
-                                  ispecs_nic_count=opts.ispecs_nic_count)
-  ipolicy = objects.FillDictOfDicts(constants.IPOLICY_DEFAULTS, ipolicy_raw)
-  for value in ipolicy.values():
-    utils.ForceDictType(value, constants.ISPECS_PARAMETER_TYPES)
+                                  ispecs_nic_count=opts.ispecs_nic_count,
+                                  ipolicy_disk_templates=ispecs_dts,
+                                  fill_all=True)
+  ipolicy = objects.FillIPolicy(constants.IPOLICY_DEFAULTS, ipolicy_raw)
 
   if opts.candidate_pool_size is None:
     opts.candidate_pool_size = constants.MASTER_POOL_SIZE_DEFAULT
@@ -461,6 +466,8 @@ def ShowClusterConfig(opts, args):
   for key in constants.IPOLICY_PARAMETERS:
     ToStdout("  - %s", key)
     _PrintGroupedParams(result["ipolicy"][key], roman=opts.roman_integers)
+  ToStdout("  - enabled disk templates: %s",
+           utils.CommaJoin(result["ipolicy"][constants.IPOLICY_DTS]))
 
   return 0
 
@@ -526,8 +533,12 @@ def RunClusterCommand(opts, args):
   for name in nodes:
     result = srun.Run(name, "root", command)
     ToStdout("------------------------------------------------")
-    ToStdout("node: %s", name)
-    ToStdout("%s", result.output)
+    if opts.show_machine_names:
+      for line in result.output.splitlines():
+        ToStdout("%s: %s", name, line)
+    else:
+      ToStdout("node: %s", name)
+      ToStdout("%s", result.output)
     ToStdout("return code = %s", result.exit_code)
 
   return 0
@@ -984,14 +995,14 @@ def SetClusterParams(opts, args):
   if ndparams is not None:
     utils.ForceDictType(ndparams, constants.NDS_PARAMETER_TYPES)
 
+  ispecs_dts = opts.ipolicy_disk_templates
   ipolicy = \
     objects.CreateIPolicyFromOpts(ispecs_mem_size=opts.ispecs_mem_size,
                                   ispecs_cpu_count=opts.ispecs_cpu_count,
                                   ispecs_disk_count=opts.ispecs_disk_count,
                                   ispecs_disk_size=opts.ispecs_disk_size,
-                                  ispecs_nic_count=opts.ispecs_nic_count)
-  for value in ipolicy.values():
-    utils.ForceDictType(value, constants.ISPECS_PARAMETER_TYPES)
+                                  ispecs_nic_count=opts.ispecs_nic_count,
+                                  ipolicy_disk_templates=ispecs_dts)
 
   mnh = opts.maintain_node_health
 
@@ -1444,14 +1455,6 @@ def Epo(opts, args):
   else:
     return _EpoOff(opts, node_list, inst_map)
 
-INSTANCE_POLICY_OPTS = [
-  SPECS_CPU_COUNT_OPT,
-  SPECS_DISK_COUNT_OPT,
-  SPECS_DISK_SIZE_OPT,
-  SPECS_MEM_SIZE_OPT,
-  SPECS_NIC_COUNT_OPT,
-  ]
-
 commands = {
   "init": (
     InitCluster, [ArgHost(min=1, max=1)],
@@ -1505,7 +1508,7 @@ commands = {
     "[-n node...] <filename>", "Copies a file to all (or only some) nodes"),
   "command": (
     RunClusterCommand, [ArgCommand(min=1)],
-    [NODE_LIST_OPT, NODEGROUP_OPT],
+    [NODE_LIST_OPT, NODEGROUP_OPT, SHOW_MACHINE_OPT],
     "[-n node...] <command>", "Runs a command on all (or only some) nodes"),
   "info": (
     ShowClusterConfig, ARGS_NONE, [ROMAN_OPT],