diff options
author | Chris Patterson <cpatterson@microsoft.com> | 2022-01-18 15:45:59 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-18 14:45:59 -0600 |
commit | 0988fb89be06aeb08083ce609f755509d08fa459 (patch) | |
tree | e69ee8811b91d48ba689d0826f00ff99f3ed90ed /tests/unittests/sources | |
parent | f70a1e44e7a6d625dd0aaf7341331142415b3222 (diff) | |
download | vyos-cloud-init-0988fb89be06aeb08083ce609f755509d08fa459.tar.gz vyos-cloud-init-0988fb89be06aeb08083ce609f755509d08fa459.zip |
sources/azure: set ovf_is_accessible when OVF is read successfully (#1193)
The if-statement set ovf_is_accessible to True if the OVF is read
from /dev/sr0, but not from other data sources. It defaults to
True, but may get flipped to False while processing an invalid
source, and never get set back to True when reading from the data
directory.
Instead, default ovf_is_accessible to False, and only set it to
True once we've read an OVF successfully (and end the search).
This fixes an error when OVF is read from data_dir and IMDS
data is unavailable (failing with "No OVF or IMDS available").
Signed-off-by: Chris Patterson <cpatterson@microsoft.com>
Diffstat (limited to 'tests/unittests/sources')
-rw-r--r-- | tests/unittests/sources/test_azure.py | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/tests/unittests/sources/test_azure.py b/tests/unittests/sources/test_azure.py index df1c289b..02083184 100644 --- a/tests/unittests/sources/test_azure.py +++ b/tests/unittests/sources/test_azure.py @@ -784,7 +784,13 @@ scbus-1 on xpt0 bus 0 return dsaz def _get_ds( - self, data, distro="ubuntu", apply_network=None, instance_id=None + self, + data, + distro="ubuntu", + apply_network=None, + instance_id=None, + write_ovf_to_data_dir: bool = False, + write_ovf_to_seed_dir: bool = True, ): def _wait_for_files(flist, _maxwait=None, _naplen=None): data["waited"] = flist @@ -798,9 +804,12 @@ scbus-1 on xpt0 bus 0 yield cache_dir seed_dir = os.path.join(self.paths.seed_dir, "azure") - if data.get("ovfcontent") is not None: + if write_ovf_to_seed_dir and data.get("ovfcontent") is not None: populate_dir(seed_dir, {"ovf-env.xml": data["ovfcontent"]}) + if write_ovf_to_data_dir and data.get("ovfcontent") is not None: + populate_dir(self.waagent_d, {"ovf-env.xml": data["ovfcontent"]}) + dsaz.BUILTIN_DS_CONFIG["data_dir"] = self.waagent_d self.m_is_platform_viable = mock.MagicMock(autospec=True) @@ -1006,6 +1015,34 @@ scbus-1 on xpt0 bus 0 "seed-dir (%s/seed/azure)" % self.tmp, dsrc.subplatform ) + def test_data_dir_without_imds_data(self): + odata = {"HostName": "myhost", "UserName": "myuser"} + data = { + "ovfcontent": construct_valid_ovf_env(data=odata), + "sys_cfg": {}, + } + dsrc = self._get_ds( + data, write_ovf_to_data_dir=True, write_ovf_to_seed_dir=False + ) + + self.m_get_metadata_from_imds.return_value = {} + with mock.patch(MOCKPATH + "util.mount_cb") as m_mount_cb: + m_mount_cb.side_effect = [ + MountFailedError("fail"), + ({"local-hostname": "me"}, "ud", {"cfg": ""}, {}), + ] + ret = dsrc.get_data() + + self.assertTrue(ret) + self.assertEqual(dsrc.userdata_raw, "") + self.assertEqual(dsrc.metadata["local-hostname"], odata["HostName"]) + self.assertTrue( + os.path.isfile(os.path.join(self.waagent_d, "ovf-env.xml")) + ) + self.assertEqual("azure", dsrc.cloud_name) + self.assertEqual("azure", dsrc.platform_type) + self.assertEqual("seed-dir (%s)" % self.waagent_d, dsrc.subplatform) + def test_basic_dev_file(self): """When a device path is used, present that in subplatform.""" data = {"sys_cfg": {}, "dsdevs": ["/dev/cd0"]} |