cloud-init-dev team mailing list archive
-
cloud-init-dev team
-
Mailing list archive
-
Message #01022
[Merge] lp:~harlowja/cloud-init/cloud-init-dynamic-distro-check into lp:cloud-init
Joshua Harlow has proposed merging lp:~harlowja/cloud-init/cloud-init-dynamic-distro-check into lp:cloud-init.
Requested reviews:
cloud init development team (cloud-init-dev)
For more details, see:
https://code.launchpad.net/~harlowja/cloud-init/cloud-init-dynamic-distro-check/+merge/300805
--
Your team cloud init development team is requested to review the proposed merge of lp:~harlowja/cloud-init/cloud-init-dynamic-distro-check into lp:cloud-init.
=== modified file 'cloudinit/stages.py'
--- cloudinit/stages.py 2016-06-10 21:22:17 +0000
+++ cloudinit/stages.py 2016-07-21 18:53:48 +0000
@@ -808,31 +808,43 @@
def run_section(self, section_name):
raw_mods = self._read_modules(section_name)
mostly_mods = self._fixup_modules(raw_mods)
- d_name = self.init.distro.name
+ distro = self.init.distro
+
+ def is_usable_here(mod):
+ # Ok how this works is the following, if the module provides
+ # a distro set and its empty, then its accepted to work everywhere
+ # if it is not empty and the current distro is in that set
+ # then its accepted to work, otherwise if the module provides
+ # a 'is_usable_on' function that takes one argument (the distro
+ # being loaded) and returns true then it is expected to work,
+ # otherwise it is not expected to work in the current system
+ # and it will be skipped (unless the module name has itself been
+ # included via a 'unverified_modules' configuration set/list).
+ worked_distros = set(mod.distros)
+ worked_distros.update(
+ distros.Distro.expand_osfamily(mod.osfamilies))
+ if len(worked_distros) == 0 or distro.name in worked_distros:
+ return True
+ is_usable_func = getattr(mod, 'is_usable_on', None)
+ if is_usable_func is not None and six.callable(is_usable_func):
+ return is_usable_func(distro)
+ return False
skipped = []
forced = []
overridden = self.cfg.get('unverified_modules', [])
for (mod, name, _freq, _args) in mostly_mods:
- worked_distros = set(mod.distros)
- worked_distros.update(
- distros.Distro.expand_osfamily(mod.osfamilies))
-
- # module does not declare 'distros' or lists this distro
- if not worked_distros or d_name in worked_distros:
- continue
-
if name in overridden:
forced.append(name)
else:
- skipped.append(name)
-
+ if not is_usable_here(mod):
+ skipped.append(name)
if skipped:
LOG.info("Skipping modules %s because they are not verified "
"on distro '%s'. To run anyway, add them to "
- "'unverified_modules' in config.", skipped, d_name)
+ "'unverified_modules' in config.", skipped, distro.name)
if forced:
- LOG.info("running unverified_modules: %s", forced)
+ LOG.info("Running unverified modules: %s", forced)
return self._run_modules(mostly_mods)
Follow ups