blob: d8ea54c3f96639a2640c3bc6184709cc624c54e2 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
"""Integration test for LP: #1898997
cloud-init was incorrectly excluding Open vSwitch bridge members from its list
of interfaces. This meant that instances which had only one interface which
was in an Open vSwitch bridge would not boot correctly: cloud-init would not
find the expected physical interfaces, so would not apply network config.
This test checks that cloud-init believes it has successfully applied the
network configuration, and confirms that the bridge can be used to ping the
default gateway.
"""
import pytest
from tests.integration_tests import random_mac_address
from tests.integration_tests.util import verify_clean_log
MAC_ADDRESS = random_mac_address()
NETWORK_CONFIG = """\
bridges:
ovs-br:
dhcp4: true
interfaces:
- enp5s0
macaddress: 52:54:00:d9:08:1c
mtu: 1500
openvswitch: {{}}
ethernets:
enp5s0:
mtu: 1500
set-name: enp5s0
match:
macaddress: {}
version: 2
""".format(
MAC_ADDRESS
)
@pytest.mark.lxd_config_dict(
{
"user.network-config": NETWORK_CONFIG,
"volatile.eth0.hwaddr": MAC_ADDRESS,
}
)
@pytest.mark.lxd_vm
@pytest.mark.lxd_use_exec
@pytest.mark.not_bionic
@pytest.mark.ubuntu
class TestInterfaceListingWithOpenvSwitch:
def test_ovs_member_interfaces_not_excluded(self, client):
# We need to install openvswitch for our provided network configuration
# to apply (on next boot), so DHCP on our default interface to fetch it
client.execute("dhclient enp5s0")
client.execute("apt update -qqy")
client.execute("apt-get install -qqy openvswitch-switch")
# Now our networking config should successfully apply on a clean reboot
client.execute("cloud-init clean --logs")
client.restart()
cloudinit_output = client.read_from_file("/var/log/cloud-init.log")
# Confirm that the network configuration was applied successfully
verify_clean_log(cloudinit_output)
# Confirm that the applied network config created the OVS bridge
assert "ovs-br" in client.execute("ip addr")
# Test that we can ping our gateway using our bridge
gateway = client.execute(
"ip -4 route show default | awk '{ print $3 }'"
)
ping_result = client.execute(
"ping -c 1 -W 1 -I ovs-br {}".format(gateway)
)
assert ping_result.ok
|