diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py index cf6aad14b25..fe44f20eee7 100755 --- a/cloudinit/distros/__init__.py +++ b/cloudinit/distros/__init__.py @@ -228,7 +228,12 @@ def apply_network_config(self, netconfig, bring_up=False) -> bool: # Now try to bring them up if bring_up: LOG.debug('Bringing up newly configured network interfaces') - network_activator = activators.select_activator() + try: + network_activator = activators.select_activator() + except activators.NoActivatorException: + LOG.warning("No network activator found, not bringing up " + "network interfaces") + return True network_activator.bring_up_all_interfaces(network_state) else: LOG.debug("Not bringing up newly configured network interfaces") diff --git a/cloudinit/net/activators.py b/cloudinit/net/activators.py index 11149548b6f..137338d89ab 100644 --- a/cloudinit/net/activators.py +++ b/cloudinit/net/activators.py @@ -16,6 +16,10 @@ LOG = logging.getLogger(__name__) +class NoActivatorException(Exception): + pass + + def _alter_interface(cmd, device_name) -> bool: LOG.debug("Attempting command %s for device %s", cmd, device_name) try: @@ -271,7 +275,7 @@ def select_activator(priority=None, target=None) -> Type[NetworkActivator]: tmsg = "" if target and target != "/": tmsg = " in target=%s" % target - raise RuntimeError( + raise NoActivatorException( "No available network activators found%s. Searched " "through list: %s" % (tmsg, priority)) selected = found[0] diff --git a/tests/unittests/test_net_activators.py b/tests/unittests/test_net_activators.py index f63a8b74ce8..9da211957ab 100644 --- a/tests/unittests/test_net_activators.py +++ b/tests/unittests/test_net_activators.py @@ -12,7 +12,8 @@ IfUpDownActivator, NetplanActivator, NetworkManagerActivator, - NetworkdActivator + NetworkdActivator, + NoActivatorException, ) from cloudinit.net.network_state import parse_net_config_data from cloudinit.safeyaml import load @@ -99,7 +100,7 @@ def test_none_available(self, unavailable_mocks): resp = search_activator() assert resp == [] - with pytest.raises(RuntimeError): + with pytest.raises(NoActivatorException): select_activator()