sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #08005
[Merge] ~ack/maas:1914762-install-ovs-testing into maas:master
Alberto Donato has proposed merging ~ack/maas:1914762-install-ovs-testing into maas:master.
Commit message:
LP:1914762 install openvswitch package for network testing
Requested reviews:
MAAS Lander (maas-lander)
Björn Tillenius (bjornt)
Related bugs:
Bug #1914762 in MAAS: "test network configuration broken with openvswitch bridge"
https://bugs.launchpad.net/maas/+bug/1914762
For more details, see:
https://code.launchpad.net/~ack/maas/+git/maas/+merge/442028
--
Your team MAAS Committers is subscribed to branch maas:master.
diff --git a/src/metadataserver/tests/test_vendor_data.py b/src/metadataserver/tests/test_vendor_data.py
index 85b0c90..b15c56a 100644
--- a/src/metadataserver/tests/test_vendor_data.py
+++ b/src/metadataserver/tests/test_vendor_data.py
@@ -9,7 +9,7 @@ import tempita
from testtools.matchers import ContainsDict, Equals, KeysEqual, MatchesDict
import yaml
-from maasserver.enum import NODE_STATUS
+from maasserver.enum import BRIDGE_TYPE, INTERFACE_TYPE, NODE_STATUS
from maasserver.models import Config, ControllerInfo, NodeKey
from maasserver.node_status import COMMISSIONING_LIKE_STATUSES
from maasserver.secrets import SecretManager
@@ -29,6 +29,7 @@ from metadataserver.vendor_data import (
generate_hardware_sync_systemd_configuration,
generate_kvm_pod_configuration,
generate_ntp_configuration,
+ generate_openvswitch_configuration,
generate_rack_controller_configuration,
generate_snap_configuration,
generate_system_info,
@@ -317,6 +318,37 @@ class TestGenerateRackControllerConfiguration(MAASServerTestCase):
)
+class TestGenerateOpenVSwitchConfiguration(MAASServerTestCase):
+ def test_yields_empty_without_ovs(self):
+ node = factory.make_Node(status=NODE_STATUS.TESTING)
+ iface = factory.make_Interface(node=node)
+ # regular bridge
+ factory.make_Interface(
+ node=node,
+ iftype=INTERFACE_TYPE.BRIDGE,
+ parents=[iface],
+ params={"bridge_type": BRIDGE_TYPE.STANDARD},
+ )
+ self.assertCountEqual(
+ generate_openvswitch_configuration(node),
+ [],
+ )
+
+ def test_yields_openvswitch_configuration_when_ovs_bridge(self):
+ node = factory.make_Node(status=NODE_STATUS.TESTING)
+ iface = factory.make_Interface(node=node)
+ factory.make_Interface(
+ node=node,
+ iftype=INTERFACE_TYPE.BRIDGE,
+ parents=[iface],
+ params={"bridge_type": BRIDGE_TYPE.OVS},
+ )
+ self.assertCountEqual(
+ generate_openvswitch_configuration(node),
+ [("packages", ["openvswitch-switch"])],
+ )
+
+
class TestGenerateKVMPodConfiguration(MAASServerTestCase):
def test_yields_configuration_when_machine_install_kvm_true(self):
password = "123secure"
diff --git a/src/metadataserver/vendor_data.py b/src/metadataserver/vendor_data.py
index 6fb9b7e..807428c 100644
--- a/src/metadataserver/vendor_data.py
+++ b/src/metadataserver/vendor_data.py
@@ -17,6 +17,7 @@ import tempita
import yaml
from maasserver import ntp
+from maasserver.enum import BRIDGE_TYPE, INTERFACE_TYPE
from maasserver.models import Config, NodeKey, NodeMetadata
from maasserver.models.controllerinfo import get_target_version
from maasserver.node_status import COMMISSIONING_LIKE_STATUSES
@@ -47,6 +48,7 @@ def get_vendor_data(node, proxy):
generate_kvm_pod_configuration(node),
generate_ephemeral_netplan_lock_removal(node),
generate_ephemeral_deployment_network_configuration(node),
+ generate_openvswitch_configuration(node),
generate_vcenter_configuration(node),
generate_hardware_sync_systemd_configuration(node),
)
@@ -54,7 +56,8 @@ def get_vendor_data(node, proxy):
for key, value in chain(*generators):
# some keys can be returned by different generators. In that case,
# collect entries from each generator.
- if key in ("runcmd", "write_files"):
+ # XXX we should use the cloud-init API to merge configurations
+ if key in ("runcmd", "write_files", "packages"):
vendor_data.setdefault(key, []).extend(value)
else:
assert (
@@ -193,6 +196,19 @@ def generate_ephemeral_deployment_network_configuration(node):
]
+def generate_openvswitch_configuration(node):
+ """Install OpenVSwitch package if needed."""
+ if node.status not in COMMISSIONING_LIKE_STATUSES:
+ return
+
+ has_ovs = node.current_config.interface_set.filter(
+ type=INTERFACE_TYPE.BRIDGE,
+ params__bridge_type=BRIDGE_TYPE.OVS,
+ ).exists()
+ if has_ovs:
+ yield "packages", ["openvswitch-switch"]
+
+
def generate_kvm_pod_configuration(node):
"""Generate cloud-init configuration to install the node as a KVM pod."""
if node.netboot or not (node.install_kvm or node.register_vmhost):
Follow ups