diff options
| author | Daniel Watkins <daniel@daniel-watkins.co.uk> | 2019-08-19 20:52:54 +0000 | 
|---|---|---|
| committer | Server Team CI Bot <josh.powers+server-team-bot@canonical.com> | 2019-08-19 20:52:54 +0000 | 
| commit | 2c52e6e88b19f5db8d55eb7280ee27703e05d75f (patch) | |
| tree | 9b28410b1a337106b88bd72926961effe9277e9f | |
| parent | e11b71900e95ec7f90d0da4e588be5c89d97baa9 (diff) | |
| download | vyos-cloud-init-2c52e6e88b19f5db8d55eb7280ee27703e05d75f.tar.gz vyos-cloud-init-2c52e6e88b19f5db8d55eb7280ee27703e05d75f.zip | |
DataSourceOracle: prefer DS network config over initramfs
The Oracle platform provides networking configuration from two sources:
* the primary interface configuration comes from the initramfs, because
  Oracle instance all iSCSI boot
* secondary interface configuration comes from an IMDS accessed over
  HTTP
As we need to combine these two sources of network configuration, the
default "prefer initramfs config over data source config" behaviour
isn't appropriate; we would never get the IMDS interfaces via that
route.  Instead, the Oracle data source has code to combine these two
sources, so we prefer its network configuration over the initramfs
configuration.
(This is not appropriate default behaviour, because _in general_ data
sources won't know how to merge initramfs-provided configuration into
their provided configuration, so switching this order for all data
sources would result in initramfs configuration being discarded on any
data source that implements network_config.)
| -rw-r--r-- | cloudinit/sources/DataSourceOracle.py | 7 | ||||
| -rw-r--r-- | cloudinit/sources/tests/test_oracle.py | 10 | 
2 files changed, 16 insertions, 1 deletions
| diff --git a/cloudinit/sources/DataSourceOracle.py b/cloudinit/sources/DataSourceOracle.py index 086af799..6e73f568 100644 --- a/cloudinit/sources/DataSourceOracle.py +++ b/cloudinit/sources/DataSourceOracle.py @@ -109,6 +109,13 @@ class DataSourceOracle(sources.DataSource):      dsname = 'Oracle'      system_uuid = None      vendordata_pure = None +    network_config_sources = ( +        sources.NetworkConfigSource.cmdline, +        sources.NetworkConfigSource.ds, +        sources.NetworkConfigSource.initramfs, +        sources.NetworkConfigSource.system_cfg, +    ) +      _network_config = sources.UNSET      def __init__(self, sys_cfg, *args, **kwargs): diff --git a/cloudinit/sources/tests/test_oracle.py b/cloudinit/sources/tests/test_oracle.py index 3e146776..3ddf7dfd 100644 --- a/cloudinit/sources/tests/test_oracle.py +++ b/cloudinit/sources/tests/test_oracle.py @@ -1,7 +1,7 @@  # This file is part of cloud-init. See LICENSE file for license information.  from cloudinit.sources import DataSourceOracle as oracle -from cloudinit.sources import BrokenMetadata +from cloudinit.sources import BrokenMetadata, NetworkConfigSource  from cloudinit import helpers  from cloudinit.tests import helpers as test_helpers @@ -303,6 +303,14 @@ class TestDataSourceOracle(test_helpers.CiTestCase):          self.assertIn('Failed to fetch secondary network configuration',                        self.logs.getvalue()) +    def test_ds_network_cfg_preferred_over_initramfs(self): +        """Ensure that DS net config is preferred over initramfs config""" +        network_config_sources = oracle.DataSourceOracle.network_config_sources +        self.assertLess( +            network_config_sources.index(NetworkConfigSource.ds), +            network_config_sources.index(NetworkConfigSource.initramfs) +        ) +  @mock.patch(DS_PATH + "._read_system_uuid", return_value=str(uuid.uuid4()))  class TestReadMetaData(test_helpers.HttprettyTestCase): | 
