Add the new hvparam lxc_extra_config which is used to specify
additional LXC container config parameters which are not supported by
the Ganeti LXC hypervisor natively.

Signed-off-by: Yuto KAWAMURA(kawamuray) <[email protected]>
---
 lib/hypervisor/hv_lxc.py | 11 +++++++++++
 man/gnt-instance.rst     | 10 ++++++++++
 src/Ganeti/Constants.hs  |  5 +++++
 3 files changed, 26 insertions(+)

diff --git a/lib/hypervisor/hv_lxc.py b/lib/hypervisor/hv_lxc.py
index 9c4eb03..070ccca 100644
--- a/lib/hypervisor/hv_lxc.py
+++ b/lib/hypervisor/hv_lxc.py
@@ -68,6 +68,7 @@ class LXCHypervisor(hv_base.BaseHypervisor):
     constants.HV_LXC_CGROUP_USE: hv_base.NO_CHECK,
     constants.HV_LXC_DEVICES: hv_base.NO_CHECK,
     constants.HV_LXC_DROP_CAPABILITIES: hv_base.NO_CHECK,
+    constants.HV_LXC_EXTRA_CONFIG: hv_base.NO_CHECK,
     constants.HV_LXC_STARTUP_WAIT: hv_base.OPT_NONNEGATIVE_INT_CHECK,
     }
 
@@ -518,6 +519,16 @@ class LXCHypervisor(hv_base.BaseHypervisor):
     for cap in self._GetInstanceDropCapabilities(instance.hvparams):
       out.append("lxc.cap.drop = %s" % cap)
 
+    # Extra config
+    # TODO: Currently a configuration parameter that includes comma
+    # in its value can't be added via this parameter.
+    # Make this parameter able to read from a file once the
+    # "parameter from a file" feature added.
+    extra_configs = instance.hvparams[constants.HV_LXC_EXTRA_CONFIG]
+    if extra_configs:
+      out.append("# User defined configs")
+      out.extend(extra_configs.split(","))
+
     return "\n".join(out) + "\n"
 
   @classmethod
diff --git a/man/gnt-instance.rst b/man/gnt-instance.rst
index 5e0fe49..54fae78 100644
--- a/man/gnt-instance.rst
+++ b/man/gnt-instance.rst
@@ -941,6 +941,16 @@ lxc\_devices
     /dev/console, /dev/ptmx and first block of Unix98 PTY slaves) with
     read-writable(rw) access.
 
+lxc\_extra\_config
+    Valid for the LXC hypervisor.
+
+    This option specifies the list of extra config parameters which
+    are not supported by the Ganeti LXC hypervisor natively.
+    Each value of this option must be valid a line of the LXC
+    container config file(see: **lxc.container.conf**\(5)).
+
+    This parameter is not set by default.
+
 The ``-O (--os-parameters)`` option allows customisation of the OS
 parameters. The actual parameter names and values depend on the OS being
 used, but the syntax is the same key=value. For example, setting a
diff --git a/src/Ganeti/Constants.hs b/src/Ganeti/Constants.hs
index 3dec5f5..4d17930 100644
--- a/src/Ganeti/Constants.hs
+++ b/src/Ganeti/Constants.hs
@@ -1698,6 +1698,9 @@ hvLxcDevices = "lxc_devices"
 hvLxcDropCapabilities :: String
 hvLxcDropCapabilities = "lxc_drop_capabilities"
 
+hvLxcExtraConfig :: String
+hvLxcExtraConfig = "lxc_extra_config"
+
 hvMemPath :: String
 hvMemPath = "mem_path"
 
@@ -1863,6 +1866,7 @@ hvsParameterTypes = Map.fromList
   , (hvLxcCgroupUse,                    VTypeString)
   , (hvLxcDevices,                      VTypeString)
   , (hvLxcDropCapabilities,             VTypeString)
+  , (hvLxcExtraConfig,                  VTypeString)
   , (hvLxcStartupWait,                  VTypeInt)
   , (hvMemPath,                         VTypeString)
   , (hvMigrationBandwidth,              VTypeInt)
@@ -3947,6 +3951,7 @@ hvcDefaults =
           , (hvLxcCgroupUse,        PyValueEx "")
           , (hvLxcDevices,          PyValueEx lxcDevicesDefault)
           , (hvLxcDropCapabilities, PyValueEx lxcDropCapabilitiesDefault)
+          , (hvLxcExtraConfig,      PyValueEx "")
           , (hvLxcStartupWait,      PyValueEx (30 :: Int))
           ])
   ]
-- 
2.0.4

Reply via email to