def validate_local_ip(local_ip):
- """If tunneling is enabled, verify if the ip exists on the agent's host."""
- if not cfg.CONF.AGENT.tunnel_types:
- return
-
+ """Verify if the ip exists on the agent's host."""
if not ip_lib.IPWrapper().get_device_by_ip(local_ip):
LOG.error(_LE("Tunneling can't be enabled with invalid local_ip '%s'."
" IP couldn't be found on this host's interfaces."),
raise SystemExit(1)
-def validate_tunnel_types(tunnel_types, local_ip):
- if tunnel_types and not local_ip:
- msg = _('Tunneling cannot be enabled without a valid local_ip.')
- raise ValueError(msg)
+def validate_tunnel_config(tunnel_types, local_ip):
+ """Verify local ip and tunnel config if tunneling is enabled."""
+ if not tunnel_types:
+ return
+ validate_local_ip(local_ip)
for tun in tunnel_types:
if tun not in constants.TUNNEL_NETWORK_TYPES:
- msg = _('Invalid tunnel type specified: %s') % tun
- raise ValueError(msg)
+ LOG.error(_LE('Invalid tunnel type specified: %s'), tun)
+ raise SystemExit(1)
def prepare_xen_compute():
def main(bridge_classes):
prepare_xen_compute()
- validate_local_ip(cfg.CONF.OVS.local_ip)
- try:
- validate_tunnel_types(cfg.CONF.AGENT.tunnel_types,
- cfg.CONF.OVS.local_ip)
- except ValueError as e:
- LOG.error(_LE("Validation of tunnel types failed. %s"), e)
- raise SystemExit(1)
+ validate_tunnel_config(cfg.CONF.AGENT.tunnel_types, cfg.CONF.OVS.local_ip)
try:
agent = OVSNeutronAgent(bridge_classes, cfg.CONF)
class ValidateTunnelTypes(ovs_test_base.OVSAgentConfigTestBase):
+ def setUp(self):
+ super(ValidateTunnelTypes, self).setUp()
+ self.mock_validate_local_ip = mock.patch.object(
+ self.mod_agent, 'validate_local_ip').start()
+
def test_validate_tunnel_types_succeeds(self):
cfg.CONF.set_override('local_ip', '10.10.10.10', group='OVS')
cfg.CONF.set_override('tunnel_types', [p_const.TYPE_GRE],
group='AGENT')
- # ValueError will not raise
- self.mod_agent.validate_tunnel_types(cfg.CONF.AGENT.tunnel_types,
- cfg.CONF.OVS.local_ip)
-
- def test_validate_tunnel_types_fails_for_invalid_tunnel_config(self):
- # An ip address is required for tunneling but there is no default,
- # verify this for both gre and vxlan tunnels.
- cfg.CONF.set_override('local_ip', None, group='OVS')
- cfg.CONF.set_override('tunnel_types', [p_const.TYPE_GRE],
- group='AGENT')
- with testtools.ExpectedException(ValueError):
- self.mod_agent.validate_tunnel_types(cfg.CONF.AGENT.tunnel_types,
- cfg.CONF.OVS.local_ip)
- cfg.CONF.set_override('tunnel_types', [p_const.TYPE_VXLAN],
- group='AGENT')
- with testtools.ExpectedException(ValueError):
- self.mod_agent.validate_tunnel_types(cfg.CONF.AGENT.tunnel_types,
- cfg.CONF.OVS.local_ip)
+ self.mod_agent.validate_tunnel_config(cfg.CONF.AGENT.tunnel_types,
+ cfg.CONF.OVS.local_ip)
+ self.mock_validate_local_ip.assert_called_once_with('10.10.10.10')
def test_validate_tunnel_types_fails_for_invalid_tunnel_type(self):
cfg.CONF.set_override('local_ip', '10.10.10.10', group='OVS')
cfg.CONF.set_override('tunnel_types', ['foobar'], group='AGENT')
- with testtools.ExpectedException(ValueError):
- self.mod_agent.validate_tunnel_types(cfg.CONF.AGENT.tunnel_types,
- cfg.CONF.OVS.local_ip)
+ with testtools.ExpectedException(SystemExit):
+ self.mod_agent.validate_tunnel_config(cfg.CONF.AGENT.tunnel_types,
+ cfg.CONF.OVS.local_ip)
class TestOvsNeutronAgent(object):
class TestValidateTunnelLocalIP(base.BaseTestCase):
- def test_validate_local_ip_no_tunneling(self):
- cfg.CONF.set_override('tunnel_types', [], group='AGENT')
- # The test will pass simply if no exception is raised by the next call:
- ovs_agent.validate_local_ip(FAKE_IP1)
-
def test_validate_local_ip_with_valid_ip(self):
- cfg.CONF.set_override('tunnel_types', ['vxlan'], group='AGENT')
mock_get_device_by_ip = mock.patch.object(
ip_lib.IPWrapper, 'get_device_by_ip').start()
ovs_agent.validate_local_ip(FAKE_IP1)
mock_get_device_by_ip.assert_called_once_with(FAKE_IP1)
+ def test_validate_local_ip_with_none_ip(self):
+ with testtools.ExpectedException(SystemExit):
+ ovs_agent.validate_local_ip(None)
+
def test_validate_local_ip_with_invalid_ip(self):
- cfg.CONF.set_override('tunnel_types', ['vxlan'], group='AGENT')
mock_get_device_by_ip = mock.patch.object(
ip_lib.IPWrapper, 'get_device_by_ip').start()
mock_get_device_by_ip.return_value = None