summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberto Contreras <alberto.contreras@canonical.com>2023-03-05 04:47:41 +0100
committerGitHub <noreply@github.com>2023-03-04 20:47:41 -0700
commit6b9bf7b9bb2db20b7d254f0143df343e14f4c7d4 (patch)
treed7d2a46cf59170022ca6c20a052f55c851c7e262
parentb728b4e7cda8643c83d5c390411995f759cf97fa (diff)
downloadcloud-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.py2
-rw-r--r--tests/integration_tests/datasources/test_oci_networking.py39
-rw-r--r--tests/unittests/sources/test_oracle.py9
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,