From 6b9bf7b9bb2db20b7d254f0143df343e14f4c7d4 Mon Sep 17 00:00:00 2001 From: Alberto Contreras Date: Sun, 5 Mar 2023 04:47:41 +0100 Subject: oracle-ds: prefer system_cfg over ds network config source (#1998) Bump system_cfg over ds network_config_source for Oracle DS, so that if network config is defined under /etc/cloud, it will be honored. In a previous change, we moved the initramfs and system_cfg bellow ds to favor ds, but this implied system-wide configs were always not honored. LP: #1956788 --- cloudinit/sources/DataSourceOracle.py | 2 +- .../datasources/test_oci_networking.py | 39 ++++++++++++++++++++++ tests/unittests/sources/test_oracle.py | 9 +++++ 3 files changed, 49 insertions(+), 1 deletion(-) diff --git a/cloudinit/sources/DataSourceOracle.py b/cloudinit/sources/DataSourceOracle.py index 7f43b9e2..b88b55e2 100644 --- a/cloudinit/sources/DataSourceOracle.py +++ b/cloudinit/sources/DataSourceOracle.py @@ -118,9 +118,9 @@ class DataSourceOracle(sources.DataSource): vendordata_pure = None network_config_sources: Tuple[sources.NetworkConfigSource, ...] = ( sources.NetworkConfigSource.CMD_LINE, + sources.NetworkConfigSource.SYSTEM_CFG, sources.NetworkConfigSource.DS, sources.NetworkConfigSource.INITRAMFS, - sources.NetworkConfigSource.SYSTEM_CFG, ) _network_config: dict = {"config": [], "version": 1} diff --git a/tests/integration_tests/datasources/test_oci_networking.py b/tests/integration_tests/datasources/test_oci_networking.py index f569650e..dc0d343b 100644 --- a/tests/integration_tests/datasources/test_oci_networking.py +++ b/tests/integration_tests/datasources/test_oci_networking.py @@ -116,3 +116,42 @@ def test_oci_networking_iscsi_instance_secondary_vnics( ) assert len(expected_interfaces) + 1 == len(configured_interfaces) assert client.execute("ping -c 2 canonical.com").ok + + +SYSTEM_CFG = """\ +network: + ethernets: + id0: + dhcp4: true + dhcp6: true + match: + name: "ens*" + version: 2 +""" + + +def customize_netcfg( + client: IntegrationInstance, + tmpdir, +): + cfg = tmpdir.join("net.cfg") + with open(cfg, "w") as f: + f.write(SYSTEM_CFG) + client.push_file(cfg, "/etc/cloud/cloud.cfg.d/50-network-test.cfg") + client.execute("cloud-init clean --logs") + client.restart() + + +@pytest.mark.oci +def test_oci_networking_system_cfg(client: IntegrationInstance, tmpdir): + customize_netcfg(client, tmpdir) + log = client.read_from_file("/var/log/cloud-init.log") + verify_clean_log(log) + + assert ( + "Applying network configuration from system_cfg" in log + ), "network source used wasn't system_cfg" + netplan_yaml = client.read_from_file("/etc/netplan/50-cloud-init.yaml") + netplan_cfg = yaml.safe_load(netplan_yaml) + expected_netplan_cfg = yaml.safe_load(SYSTEM_CFG) + assert expected_netplan_cfg == netplan_cfg diff --git a/tests/unittests/sources/test_oracle.py b/tests/unittests/sources/test_oracle.py index e3648889..156bf9f5 100644 --- a/tests/unittests/sources/test_oracle.py +++ b/tests/unittests/sources/test_oracle.py @@ -1132,6 +1132,15 @@ class TestNetworkConfig: initramfs_idx = config_sources.index(NetworkConfigSource.INITRAMFS) assert ds_idx < initramfs_idx + def test_system_network_cfg_preferred_over_ds( + self, m_get_interfaces_by_mac + ): + """Ensure that system net config is preferred over DS config""" + config_sources = oracle.DataSourceOracle.network_config_sources + ds_idx = config_sources.index(NetworkConfigSource.DS) + system_idx = config_sources.index(NetworkConfigSource.SYSTEM_CFG) + assert system_idx < ds_idx + @pytest.mark.parametrize("set_primary", [True, False]) def test__add_network_config_from_opc_imds_no_vnics_data( self, -- cgit v1.2.1