libvirt: configuration element for a random number generator device

This configuration exposes a paravirtual random number generator device,
with a default backend set to a hosts /dev/random

An optional rate element can be provided in order to limit the consumption
of host's entropy by the guest.

Partially implements blueprint libvirt-rng-device
Change-Id: Id1be32a307473aec2ff0b54b43b2ca3547d74b84
This commit is contained in:
Vladik Romanovsky 2014-01-16 16:13:44 -05:00
parent 29d390b895
commit b94550f419
2 changed files with 54 additions and 0 deletions

View File

@ -1586,3 +1586,27 @@ class LibvirtConfigGuestSeclabel(LibvirtConfigBaseTest):
<seclabel type='dynamic'>
<baselabel>system_u:system_r:my_svirt_t:s0</baselabel>
</seclabel>""")
class LibvirtConfigGuestRngTest(LibvirtConfigBaseTest):
def test_config_rng_driver(self):
obj = config.LibvirtConfigGuestRng()
xml = obj.to_xml()
self.assertXmlEqual(xml, """
<rng model='virtio'>
<backend model='random'>/dev/random</backend>
</rng>""")
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, """
<rng model='virtio'>
<rate period='12' bytes='34'/>
<backend model='random'>/dev/random</backend>
</rng>""")

View File

@ -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