Skip to content

Commit

Permalink
cloudinit/importer.py: print a meaningful message if import fails
Browse files Browse the repository at this point in the history
Sometimes an import might fail for different reasons: the string
is wrongly typed, or the module has a dependency that is not
installed in python.

We should print that there is an import error, otherwise it might be
really difficult to understand what is the root cause of this
issue. Currently, cloud-init just ignores the error and continues.
This can have fatal consequences, especially when used to pick
the datasource to use.

For example, we can have a missing/misspelled datasource file:
$ ls cloudinit/sources/DataSourceInexistent.py
ls: cannot access 'cloudinit/sources/DataSourceInexistent.py': No such file or directory
$ python
>>> __import__("cloudinit.sources.DataSourceInexistent")

and in this case cloud-init should also hint that the error is
"No module named 'cloudinit.sources.DataSourceInexistent'"

If instead the datasource exists but uses a dependency that
is not installed (for example netifaces for DataSourceVMware):
$ ls cloudinit/sources/DataSourceVMWare.py
cloudinit/sources/DataSourceVMWare.py
$ python
>>> __import__("cloudinit.sources.DataSourceVMware")

then cloud-init should hint that the error is
"No module named 'netifaces'"

Signed-off-by: Emanuele Giuseppe Esposito <eesposit@redhat.com>
  • Loading branch information
esposem committed Jan 12, 2022
1 parent 42b938e commit a79b05b
Showing 1 changed file with 6 additions and 0 deletions.
6 changes: 6 additions & 0 deletions cloudinit/sources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -929,6 +929,12 @@ def list_sources(cfg_list, depends, pkg_list):
m_locs, _looked_locs = importer.find_module(
ds_name, pkg_list, ["get_datasource_list"]
)
if not m_locs:
LOG.error(
"Could not import %s. Does the DataSource exist and "
"is it importable?",
ds_name,
)
for m_loc in m_locs:
mod = importer.import_module(m_loc)
lister = getattr(mod, "get_datasource_list")
Expand Down

0 comments on commit a79b05b

Please sign in to comment.