diff --git a/nova/tests/virt/libvirt/test_libvirt_config.py b/nova/tests/virt/libvirt/test_libvirt_config.py index ae71152ea8b7..740ea98aa868 100644 --- a/nova/tests/virt/libvirt/test_libvirt_config.py +++ b/nova/tests/virt/libvirt/test_libvirt_config.py @@ -1586,3 +1586,27 @@ class LibvirtConfigGuestSeclabel(LibvirtConfigBaseTest): system_u:system_r:my_svirt_t:s0 """) + + +class LibvirtConfigGuestRngTest(LibvirtConfigBaseTest): + + def test_config_rng_driver(self): + obj = config.LibvirtConfigGuestRng() + + xml = obj.to_xml() + self.assertXmlEqual(xml, """ + + /dev/random +""") + + def test_config_rng_driver_with_rate(self): + obj = config.LibvirtConfigGuestRng() + obj.rate_period = '12' + obj.rate_bytes = '34' + + xml = obj.to_xml() + self.assertXmlEqual(xml, """ + + + /dev/random +""") diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py index 62a3b3d75d56..fae902cecaa2 100644 --- a/nova/virt/libvirt/config.py +++ b/nova/virt/libvirt/config.py @@ -1335,3 +1335,33 @@ class LibvirtConfigNodeDevicePciSubFunctionCap(LibvirtConfigObject): c.get('bus'), c.get('slot'), c.get('function'))) + + +class LibvirtConfigGuestRng(LibvirtConfigGuestDevice): + + def __init__(self, **kwargs): + super(LibvirtConfigGuestRng, self).__init__(root_name="rng", + **kwargs) + + self.model = 'random' + self.backend = '/dev/random' + self.rate_period = None + self.rate_bytes = None + + def format_dom(self): + dev = super(LibvirtConfigGuestRng, self).format_dom() + dev.set('model', 'virtio') + + backend = etree.Element("backend") + backend.set("model", self.model) + backend.text = self.backend + + if self.rate_period and self.rate_bytes: + rate = etree.Element("rate") + rate.set("period", str(self.rate_period)) + rate.set("bytes", str(self.rate_bytes)) + dev.append(rate) + + dev.append(backend) + + return dev