sts-sponsors team mailing list archive
-
sts-sponsors team
-
Mailing list archive
-
Message #08119
[Merge] ~ack/maas:1914762-3.3 into maas:3.3
You have been requested to review the proposed merge of ~ack/maas:1914762-3.3 into maas:3.3.
For more details, see:
https://code.launchpad.net/~ack/maas/+git/maas/+merge/442331
--
Your team MAAS Maintainers is requested to review the proposed merge of ~ack/maas:1914762-3.3 into maas:3.3.
diff --git a/src/metadataserver/tests/test_vendor_data.py b/src/metadataserver/tests/test_vendor_data.py
index 561320d..d7e5668 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
from maasserver.node_status import COMMISSIONING_LIKE_STATUSES
from maasserver.secrets import SecretManager
@@ -30,6 +30,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,
@@ -318,6 +319,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 06cf64b..4b599a0 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, NodeMetadata
from maasserver.models.controllerinfo import get_target_version
from maasserver.node_status import COMMISSIONING_LIKE_STATUSES
@@ -48,6 +49,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),
)
@@ -55,7 +57,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 (
@@ -194,6 +197,21 @@ 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 = any(
+ params.get("bridge_type") == BRIDGE_TYPE.OVS
+ for params in node.current_config.interface_set.filter(
+ type=INTERFACE_TYPE.BRIDGE
+ ).values_list("params", flat=True)
+ )
+ 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):
References