diff --git a/lib/cmdlib.py b/lib/cmdlib.py index 267e4e81f64b63c29497f48773ce92472ade6699..79a2629b07c674bee0b7579cd2cb7d46d6e92d61 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -2589,6 +2589,7 @@ class LUSetClusterParams(LogicalUnit): ("maintain_node_health", None, ht.TMaybeBool), ("prealloc_wipe_disks", None, ht.TMaybeBool), ("nicparams", None, ht.TOr(ht.TDict, ht.TNone)), + ("ndparams", None, ht.TOr(ht.TDict, ht.TNone)), ("drbd_helper", None, ht.TOr(ht.TString, ht.TNone)), ("default_iallocator", None, ht.TOr(ht.TString, ht.TNone)), ("reserved_lvs", None, ht.TOr(ht.TListOf(ht.TNonEmptyString), ht.TNone)), @@ -2698,6 +2699,10 @@ class LUSetClusterParams(LogicalUnit): utils.ForceDictType(self.op.beparams, constants.BES_PARAMETER_TYPES) self.new_beparams = cluster.SimpleFillBE(self.op.beparams) + if self.op.ndparams: + utils.ForceDictType(self.op.ndparams, constants.NDS_PARAMETER_TYPES) + self.new_ndparams = cluster.SimpleFillND(self.op.ndparams) + if self.op.nicparams: utils.ForceDictType(self.op.nicparams, constants.NICS_PARAMETER_TYPES) self.new_nicparams = cluster.SimpleFillNIC(self.op.nicparams) @@ -2851,6 +2856,8 @@ class LUSetClusterParams(LogicalUnit): self.cluster.nicparams[constants.PP_DEFAULT] = self.new_nicparams if self.op.osparams: self.cluster.osparams = self.new_osp + if self.op.ndparams: + self.cluster.ndparams = self.new_ndparams if self.op.candidate_pool_size is not None: self.cluster.candidate_pool_size = self.op.candidate_pool_size @@ -3741,6 +3748,7 @@ class LUAddNode(LogicalUnit): ("group", None, ht.TMaybeString), ("master_capable", None, ht.TMaybeBool), ("vm_capable", None, ht.TMaybeBool), + ("ndparams", None, ht.TOr(ht.TDict, ht.TNone)), ] _NFLAGS = ["master_capable", "vm_capable"] @@ -3900,6 +3908,9 @@ class LUAddNode(LogicalUnit): offline=False, drained=False, group=node_group) + if self.op.ndparams: + utils.ForceDictType(self.op.ndparams, constants.NDS_PARAMETER_TYPES) + def Exec(self, feedback_fn): """Adds the new node to the cluster. @@ -3927,6 +3938,9 @@ class LUAddNode(LogicalUnit): if new_node.master_candidate: self.LogInfo("Node will be a master candidate") + if self.op.ndparams: + new_node.ndparams = self.op.ndparams + # check connectivity result = self.rpc.call_version([node])[node] result.Raise("Can't get version information from node %s" % node) @@ -4007,6 +4021,7 @@ class LUSetNodeParams(LogicalUnit): ("master_capable", None, ht.TMaybeBool), ("vm_capable", None, ht.TMaybeBool), ("secondary_ip", None, ht.TMaybeString), + ("ndparams", None, ht.TOr(ht.TDict, ht.TNone)), _PForce, ] REQ_BGL = False @@ -4220,6 +4235,11 @@ class LUSetNodeParams(LogicalUnit): " based ping to node daemon port", errors.ECODE_ENVIRON) + if self.op.ndparams: + new_ndparams = _GetUpdatedParams(self.node.ndparams, self.op.ndparams) + utils.ForceDictType(new_ndparams, constants.NDS_PARAMETER_TYPES) + self.new_ndparams = new_ndparams + def Exec(self, feedback_fn): """Modifies a node. @@ -4230,6 +4250,9 @@ class LUSetNodeParams(LogicalUnit): result = [] + if self.op.ndparams: + node.ndparams = self.new_ndparams + for attr in ["master_capable", "vm_capable"]: val = getattr(self.op, attr) if val is not None: diff --git a/lib/opcodes.py b/lib/opcodes.py index b9162870c20bd60e75160a759e8d9a1fe5c56045..6cfffbea8e2042c5011b216f3bc8515ad7aacee7 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -309,6 +309,7 @@ class OpSetClusterParams(OpCode): "beparams", "osparams", "nicparams", + "ndparams", "candidate_pool_size", "maintain_node_health", "uid_pool", @@ -375,7 +376,7 @@ class OpAddNode(OpCode): OP_ID = "OP_NODE_ADD" OP_DSC_FIELD = "node_name" __slots__ = ["node_name", "primary_ip", "secondary_ip", "readd", "group", - "vm_capable", "master_capable"] + "vm_capable", "master_capable", "ndparams"] class OpQueryNodes(OpCode): @@ -438,6 +439,7 @@ class OpSetNodeParams(OpCode): "master_capable", "vm_capable", "secondary_ip", + "ndparams", ]