diff --git a/nova/tests/unit/virt/libvirt/test_config.py b/nova/tests/unit/virt/libvirt/test_config.py
index b8e3620b775d..1cc39c29b7b4 100644
--- a/nova/tests/unit/virt/libvirt/test_config.py
+++ b/nova/tests/unit/virt/libvirt/test_config.py
@@ -2340,6 +2340,7 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
obj.uuid = "b38a3f43-4be2-4046-897f-b67c2f5e0147"
obj.os_type = "exe"
obj.os_init_path = "/sbin/init"
+ obj.os_init_env["foo"] = "bar"
fs = config.LibvirtConfigGuestFilesys()
fs.source_dir = "/root/lxc"
@@ -2357,6 +2358,7 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
exe
/sbin/init
+ bar
@@ -2692,6 +2694,7 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
+ bar
"""
@@ -2708,6 +2711,7 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
self.assertEqual('console=xvc0', obj.os_cmdline)
self.assertEqual('root=xvda', obj.os_root)
self.assertEqual('/sbin/init', obj.os_init_path)
+ self.assertEqual('bar', obj.os_init_env['foo'])
self.assertEqual(['hd', 'cdrom', 'fd'], obj.os_boot_dev)
self.assertTrue(obj.os_bootmenu)
self.assertIsNone(obj.os_smbios)
diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py
index 7fd78ee25842..b67b112cc8ec 100644
--- a/nova/virt/libvirt/config.py
+++ b/nova/virt/libvirt/config.py
@@ -2564,6 +2564,7 @@ class LibvirtConfigGuest(LibvirtConfigObject):
self.os_kernel = None
self.os_initrd = None
self.os_cmdline = None
+ self.os_init_env = {}
self.os_root = None
self.os_init_path = None
self.os_boot_dev = []
@@ -2628,6 +2629,10 @@ class LibvirtConfigGuest(LibvirtConfigObject):
os.append(self._text_node("root", self.os_root))
if self.os_init_path is not None:
os.append(self._text_node("init", self.os_init_path))
+ for name, value in self.os_init_env.items():
+ initenv = self._text_node("initenv", value)
+ initenv.set("name", name)
+ os.append(initenv)
for boot_dev in self.os_boot_dev:
os.append(etree.Element("boot", dev=boot_dev))
@@ -2747,6 +2752,8 @@ class LibvirtConfigGuest(LibvirtConfigObject):
elif c.tag == 'bootmenu':
if c.get('enable') == 'yes':
self.os_bootmenu = True
+ elif c.tag == 'initenv':
+ self.os_init_env[c.get('name')] = c.text
def parse_dom(self, xmldoc):
self.virt_type = xmldoc.get('type')