From 04a0bd690579a91b487b2865c52b6d073b25ad5d Mon Sep 17 00:00:00 2001 From: Chuck Short Date: Thu, 2 Aug 2012 09:13:07 -0500 Subject: Update usage of 'ip' to handle more return codes Make sure that ip raises an exception.ProcessExecutionError unless 'ip' exits with a 0, 2, or 254. 0 = command executed correctly 2/254 = command has already been executed. Change-Id: I55dd63ca7fc22bc133ab5fe722df4141c332a819 Signed-off-by: Chuck Short --- nova/network/linux_net.py | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/nova/network/linux_net.py b/nova/network/linux_net.py index ee600dafb..2bf467cb3 100644 --- a/nova/network/linux_net.py +++ b/nova/network/linux_net.py @@ -1171,14 +1171,15 @@ class QuantumLinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver): utils.execute('brctl', 'setfd', bridge, str(0), run_as_root=True) utils.execute('brctl', 'stp', bridge, 'off', run_as_root=True) utils.execute('ip', 'link', 'set', bridge, 'address', mac_address, - run_as_root=True) - utils.execute('ip', 'link', 'set', bridge, 'up', run_as_root=True) + run_as_root=True, check_exit_code=[0, 2, 254]) + utils.execute('ip', 'link', 'set', bridge, 'up', run_as_root=True, + check_exit_code=[0, 2, 254]) LOG.debug(_("Done starting bridge %s"), bridge) full_ip = '%s/%s' % (network['dhcp_server'], network['cidr'].rpartition('/')[2]) utils.execute('ip', 'address', 'add', full_ip, 'dev', bridge, - run_as_root=True) + run_as_root=True, check_exit_code=[0, 2, 254]) return dev @@ -1189,7 +1190,8 @@ class QuantumLinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver): return None else: try: - utils.execute('ip', 'link', 'delete', dev, run_as_root=True) + utils.execute('ip', 'link', 'delete', dev, run_as_root=True, + check_exit_code=[0, 2, 254]) except exception.ProcessExecutionError: LOG.error(_("Failed unplugging gateway interface '%s'"), dev) raise @@ -1202,14 +1204,15 @@ class QuantumLinuxBridgeInterfaceDriver(LinuxNetInterfaceDriver): try: # First, try with 'ip' utils.execute('ip', 'tuntap', 'add', dev, 'mode', 'tap', - run_as_root=True) + run_as_root=True, check_exit_code=[0, 2, 254]) except exception.ProcessExecutionError: # Second option: tunctl utils.execute('tunctl', '-b', '-t', dev, run_as_root=True) if mac_address: utils.execute('ip', 'link', 'set', dev, 'address', mac_address, - run_as_root=True) - utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True) + run_as_root=True, check_exit_code=[0, 2, 254]) + utils.execute('ip', 'link', 'set', dev, 'up', run_as_root=True, + check_exit_code=[0, 2, 254]) def get_dev(self, network): dev = self.GATEWAY_INTERFACE_PREFIX + str(network['uuid'][0:11]) -- cgit