Ondřej Svoboda has uploaded a new change for review. Change subject: network: wait for a bridge to appear before disabling IPv6 on it ......................................................................
network: wait for a bridge to appear before disabling IPv6 on it A traceback such as File "/usr/share/vdsm/network/configurators/ifcfg.py", line 101, in configureBridge sysctl.disable_ipv6(bridge.name) File "/usr/lib/python2.7/site-packages/vdsm/sysctl.py", line 42, in disable_ipv6 with open('/proc/sys/net/ipv6/conf/%s/disable_ipv6' % dev, 'w') as f: IOError: [Errno 2] No such file or directory: u'/proc/sys/net/ipv6/conf/test-network/disable_ipv6' shows that a bridge was not yet created when _ifup in ifcfg's configureBridge already finished. This patch makes configureBridge wait for the bridge for up to 1s. If it is not created by then, a standard exception is triggered. Change-Id: Ic5292e5a297ff50a0e82ba0781333e21fd9dd7f3 Signed-off-by: Ondřej Svoboda <osvob...@redhat.com> --- M vdsm/network/configurators/__init__.py M vdsm/network/configurators/ifcfg.py M vdsm/network/configurators/iproute2.py 3 files changed, 22 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/83/43583/1 diff --git a/vdsm/network/configurators/__init__.py b/vdsm/network/configurators/__init__.py index e51d3ed..6a5b484 100644 --- a/vdsm/network/configurators/__init__.py +++ b/vdsm/network/configurators/__init__.py @@ -24,6 +24,7 @@ from vdsm import netinfo from vdsm.config import config from vdsm.netconfpersistence import RunningConfig +from vdsm.netlink import monitor from .dhclient import DhcpClient from ..errors import ConfigNetworkError, ERR_FAILED_IFUP @@ -178,3 +179,19 @@ if iface.blockingdhcp and rc: raise ConfigNetworkError(ERR_FAILED_IFUP, 'dhclient%s failed', family) + + +def wait_for_bridge(name, timeout=1): + """ + Wait for a bridge to appear in a given timeout. If the bridge is not + created by then, raise a ConfigNetworkError. + """ + with monitor.Monitor(timeout=timeout, groups=('link',), + silent_timeout=True) as mon: + if name in netinfo.bridges(): + return + for event in mon: + if event.get('name') == name and event.get('event') == 'new_link': + return + raise ConfigNetworkError(ERR_FAILED_IFUP, 'Bridge %s was not created ' + 'during a %ss timeout.' % (name, timeout)) diff --git a/vdsm/network/configurators/ifcfg.py b/vdsm/network/configurators/ifcfg.py index e9ef7cc..b42e9b3 100644 --- a/vdsm/network/configurators/ifcfg.py +++ b/vdsm/network/configurators/ifcfg.py @@ -44,7 +44,7 @@ if utils.isOvirtNode(): from ovirt.node.utils import fs as node_fs -from . import Configurator, dhclient, getEthtoolOpts, libvirt +from . import Configurator, dhclient, getEthtoolOpts, libvirt, wait_for_bridge from ..errors import ConfigNetworkError, ERR_FAILED_IFUP from ..models import Nic, Bridge, IPv4, IPv6 from ..sourceroute import StaticSourceRoute, DynamicSourceRoute @@ -98,6 +98,7 @@ _ifup(bridge) if not bridge.ipv6.address and not bridge.ipv6.ipv6autoconf and ( not bridge.ipv6.dhcpv6): + wait_for_bridge(bridge.name) sysctl.disable_ipv6(bridge.name) def configureVlan(self, vlan, **opts): diff --git a/vdsm/network/configurators/iproute2.py b/vdsm/network/configurators/iproute2.py index 0b5b73e..ef36766 100644 --- a/vdsm/network/configurators/iproute2.py +++ b/vdsm/network/configurators/iproute2.py @@ -29,7 +29,8 @@ from vdsm.utils import CommandPath from vdsm.utils import execCmd -from . import Configurator, runDhclient, getEthtoolOpts, libvirt +from . import (Configurator, runDhclient, getEthtoolOpts, libvirt, + wait_for_bridge) from .dhclient import DhcpClient from ..errors import ConfigNetworkError, ERR_FAILED_IFUP, ERR_FAILED_IFDOWN from ..models import Nic @@ -75,6 +76,7 @@ self.configApplier.setIfaceConfigAndUp(bridge) if not bridge.ipv6.address and not bridge.ipv6.ipv6autoconf and ( not bridge.ipv6.dhcpv6): + wait_for_bridge(bridge.name) sysctl.disable_ipv6(bridge.name) self._addSourceRoute(bridge) if 'custom' in opts and 'bridge_opts' in opts['custom']: -- To view, visit https://gerrit.ovirt.org/43583 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic5292e5a297ff50a0e82ba0781333e21fd9dd7f3 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Ondřej Svoboda <osvob...@redhat.com> _______________________________________________ vdsm-patches mailing list vdsm-patches@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches