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
