diff --git a/nova/tests/unit/virt/libvirt/test_config.py b/nova/tests/unit/virt/libvirt/test_config.py
index 7e124b279098..84f1491c829e 100644
--- a/nova/tests/unit/virt/libvirt/test_config.py
+++ b/nova/tests/unit/virt/libvirt/test_config.py
@@ -2284,6 +2284,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"
@@ -2301,6 +2302,7 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
exe
/sbin/init
+ bar
@@ -2765,6 +2767,7 @@ class LibvirtConfigGuestTest(LibvirtConfigBaseTest):
+ bar
"""
@@ -2781,6 +2784,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 29f8bc5785b0..af3b27729729 100644
--- a/nova/virt/libvirt/config.py
+++ b/nova/virt/libvirt/config.py
@@ -2502,6 +2502,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 = []
@@ -2561,6 +2562,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))
@@ -2674,6 +2679,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')