summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Märdian <slyon@ubuntu.com>2022-03-03 09:49:45 +0100
committerLukas Märdian <luk@slyon.de>2022-03-03 09:49:45 +0100
commit41686255d166880c972b4ed2112a665531946d42 (patch)
tree457d17c4bfdd042d42d667d146e90b53f9ebcb03
parent5d7111f47065e55e4d30a6626ba5c82651521516 (diff)
Time out on ovs-vsctl commands if OVS is not enabled on the host
Forwarded: https://github.com/canonical/netplan/pull/266 Last-Update: 2022-03-03 Last-Update: 2022-03-03 Gbp-Pq: Name ovs-timeout.patch
-rw-r--r--src/openvswitch.c2
-rw-r--r--tests/generator/base.py4
-rw-r--r--tests/generator/test_ovs.py29
-rw-r--r--tests/integration/ovs.py96
4 files changed, 80 insertions, 51 deletions
diff --git a/src/openvswitch.c b/src/openvswitch.c
index 2088fbe..ae6b494 100644
--- a/src/openvswitch.c
+++ b/src/openvswitch.c
@@ -57,7 +57,7 @@ write_ovs_systemd_unit(const char* id, const GString* cmds, const char* rootdir,
g_string_append_printf(s, "After=netplan-ovs-%s.service\n", dependency);
}
- g_string_append(s, "\n[Service]\nType=oneshot\n");
+ g_string_append(s, "\n[Service]\nType=oneshot\nTimeoutStartSec=10s\n");
g_string_append(s, cmds->str);
g_string_free_to_file(s, rootdir, path, NULL);
diff --git a/tests/generator/base.py b/tests/generator/base.py
index d72974b..b5167bc 100644
--- a/tests/generator/base.py
+++ b/tests/generator/base.py
@@ -66,9 +66,9 @@ standalone\nExecStart=/usr/bin/ovs-vsctl set Bridge %(iface)s mcast_snooping_ena
Bridge %(iface)s external-ids:netplan/mcast_snooping_enable=false\nExecStart=/usr/bin/ovs-vsctl set Bridge %(iface)s \
rstp_enable=false\nExecStart=/usr/bin/ovs-vsctl set Bridge %(iface)s external-ids:netplan/rstp_enable=false\n'
OVS_BR_EMPTY = _OVS_BASE + 'After=netplan-ovs-cleanup.service\nBefore=network.target\nWants=network.target\n\n[Service]\n\
-Type=oneshot\nExecStart=/usr/bin/ovs-vsctl --may-exist add-br %(iface)s\n' + OVS_BR_DEFAULT
+Type=oneshot\nTimeoutStartSec=10s\nExecStart=/usr/bin/ovs-vsctl --may-exist add-br %(iface)s\n' + OVS_BR_DEFAULT
OVS_CLEANUP = _OVS_BASE + 'ConditionFileIsExecutable=/usr/bin/ovs-vsctl\nBefore=network.target\nWants=network.target\n\n\
-[Service]\nType=oneshot\nExecStart=/usr/sbin/netplan apply --only-ovs-cleanup\n'
+[Service]\nType=oneshot\nTimeoutStartSec=10s\nExecStart=/usr/sbin/netplan apply --only-ovs-cleanup\n'
UDEV_MAC_RULE = 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="%s", ATTR{address}=="%s", NAME="%s"\n'
UDEV_NO_MAC_RULE = 'SUBSYSTEM=="net", ACTION=="add", DRIVERS=="%s", NAME="%s"\n'
UDEV_SRIOV_RULE = 'ACTION=="add", SUBSYSTEM=="net", ATTRS{sriov_totalvfs}=="?*", RUN+="/usr/sbin/netplan apply --sriov-only"\n'
diff --git a/tests/generator/test_ovs.py b/tests/generator/test_ovs.py
index e7084a9..4c9dfbe 100644
--- a/tests/generator/test_ovs.py
+++ b/tests/generator/test_ovs.py
@@ -50,6 +50,7 @@ class TestOpenVSwitch(TestBase):
self.assert_ovs({'ovs0.service': OVS_VIRTUAL % {'iface': 'ovs0', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br ovs0
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port ovs0 eth1
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port ovs0 eth0
@@ -60,6 +61,7 @@ After=netplan-ovs-ovs0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set Interface eth0 external-ids:iface-id=myhostname
ExecStart=/usr/bin/ovs-vsctl set Interface eth0 external-ids:netplan/external-ids/iface-id=myhostname
ExecStart=/usr/bin/ovs-vsctl set Interface eth0 other-config:disable-in-band=true
@@ -71,6 +73,7 @@ After=netplan-ovs-ovs0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set Interface eth1 other-config:disable-in-band=false
ExecStart=/usr/bin/ovs-vsctl set Interface eth1 external-ids:netplan/other-config/disable-in-band=false
'''},
@@ -109,6 +112,7 @@ ExecStart=/usr/bin/ovs-vsctl set Interface eth1 external-ids:netplan/other-confi
self.assert_ovs({'global.service': OVS_VIRTUAL % {'iface': 'global', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set open_vswitch . external-ids:iface-id=myhostname
ExecStart=/usr/bin/ovs-vsctl set open_vswitch . external-ids:netplan/external-ids/iface-id=myhostname
ExecStart=/usr/bin/ovs-vsctl set open_vswitch . other-config:disable-in-band=true
@@ -129,6 +133,7 @@ ExecStart=/usr/bin/ovs-vsctl set open_vswitch . external-ids:netplan/other-confi
self.assert_ovs({'ovs0.service': OVS_VIRTUAL % {'iface': 'ovs0', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br ovs0
''' + OVS_BR_DEFAULT % {'iface': 'ovs0'} + '''\
ExecStart=/usr/bin/ovs-vsctl set Bridge ovs0 protocols=OpenFlow10,OpenFlow11,OpenFlow12
@@ -185,6 +190,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-bond br0 bond0 eth1 eth2
ExecStart=/usr/bin/ovs-vsctl set Port bond0 external-ids:netplan=true
ExecStart=/usr/bin/ovs-vsctl set Port bond0 lacp=off
@@ -253,6 +259,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-bond br0 bond0 eth1 eth2
ExecStart=/usr/bin/ovs-vsctl set Port bond0 external-ids:netplan=true
ExecStart=/usr/bin/ovs-vsctl set Port bond0 lacp=active
@@ -318,6 +325,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-bond br0 bond0 eth1 eth2
ExecStart=/usr/bin/ovs-vsctl set Port bond0 external-ids:netplan=true
ExecStart=/usr/bin/ovs-vsctl set Port bond0 lacp=off
@@ -357,6 +365,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-bond br0 bond0 eth1 eth2
ExecStart=/usr/bin/ovs-vsctl set Port bond0 external-ids:netplan=true
ExecStart=/usr/bin/ovs-vsctl set Port bond0 lacp=off
@@ -408,6 +417,7 @@ ExecStart=/usr/bin/ovs-vsctl set Port bond0 external-ids:netplan/bond_mode=activ
'''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br0 eth1
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br0 eth2
@@ -432,6 +442,7 @@ ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br0 eth2
self.assert_ovs({'br0.service': OVS_VIRTUAL % {'iface': 'br0', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0
''' + OVS_BR_DEFAULT % {'iface': 'br0'} + '''\
ExecStart=/usr/bin/ovs-vsctl set Bridge br0 external-ids:iface-id=myhostname
@@ -462,6 +473,7 @@ ExecStart=/usr/bin/ovs-vsctl set Bridge br0 external-ids:netplan/other-config/di
'''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br0 eth1
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br0 eth2
@@ -521,6 +533,7 @@ ExecStart=/usr/bin/ovs-vsctl set Bridge br0 external-ids:netplan/rstp_enable=tru
'''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0
''' + OVS_BR_DEFAULT % {'iface': 'br0'} + '''\
ExecStart=/usr/bin/ovs-vsctl set Bridge br0 protocols=OpenFlow10,OpenFlow11,OpenFlow15
@@ -570,6 +583,7 @@ ExecStart=/usr/bin/ovs-vsctl set Bridge br0 external-ids:netplan/protocols=OpenF
'''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0
''' + OVS_BR_DEFAULT % {'iface': 'br0'} + '''\
ExecStart=/usr/bin/ovs-vsctl set-controller br0 ptcp: ptcp:1337 ptcp:1337:[fe80::1234%eth0] pssl:1337:[fe80::1] ssl:10.10.10.1 \
@@ -583,6 +597,7 @@ ExecStart=/usr/bin/ovs-vsctl set Controller br0 external-ids:netplan/connection-
'global.service': OVS_VIRTUAL % {'iface': 'global', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set-ssl /key/path /some/path /another/path
ExecStart=/usr/bin/ovs-vsctl set open_vswitch . external-ids:netplan/global/set-ssl=/key/path,/some/path,/another/path
'''},
@@ -680,6 +695,7 @@ ExecStart=/usr/bin/ovs-vsctl set open_vswitch . external-ids:netplan/global/set-
self.assert_ovs({'global.service': OVS_VIRTUAL % {'iface': 'global', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set-ssl /key/path /some/path /another/path
ExecStart=/usr/bin/ovs-vsctl set open_vswitch . external-ids:netplan/global/set-ssl=/key/path,/some/path,/another/path
'''},
@@ -784,6 +800,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-bond br0 bond0 eth1 eth2
ExecStart=/usr/bin/ovs-vsctl set Port bond0 external-ids:netplan=true
ExecStart=/usr/bin/ovs-vsctl set Port bond0 lacp=off
@@ -832,6 +849,7 @@ Bond=bond0
'br1.service': OVS_VIRTUAL % {'iface': 'br1', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br1
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br1 patchx -- set Interface patchx type=patch options:peer=patchy
''' + OVS_BR_DEFAULT % {'iface': 'br1'}},
@@ -841,6 +859,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-bond br0 bond0 patchy eth0 -- set Interface patchy type=patch options:peer=patchx
ExecStart=/usr/bin/ovs-vsctl set Port bond0 external-ids:netplan=true
ExecStart=/usr/bin/ovs-vsctl set Port bond0 lacp=off
@@ -852,6 +871,7 @@ After=netplan-ovs-br1.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set Port patchx external-ids:netplan=true
'''},
'patchy.service': OVS_VIRTUAL % {'iface': 'patchy', 'extra':
@@ -860,6 +880,7 @@ After=netplan-ovs-bond0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set Interface patchy external-ids:netplan=true
'''},
'cleanup.service': OVS_CLEANUP % {'iface': 'cleanup'}})
@@ -887,12 +908,14 @@ ExecStart=/usr/bin/ovs-vsctl set Interface patchy external-ids:netplan=true
self.assert_ovs({'br0.service': OVS_VIRTUAL % {'iface': 'br0', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br0 patch0-1 -- set Interface patch0-1 type=patch options:peer=patch1-0
''' + OVS_BR_DEFAULT % {'iface': 'br0'}},
'br1.service': OVS_VIRTUAL % {'iface': 'br1', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br1
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port br1 patch1-0 -- set Interface patch1-0 type=patch options:peer=patch0-1
''' + OVS_BR_DEFAULT % {'iface': 'br1'}},
@@ -902,6 +925,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set Port patch0-1 external-ids:netplan=true
'''},
'patch1-0.service': OVS_VIRTUAL % {'iface': 'patch1-0', 'extra':
@@ -910,6 +934,7 @@ After=netplan-ovs-br1.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl set Port patch1-0 external-ids:netplan=true
'''},
'cleanup.service': OVS_CLEANUP % {'iface': 'cleanup'}})
@@ -934,6 +959,7 @@ ExecStart=/usr/bin/ovs-vsctl set Port patch1-0 external-ids:netplan=true
self.assert_ovs({'br0.service': OVS_VIRTUAL % {'iface': 'br0', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0
''' + OVS_BR_DEFAULT % {'iface': 'br0'}},
'br0.100.service': OVS_VIRTUAL % {'iface': 'br0.100', 'extra':
@@ -942,6 +968,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0.100 br0 100
ExecStart=/usr/bin/ovs-vsctl set Interface br0.100 external-ids:netplan=true
'''},
@@ -971,6 +998,7 @@ After=netplan-ovs-br0.service
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br br0.100 br0 100
ExecStart=/usr/bin/ovs-vsctl set Interface br0.100 external-ids:netplan=true
'''},
@@ -1007,6 +1035,7 @@ ExecStart=/usr/bin/ovs-vsctl set Interface br0.100 external-ids:netplan=true
self.assert_ovs({'ovs-br.service': OVS_VIRTUAL % {'iface': 'ovs-br', 'extra': '''
[Service]
Type=oneshot
+TimeoutStartSec=10s
ExecStart=/usr/bin/ovs-vsctl --may-exist add-br ovs-br
ExecStart=/usr/bin/ovs-vsctl --may-exist add-port ovs-br non-ovs-bond
''' + OVS_BR_DEFAULT % {'iface': 'ovs-br'}},
diff --git a/tests/integration/ovs.py b/tests/integration/ovs.py
index 8a6f60d..8f9a550 100644
--- a/tests/integration/ovs.py
+++ b/tests/integration/ovs.py
@@ -31,8 +31,8 @@ class _CommonTests():
def _collect_ovs_settings(self, bridge0):
d = {}
- d['show'] = subprocess.check_output(['ovs-vsctl', 'show'])
- d['ssl'] = subprocess.check_output(['ovs-vsctl', 'get-ssl'])
+ d['show'] = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
+ d['ssl'] = subprocess.check_output(['ovs-vsctl', '-t', '5', 'get-ssl'])
# Get external-ids
for tbl in ('Open_vSwitch', 'Controller', 'Bridge', 'Port', 'Interface'):
cols = 'name,external-ids'
@@ -40,37 +40,37 @@ class _CommonTests():
cols = 'external-ids'
elif tbl == 'Controller':
cols = '_uuid,external-ids'
- d['external-ids-%s' % tbl] = subprocess.check_output(['ovs-vsctl', '--columns=%s' % cols, '-f', 'csv', '-d',
+ d['external-ids-%s' % tbl] = subprocess.check_output(['ovs-vsctl', '-t', '5', '--columns=%s' % cols, '-f', 'csv', '-d',
'bare', '--no-headings', 'list', tbl])
# Get other-config
for tbl in ('Open_vSwitch', 'Bridge', 'Port', 'Interface'):
cols = 'name,other-config'
if tbl == 'Open_vSwitch':
cols = 'other-config'
- d['other-config-%s' % tbl] = subprocess.check_output(['ovs-vsctl', '--columns=%s' % cols, '-f', 'csv', '-d',
+ d['other-config-%s' % tbl] = subprocess.check_output(['ovs-vsctl', '-t', '5', '--columns=%s' % cols, '-f', 'csv', '-d',
'bare', '--no-headings', 'list', tbl])
# Get bond settings
for col in ('bond_mode', 'lacp'):
- d['%s-Bond' % col] = subprocess.check_output(['ovs-vsctl', '--columns=name,%s' % col, '-f', 'csv', '-d', 'bare',
+ d['%s-Bond' % col] = subprocess.check_output(['ovs-vsctl', '-t', '5', '--columns=name,%s' % col, '-f', 'csv', '-d', 'bare',
'--no-headings', 'list', 'Port'])
# Get bridge settings
- d['set-fail-mode-Bridge'] = subprocess.check_output(['ovs-vsctl', 'get-fail-mode', bridge0])
+ d['set-fail-mode-Bridge'] = subprocess.check_output(['ovs-vsctl', '-t', '5', 'get-fail-mode', bridge0])
for col in ('mcast_snooping_enable', 'rstp_enable', 'protocols'):
- d['%s-Bridge' % col] = subprocess.check_output(['ovs-vsctl', '--columns=name,%s' % col, '-f', 'csv', '-d', 'bare',
+ d['%s-Bridge' % col] = subprocess.check_output(['ovs-vsctl', '-t', '5', '--columns=name,%s' % col, '-f', 'csv', '-d', 'bare',
'--no-headings', 'list', 'Bridge'])
# Get controller settings
- d['set-controller-Bridge'] = subprocess.check_output(['ovs-vsctl', 'get-controller', bridge0])
+ d['set-controller-Bridge'] = subprocess.check_output(['ovs-vsctl', '-t', '5', 'get-controller', bridge0])
for col in ('connection_mode',):
- d['%s-Controller' % col] = subprocess.check_output(['ovs-vsctl', '--columns=_uuid,%s' % col, '-f', 'csv', '-d',
+ d['%s-Controller' % col] = subprocess.check_output(['ovs-vsctl', '-t', '5', '--columns=_uuid,%s' % col, '-f', 'csv', '-d',
'bare', '--no-headings', 'list', 'Controller'])
return d
def test_cleanup_interfaces(self):
self.setup_eth(None, False)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs0'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs1'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'patch0-1'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'patch1-0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs1'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'patch0-1'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'patch1-0'])
with open(self.config, 'w') as f:
f.write('''network:
openvswitch:
@@ -81,7 +81,7 @@ class _CommonTests():
ovs1: {interfaces: [patch1-0]}''')
self.generate_and_settle(['ovs0', 'ovs1'])
# Basic verification that the bridges/ports/interfaces are there in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertIn(b' Bridge ovs0', out)
self.assertIn(b' Port patch0-1', out)
self.assertIn(b' Interface patch0-1', out)
@@ -94,7 +94,7 @@ class _CommonTests():
%(ec)s: {addresses: ['1.2.3.4/24']}''' % {'ec': self.dev_e_client})
self.generate_and_settle([self.dev_e_client])
# Verify that the netplan=true tagged bridges/ports have been cleaned up
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertNotIn(b'Bridge ovs0', out)
self.assertNotIn(b'Port patch0-1', out)
self.assertNotIn(b'Interface patch0-1', out)
@@ -105,11 +105,11 @@ class _CommonTests():
def test_cleanup_patch_ports(self):
self.setup_eth(None, False)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs0'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs1'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'patch0-1'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'patchy'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'bond0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs1'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'patch0-1'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'patchy'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'bond0'])
with open(self.config, 'w') as f:
f.write('''network:
ethernets:
@@ -122,7 +122,7 @@ class _CommonTests():
ovs0: {interfaces: [patch0-1, bond0]}''' % {'ec': self.dev_e_client})
self.generate_and_settle([self.dev_e_client, 'ovs0'])
# Basic verification that the bridges/ports/interfaces are there in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertIn(b' Bridge ovs0', out)
self.assertIn(b' Port patch0-1\n Interface patch0-1\n type: patch', out)
self.assertIn(b' Port bond0', out)
@@ -141,7 +141,7 @@ class _CommonTests():
self.generate_and_settle([self.dev_e_client, 'ovs1'])
# Verify that the netplan=true tagged patch ports have been cleaned up
# even though the containing bond0 port still exists (with new patch ports)
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertIn(b' Bridge ovs1', out)
self.assertIn(b' Port patchy\n Interface patchy\n type: patch', out)
self.assertIn(b' Port bond0', out)
@@ -155,9 +155,9 @@ class _CommonTests():
def test_bridge_vlan(self):
self.setup_eth(None, True)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'br-%s' % self.dev_e_client])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'br-data'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'br-%s.100' % self.dev_e_client])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'br-%s' % self.dev_e_client])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'br-data'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'br-%s.100' % self.dev_e_client])
with open(self.config, 'w') as f:
f.write('''network:
version: 2
@@ -183,7 +183,7 @@ class _CommonTests():
'br-data',
'br-eth42.100'])
# Basic verification that the interfaces/ports are set up in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertIn(b' Bridge br-%b' % self.dev_e_client.encode(), out)
self.assertIn(b''' Port %(ec)b
Interface %(ec)b''' % {b'ec': self.dev_e_client.encode()}, out)
@@ -196,16 +196,16 @@ class _CommonTests():
['inet 192.168.5.[0-9]+/16', 'mtu 9000']) # from DHCP
self.assert_iface('br-data', ['inet 192.168.20.1/16'])
self.assert_iface(self.dev_e_client, ['mtu 9000', 'master ovs-system'])
- self.assertIn(b'100', subprocess.check_output(['ovs-vsctl', 'br-to-vlan',
+ self.assertIn(b'100', subprocess.check_output(['ovs-vsctl', '-t', '5', 'br-to-vlan',
'br-%s.100' % self.dev_e_client]))
self.assertIn(b'br-%b' % self.dev_e_client.encode(), subprocess.check_output(
- ['ovs-vsctl', 'br-to-parent', 'br-%s.100' % self.dev_e_client]))
+ ['ovs-vsctl', '-t', '5', 'br-to-parent', 'br-%s.100' % self.dev_e_client]))
self.assertIn(b'br-%b' % self.dev_e_client.encode(), out)
def test_bridge_base(self):
self.setup_eth(None, False)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovsbr'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', 'del-ssl'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovsbr'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', 'del-ssl'])
with open(self.config, 'w') as f:
f.write('''network:
ethernets:
@@ -227,7 +227,7 @@ class _CommonTests():
''' % {'ec': self.dev_e_client, 'e2c': self.dev_e2_client})
self.generate_and_settle([self.dev_e_client, self.dev_e2_client, 'ovsbr'])
# Basic verification that the interfaces/ports are in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertIn(b' Bridge ovsbr', out)
self.assertIn(b' Controller "tcp:127.0.0.1"', out)
self.assertIn(b' Controller "pssl:1337:[::1]"', out)
@@ -236,15 +236,15 @@ class _CommonTests():
self.assertIn(b' Port %(ec)b\n Interface %(ec)b' % {b'ec': self.dev_e_client.encode()}, out)
self.assertIn(b' Port %(e2c)b\n Interface %(e2c)b' % {b'e2c': self.dev_e2_client.encode()}, out)
# Verify the bridge was tagged 'netplan:true' correctly
- out = subprocess.check_output(['ovs-vsctl', '--columns=name,external-ids', '-f', 'csv', '-d', 'bare',
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', '--columns=name,external-ids', '-f', 'csv', '-d', 'bare',
'list', 'Bridge', 'ovsbr'])
self.assertIn(b'netplan=true', out)
self.assert_iface('ovsbr', ['inet 192.170.1.1/24'])
def test_bond_base(self):
self.setup_eth(None, False)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovsbr'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'mybond'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovsbr'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'mybond'])
with open(self.config, 'w') as f:
f.write('''network:
ethernets:
@@ -263,13 +263,13 @@ class _CommonTests():
interfaces: [mybond]''' % {'ec': self.dev_e_client, 'e2c': self.dev_e2_client})
self.generate_and_settle([self.dev_e_client, self.dev_e2_client, 'ovsbr'])
# Basic verification that the interfaces/ports are in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertIn(b' Bridge ovsbr', out)
self.assertIn(b' Port mybond', out)
self.assertIn(b' Interface %b' % self.dev_e_client.encode(), out)
self.assertIn(b' Interface %b' % self.dev_e2_client.encode(), out)
# Verify the bond was tagged 'netplan:true' correctly
- out = subprocess.check_output(['ovs-vsctl', '--columns=name,external-ids', '-f', 'csv', '-d', 'bare', 'list', 'Port'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', '--columns=name,external-ids', '-f', 'csv', '-d', 'bare', 'list', 'Port'])
self.assertIn(b'mybond,netplan=true', out)
# Verify bond params
out = subprocess.check_output(['ovs-appctl', 'bond/show', 'mybond'])
@@ -282,10 +282,10 @@ class _CommonTests():
def test_bridge_patch_ports(self):
self.setup_eth(None)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'br0'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'br1'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'patch0-1'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'patch1-0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'br0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'br1'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'patch0-1'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'patch1-0'])
with open(self.config, 'w') as f:
f.write('''network:
openvswitch:
@@ -300,7 +300,7 @@ class _CommonTests():
interfaces: [patch1-0]''')
self.generate_and_settle(['br0', 'br1'])
# Basic verification that the interfaces/ports are set up in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'])
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'])
self.assertIn(b' Bridge br0', out)
self.assertIn(b''' Port patch0-1
Interface patch0-1
@@ -316,7 +316,7 @@ class _CommonTests():
def test_bridge_non_ovs_bond(self):
self.setup_eth(None, False)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs-br'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs-br'])
self.addCleanup(subprocess.call, ['ip', 'link', 'del', 'non-ovs-bond'])
with open(self.config, 'w') as f:
f.write('''network:
@@ -333,7 +333,7 @@ class _CommonTests():
openvswitch: {}''' % {'ec': self.dev_e_client, 'e2c': self.dev_e2_client})
self.generate_and_settle([self.dev_e_client, self.dev_e2_client, 'ovs-br', 'non-ovs-bond'])
# Basic verification that the interfaces/ports are set up in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'], universal_newlines=True)
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'], universal_newlines=True)
self.assertIn(' Bridge ovs-br', out)
self.assertIn(''' Port non-ovs-bond
Interface non-ovs-bond''', out)
@@ -346,7 +346,7 @@ class _CommonTests():
def test_vlan_maas(self):
self.setup_eth(None, False)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs0'])
self.addCleanup(subprocess.call, ['ip', 'link', 'delete', '%s.21' % self.dev_e_client], stderr=subprocess.DEVNULL)
with open(self.config, 'w') as f:
f.write('''network:
@@ -379,7 +379,7 @@ class _CommonTests():
mtu: 1500''' % {'ec': self.dev_e_client})
self.generate_and_settle([self.dev_e_client, 'ovs0', 'eth42.21'])
# Basic verification that the interfaces/ports are set up in OVS
- out = subprocess.check_output(['ovs-vsctl', 'show'], universal_newlines=True)
+ out = subprocess.check_output(['ovs-vsctl', '-t', '5', 'show'], universal_newlines=True)
self.assertIn(' Bridge ovs0', out)
self.assertIn(''' Port %(ec)s.21
Interface %(ec)s.21''' % {'ec': self.dev_e_client}, out)
@@ -411,9 +411,9 @@ class _CommonTests():
def test_settings_tag_cleanup(self):
self.setup_eth(None, False)
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs0'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-br', 'ovs1'])
- self.addCleanup(subprocess.call, ['ovs-vsctl', '--if-exists', 'del-port', 'bond0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs0'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-br', 'ovs1'])
+ self.addCleanup(subprocess.call, ['ovs-vsctl', '-t', '5', '--if-exists', 'del-port', 'bond0'])
with open(self.config, 'w') as f:
f.write('''network:
version: 2