OS Parameters can be set at cluster init time, and modified later. For now they are unused.
Signed-off-by: Guido Trotter <[email protected]> --- lib/bootstrap.py | 3 ++- lib/cmdlib.py | 18 ++++++++++++++++++ lib/objects.py | 4 ++++ lib/opcodes.py | 1 + scripts/gnt-cluster | 18 ++++++++++++++++++ 5 files changed, 43 insertions(+), 1 deletions(-) diff --git a/lib/bootstrap.py b/lib/bootstrap.py index a3811a8..f42f6f6 100644 --- a/lib/bootstrap.py +++ b/lib/bootstrap.py @@ -122,7 +122,7 @@ def _InitGanetiServerSetup(): def InitCluster(cluster_name, mac_prefix, master_netdev, file_storage_dir, candidate_pool_size, - secondary_ip=None, vg_name=None, beparams=None, + secondary_ip=None, vg_name=None, beparams=None, osparams=None, nicparams=None, hvparams=None, enabled_hypervisors=None, default_hypervisor=None, modify_etc_hosts=True): """Initialise the cluster. @@ -252,6 +252,7 @@ def InitCluster(cluster_name, mac_prefix, beparams={constants.PP_DEFAULT: beparams}, nicparams={constants.PP_DEFAULT: nicparams}, hvparams=hvparams, + osparams=osparams, candidate_pool_size=candidate_pool_size, modify_etc_hosts=modify_etc_hosts, ) diff --git a/lib/cmdlib.py b/lib/cmdlib.py index fdebd42..3d9957d 100644 --- a/lib/cmdlib.py +++ b/lib/cmdlib.py @@ -1582,6 +1582,22 @@ class LUSetClusterParams(LogicalUnit): hv_class.CheckParameterSyntax(hv_params) _CheckHVParams(self, node_list, hv_name, hv_params) + if self.op.osparams: + self.new_osparams = objects.FillDict(cluster.osparams, {}) + if not isinstance(self.op.osparams, dict): + raise errors.OpPrereqError("Invalid 'osparams' parameter on input") + for os_name, os_dict in self.op.osparams.items(): + if os_dict is None or os_dict == False: + try: + del self.new_osparams[os_name] + except KeyError: + pass + elif os_name not in self.new_osparams: + self.new_osparams[os_name] = os_dict + else: + self.new_osparams[os_name].update(os_dict) + + def Exec(self, feedback_fn): """Change the parameters of the cluster. @@ -1603,6 +1619,8 @@ class LUSetClusterParams(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.osparams: + self.cluster.osparams = self.new_osparams if self.op.candidate_pool_size is not None: self.cluster.candidate_pool_size = self.op.candidate_pool_size diff --git a/lib/objects.py b/lib/objects.py index 5ae1bb9..ae1d2dc 100644 --- a/lib/objects.py +++ b/lib/objects.py @@ -779,6 +779,7 @@ class Cluster(TaggableObject): "hvparams", "beparams", "nicparams", + "osparams", "candidate_pool_size", "modify_etc_hosts", ] @@ -794,6 +795,9 @@ class Cluster(TaggableObject): self.hvparams[hypervisor] = FillDict( constants.HVC_DEFAULTS[hypervisor], self.hvparams[hypervisor]) + if self.osparams is None: + self.osparams = {} + self.beparams = UpgradeGroupedParams(self.beparams, constants.BEC_DEFAULTS) migrate_default_bridge = not self.nicparams diff --git a/lib/opcodes.py b/lib/opcodes.py index 4de40ba..138811f 100644 --- a/lib/opcodes.py +++ b/lib/opcodes.py @@ -264,6 +264,7 @@ class OpSetClusterParams(OpCode): "enabled_hypervisors", "hvparams", "beparams", + "osparams", "nicparams", "candidate_pool_size", ] diff --git a/scripts/gnt-cluster b/scripts/gnt-cluster index 505ffa2..8c1953d 100755 --- a/scripts/gnt-cluster +++ b/scripts/gnt-cluster @@ -73,6 +73,7 @@ def InitCluster(opts, args): hvparams = dict(opts.hvparams) beparams = opts.beparams nicparams = opts.nicparams + osparams = dict(opts.osparams) # prepare beparams dict beparams = objects.FillDict(constants.BEC_DEFAULTS, beparams) @@ -104,6 +105,7 @@ def InitCluster(opts, args): default_hypervisor=opts.default_hypervisor, hvparams=hvparams, beparams=beparams, + osparams=osparams, nicparams=nicparams, candidate_pool_size=opts.candidate_pool_size, modify_etc_hosts=opts.modify_etc_hosts, @@ -460,6 +462,7 @@ def SetClusterParams(opts, args): if not (not opts.lvm_storage or opts.vg_name or opts.enabled_hypervisors or opts.hvparams or opts.beparams or opts.nicparams or + opts.osparams or opts.candidate_pool_size is not None): ToStderr("Please give at least one of the parameters.") return 1 @@ -486,10 +489,13 @@ def SetClusterParams(opts, args): nicparams = opts.nicparams utils.ForceDictType(nicparams, constants.NICS_PARAMETER_TYPES) + osparams = dict(opts.osparams) + op = opcodes.OpSetClusterParams(vg_name=vg_name, enabled_hypervisors=hvlist, hvparams=hvparams, beparams=beparams, + osparams=osparams, nicparams=nicparams, candidate_pool_size=opts.candidate_pool_size) SubmitOpCode(op) @@ -589,6 +595,12 @@ commands = { keyval_option("-N", "--nic-parameters", dest="nicparams", type="keyval", default={}, help="NIC parameters"), + ikv_option("-O", "--os-parameters", dest="osparams", + help="OS Parameters, in the format" + " os:option=value,option=value,...", + default=[], + action="append", + type="identkeyval"), make_option("-C", "--candidate-pool-size", default=constants.MASTER_POOL_SIZE_DEFAULT, help="Set the candidate pool size", @@ -671,6 +683,12 @@ commands = { keyval_option("-N", "--nic-parameters", dest="nicparams", type="keyval", default={}, help="NIC parameters"), + ikv_option("-O", "--os-parameters", dest="osparams", + help="OS Parameters, in the format" + " os:option=value,option=value,...", + default=[], + action="append", + type="identkeyval"), make_option("-C", "--candidate-pool-size", default=None, help="Set the candidate pool size", dest="candidate_pool_size", type="int"), -- 1.5.6.5
