summaryrefslogtreecommitdiff
path: root/cloudinit/distros/__init__.py
diff options
context:
space:
mode:
authorJoshua Harlow <harlowja@yahoo-inc.com>2012-06-20 23:40:00 -0700
committerJoshua Harlow <harlowja@yahoo-inc.com>2012-06-20 23:40:00 -0700
commit95e0fa29af3656c1011c41ab0f35dc4e9317269c (patch)
treedd36e2a58478639733d114f452bf36f0af780803 /cloudinit/distros/__init__.py
parentd0ff82b71e315d49f49cbbd8e6a7740036973a4a (diff)
downloadvyos-cloud-init-95e0fa29af3656c1011c41ab0f35dc4e9317269c.tar.gz
vyos-cloud-init-95e0fa29af3656c1011c41ab0f35dc4e9317269c.zip
1. Add an importer function that will search for a given module in a set of search module 'prefixes'
that also has a potential set of required attributes. 2. Use this new importer to find the distro class, the userdata handler modules, the config modules and the datasource modules, if none can be found error out accordingly.
Diffstat (limited to 'cloudinit/distros/__init__.py')
-rw-r--r--cloudinit/distros/__init__.py23
1 files changed, 10 insertions, 13 deletions
diff --git a/cloudinit/distros/__init__.py b/cloudinit/distros/__init__.py
index 25a60c52..e0ef6ee0 100644
--- a/cloudinit/distros/__init__.py
+++ b/cloudinit/distros/__init__.py
@@ -144,16 +144,13 @@ class Distro(object):
return False
-def fetch(distro_name, mods=(__name__, )):
- mod = None
- for m in mods:
- mod_name = "%s.%s" % (m, distro_name)
- try:
- mod = importer.import_module(mod_name)
- except ImportError:
- pass
- if not mod:
- raise RuntimeError("No distribution found for distro %s"
- % (distro_name))
- distro_cls = getattr(mod, 'Distro')
- return distro_cls
+def fetch(name):
+ locs = importer.find_module(name,
+ ['', __name__],
+ ['Distro'])
+ if not locs:
+ raise ImportError("No distribution found for distro %s"
+ % (name))
+ mod = importer.import_module(locs[0])
+ cls = getattr(mod, 'Distro')
+ return cls