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:
parent
29d390b895
commit
b94550f419
|
@ -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>""")
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue