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:
@@ -1586,3 +1586,27 @@ class LibvirtConfigGuestSeclabel(LibvirtConfigBaseTest):
|
|||||||
<seclabel type='dynamic'>
|
<seclabel type='dynamic'>
|
||||||
<baselabel>system_u:system_r:my_svirt_t:s0</baselabel>
|
<baselabel>system_u:system_r:my_svirt_t:s0</baselabel>
|
||||||
</seclabel>""")
|
</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('bus'),
|
||||||
c.get('slot'),
|
c.get('slot'),
|
||||||
c.get('function')))
|
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
|
||||||
|
|||||||
Reference in New Issue
Block a user