gnt-cluster modify can now change instance policy specs. Again, sanity
checks are performed.

Signed-off-by: Agata Murawska <[email protected]>
---
 lib/client/gnt_cluster.py |   17 ++++++++++++++++-
 lib/cmdlib.py             |   11 +++++++++++
 lib/opcodes.py            |    1 +
 3 files changed, 28 insertions(+), 1 deletions(-)

diff --git a/lib/client/gnt_cluster.py b/lib/client/gnt_cluster.py
index e3a8f8a..7c1cf0b 100644
--- a/lib/client/gnt_cluster.py
+++ b/lib/client/gnt_cluster.py
@@ -919,7 +919,12 @@ def SetClusterParams(opts, args):
           opts.master_netdev is not None or
           opts.master_netmask is not None or
           opts.use_external_mip_script is not None or
-          opts.prealloc_wipe_disks is not None):
+          opts.prealloc_wipe_disks is not None or
+          opts.mem_count_ispecs is not None or
+          opts.cpu_count_ispecs is not None or
+          opts.disk_count_ispecs is not None or
+          opts.disk_size_ispecs is not None or
+          opts.nic_count_ispecs is not None):
     ToStderr("Please give at least one of the parameters.")
     return 1
 
@@ -963,6 +968,15 @@ def SetClusterParams(opts, args):
   if ndparams is not None:
     utils.ForceDictType(ndparams, constants.NDS_PARAMETER_TYPES)
 
+  ipolicy = objects.CreateIPolicyFromOpts(\
+    mem_count_ispecs=opts.mem_count_ispecs,
+    cpu_count_ispecs=opts.cpu_count_ispecs,
+    disk_count_ispecs=opts.disk_count_ispecs,
+    disk_size_ispecs=opts.disk_size_ispecs,
+    nic_count_ispecs=opts.nic_count_ispecs)
+  for value in ipolicy.values():
+    utils.ForceDictType(value, constants.ISPECS_PARAMETER_TYPES)
+
   mnh = opts.maintain_node_health
 
   uid_pool = opts.uid_pool
@@ -1001,6 +1015,7 @@ def SetClusterParams(opts, args):
                                   nicparams=nicparams,
                                   ndparams=ndparams,
                                   diskparams=diskparams,
+                                  ipolicy=ipolicy,
                                   candidate_pool_size=opts.candidate_pool_size,
                                   maintain_node_health=mnh,
                                   uid_pool=uid_pool,
diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 561a9bf..aa635af 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -3595,6 +3595,15 @@ class LUClusterSetParams(LogicalUnit):
         self.new_ndparams["oob_program"] = \
             constants.NDC_DEFAULTS[constants.ND_OOB_PROGRAM]
 
+    if self.op.ipolicy:
+      ipolicy = {}
+      for key, value in self.op.ipolicy.iteritems():
+        utils.ForceDictType(value, constants.ISPECS_PARAMETER_TYPES)
+        ipolicy[key] = _GetUpdatedParams(cluster.ipolicy.get(key, {}),
+                                          value)
+      objects.InstancePolicy.CheckParameterSyntax(ipolicy)
+      self.new_ipolicy = ipolicy
+
     if self.op.nicparams:
       utils.ForceDictType(self.op.nicparams, constants.NICS_PARAMETER_TYPES)
       self.new_nicparams = cluster.SimpleFillNIC(self.op.nicparams)
@@ -3755,6 +3764,8 @@ class LUClusterSetParams(LogicalUnit):
       self.cluster.beparams[constants.PP_DEFAULT] = self.new_beparams
     if self.op.nicparams:
       self.cluster.nicparams[constants.PP_DEFAULT] = self.new_nicparams
+    if self.op.ipolicy:
+      self.cluster.ipolicy = self.new_ipolicy
     if self.op.osparams:
       self.cluster.osparams = self.new_osp
     if self.op.ndparams:
diff --git a/lib/opcodes.py b/lib/opcodes.py
index 73c9564..bfdb902 100644
--- a/lib/opcodes.py
+++ b/lib/opcodes.py
@@ -787,6 +787,7 @@ class OpClusterSetParams(OpCode):
      "Whether to wipe disks before allocating them to instances"),
     ("nicparams", None, ht.TMaybeDict, "Cluster-wide NIC parameter defaults"),
     ("ndparams", None, ht.TMaybeDict, "Cluster-wide node parameter defaults"),
+    ("ipolicy", None, ht.TMaybeDict, "Cluster-wide instance policy specs"),
     ("drbd_helper", None, ht.TOr(ht.TString, ht.TNone), "DRBD helper program"),
     ("default_iallocator", None, ht.TOr(ht.TString, ht.TNone),
      "Default iallocator for cluster"),
-- 
1.7.3.1

Reply via email to