mdns: allow specifying which interfaces to listen on
Change-Id: I887af3efde729a33e05eff779012175889649033
This commit is contained in:
parent
617056b2a3
commit
56887c9660
|
@ -45,6 +45,9 @@ opts = [
|
|||
default={},
|
||||
help='Additional parameters to pass for the registered '
|
||||
'service.'),
|
||||
cfg.ListOpt('interfaces',
|
||||
help='List of IP addresses of interfaces to use for mDNS. '
|
||||
'Defaults to all interfaces on the system.'),
|
||||
]
|
||||
|
||||
CONF = cfg.CONF
|
||||
|
@ -71,7 +74,9 @@ class Zeroconf(object):
|
|||
|
||||
def __init__(self):
|
||||
"""Initialize and start the mDNS server."""
|
||||
self._zc = zeroconf.Zeroconf()
|
||||
interfaces = (CONF.mdns.interfaces if CONF.mdns.interfaces
|
||||
else zeroconf.InterfaceChoice.All)
|
||||
self._zc = zeroconf.Zeroconf(interfaces=interfaces)
|
||||
self._registered = []
|
||||
|
||||
def register_service(self, service_type, endpoint, params=None):
|
||||
|
|
|
@ -29,6 +29,8 @@ class RegisterServiceTestCase(base.IronicLibTestCase):
|
|||
def test_ok(self, mock_zc):
|
||||
zc = mdns.Zeroconf()
|
||||
zc.register_service('baremetal', 'https://127.0.0.1/baremetal')
|
||||
mock_zc.assert_called_once_with(
|
||||
interfaces=zeroconf.InterfaceChoice.All)
|
||||
mock_zc.return_value.register_service.assert_called_once_with(mock.ANY)
|
||||
info = mock_zc.return_value.register_service.call_args[0][0]
|
||||
self.assertEqual('_openstack._tcp.local.', info.type)
|
||||
|
@ -66,6 +68,19 @@ class RegisterServiceTestCase(base.IronicLibTestCase):
|
|||
self.assertEqual(4, mock_zc.return_value.register_service.call_count)
|
||||
mock_sleep.assert_has_calls([mock.call(i) for i in (0.1, 0.2, 0.4)])
|
||||
|
||||
def test_with_interfaces(self, mock_zc):
|
||||
CONF.set_override('interfaces', ['10.0.0.1', '192.168.1.1'],
|
||||
group='mdns')
|
||||
zc = mdns.Zeroconf()
|
||||
zc.register_service('baremetal', 'https://127.0.0.1/baremetal')
|
||||
mock_zc.assert_called_once_with(interfaces=['10.0.0.1', '192.168.1.1'])
|
||||
mock_zc.return_value.register_service.assert_called_once_with(mock.ANY)
|
||||
info = mock_zc.return_value.register_service.call_args[0][0]
|
||||
self.assertEqual('_openstack._tcp.local.', info.type)
|
||||
self.assertEqual('baremetal._openstack._tcp.local.', info.name)
|
||||
self.assertEqual('127.0.0.1', socket.inet_ntoa(info.address))
|
||||
self.assertEqual({'path': '/baremetal'}, info.properties)
|
||||
|
||||
@mock.patch.object(mdns.time, 'sleep', autospec=True)
|
||||
def test_failure(self, mock_sleep, mock_zc):
|
||||
mock_zc.return_value.register_service.side_effect = (
|
||||
|
|
Loading…
Reference in New Issue