diff options
author | Alberto Contreras <alberto.contreras@canonical.com> | 2023-03-05 04:47:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-04 20:47:41 -0700 |
commit | 6b9bf7b9bb2db20b7d254f0143df343e14f4c7d4 (patch) | |
tree | d7d2a46cf59170022ca6c20a052f55c851c7e262 | |
parent | b728b4e7cda8643c83d5c390411995f759cf97fa (diff) | |
download | cloud-init-git-6b9bf7b9bb2db20b7d254f0143df343e14f4c7d4.tar.gz |
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
-rw-r--r-- | cloudinit/sources/DataSourceOracle.py | 2 | ||||
-rw-r--r-- | tests/integration_tests/datasources/test_oci_networking.py | 39 | ||||
-rw-r--r-- | tests/unittests/sources/test_oracle.py | 9 |
3 files changed, 49 insertions, 1 deletions
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, |