Skip to content

Commit

Permalink
sources/azure: set ovf_is_accessible when OVF is read successfully (#…
Browse files Browse the repository at this point in the history
…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>
  • Loading branch information
cjp256 authored Jan 18, 2022
1 parent f70a1e4 commit 0988fb8
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 5 deletions.
5 changes: 2 additions & 3 deletions cloudinit/sources/DataSourceAzure.py
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ def crawl_metadata(self):
# the candidate list determines the path to take in order to get the
# metadata we need.
reprovision = False
ovf_is_accessible = True
ovf_is_accessible = False
reprovision_after_nic_attach = False
metadata_source = None
ret = None
Expand Down Expand Up @@ -368,9 +368,9 @@ def crawl_metadata(self):
ret = util.mount_cb(src, load_azure_ds_dir)
# save the device for ejection later
self.iso_dev = src
ovf_is_accessible = True
else:
ret = load_azure_ds_dir(src)
ovf_is_accessible = True
metadata_source = src
break
except NonAzureDataSource:
Expand All @@ -383,7 +383,6 @@ def crawl_metadata(self):
report_diagnostic_event(
"%s was not mountable" % src, logger_func=LOG.debug
)
ovf_is_accessible = False
empty_md = {"local-hostname": ""}
empty_cfg = dict(
system_info=dict(default_user=dict(name=""))
Expand Down
41 changes: 39 additions & 2 deletions tests/unittests/sources/test_azure.py
Original file line number Diff line number Diff line change
Expand Up @@ -784,7 +784,13 @@ def _get_mockds(self):
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
Expand All @@ -798,9 +804,12 @@ def _load_possible_azure_ds(seed_dir, cache_dir):
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)
Expand Down Expand Up @@ -1006,6 +1015,34 @@ def test_basic_seed_dir(self):
"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"]}
Expand Down

0 comments on commit 0988fb8

Please sign in to comment.