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

Reply via email to