Fixup CloudConfig by using new module functions and calling objects.
This commit is contained in:
		| @@ -16,6 +16,7 @@ from cloudinit import parts | |||||||
| from cloudinit import sources | from cloudinit import sources | ||||||
| from cloudinit import util | from cloudinit import util | ||||||
| from cloudinit import user_data | from cloudinit import user_data | ||||||
|  | from cloudinit import handlers | ||||||
|  |  | ||||||
| LOG = logging.getLogger(__name__) | LOG = logging.getLogger(__name__) | ||||||
|  |  | ||||||
| @@ -168,7 +169,6 @@ class CloudInit(object): | |||||||
|         else: |         else: | ||||||
|             self.ds_deps = [sources.DEP_FILESYSTEM, sources.DEP_NETWORK] |             self.ds_deps = [sources.DEP_FILESYSTEM, sources.DEP_NETWORK] | ||||||
|         self.paths = CloudPaths(self) |         self.paths = CloudPaths(self) | ||||||
|         self.sems = CloudSemaphores(self.paths) |  | ||||||
|         self.cfg = self._read_cfg() |         self.cfg = self._read_cfg() | ||||||
|  |  | ||||||
|     def _read_cfg_old(self): |     def _read_cfg_old(self): | ||||||
| @@ -294,16 +294,14 @@ class CloudInit(object): | |||||||
|         handlers = CloudHandlers(self) |         handlers = CloudHandlers(self) | ||||||
|  |  | ||||||
|         # Add handlers in cdir |         # Add handlers in cdir | ||||||
|         for fname in glob.glob(os.path.join(cdir, "*.py")): |         potential_handlers = parts.find_module_files(cdir) | ||||||
|             if not os.path.isfile(fname): |         for (fname, modname) in potential_handlers.iteritems(): | ||||||
|                 continue |  | ||||||
|             modname = os.path.basename(fname)[0:-3] |  | ||||||
|             try: |             try: | ||||||
|                 mod = parts.fixup_module(importer.import_module(modname)) |                 mod = parts.fixup_module(importer.import_module(modname)) | ||||||
|                 types = handlers.register(mod) |                 types = handlers.register(mod) | ||||||
|                 LOG.debug("Added handler for [%s] from %s", types, fname) |                 LOG.debug("Added handler for [%s] from %s", types, fname) | ||||||
|             except: |             except: | ||||||
|                 LOG.exception("Failed to register handler in %s", fname) |                 LOG.exception("Failed to register handler from %s", fname) | ||||||
|  |  | ||||||
|         def_handlers = handlers.register_defaults() |         def_handlers = handlers.register_defaults() | ||||||
|         if def_handlers: |         if def_handlers: | ||||||
| @@ -391,47 +389,46 @@ class CloudHandlers(object): | |||||||
|  |  | ||||||
|  |  | ||||||
| class CloudConfig(object): | class CloudConfig(object): | ||||||
|     cfgfile = None |  | ||||||
|     cfg = None |  | ||||||
|  |  | ||||||
|     def __init__(self, cfgfile, cloud=None, ds_deps=None): |     def __init__(self, cfgfile, cloud): | ||||||
|         if cloud == None: |  | ||||||
|             self.cloud = cloudinit.CloudInit(ds_deps) |  | ||||||
|             self.cloud.get_data_source() |  | ||||||
|         else: |  | ||||||
|         self.cloud = cloud |         self.cloud = cloud | ||||||
|         self.cfg = self.get_config_obj(cfgfile) |         self.cfg = self._get_config(cfgfile) | ||||||
|  |         self.paths = cloud.paths | ||||||
|  |         self.sems = CloudSemaphores(self.paths) | ||||||
|  |  | ||||||
|     def get_config_obj(self, cfgfile): |     def _get_config(self, cfgfile): | ||||||
|  |  | ||||||
|  |         cfg = None | ||||||
|         try: |         try: | ||||||
|             cfg = util.read_conf(cfgfile) |             cfg = util.read_conf(cfgfile) | ||||||
|         except: |         except: | ||||||
|             # TODO: this 'log' could/should be passed in |             LOG.exception(("Failed loading of cloud config '%s'. " | ||||||
|             cloudinit.log.critical("Failed loading of cloud config '%s'. " |                           "Continuing with empty config."), cfgfile) | ||||||
|                                    "Continuing with empty config\n" % cfgfile) |         if not cfg: | ||||||
|             cloudinit.log.debug(traceback.format_exc() + "\n") |  | ||||||
|             cfg = None |  | ||||||
|         if cfg is None: |  | ||||||
|             cfg = {} |             cfg = {} | ||||||
|  |  | ||||||
|  |         ds_cfg = None | ||||||
|         try: |         try: | ||||||
|             ds_cfg = self.cloud.datasource.get_config_obj() |             ds_cfg = self.cloud.datasource.get_config_obj() | ||||||
|         except: |         except: | ||||||
|  |             LOG.exception("Failed loading of datasource config.") | ||||||
|  |         if not ds_cfg: | ||||||
|             ds_cfg = {} |             ds_cfg = {} | ||||||
|  |  | ||||||
|         cfg = util.mergedict(cfg, ds_cfg) |         cfg = util.mergedict(cfg, ds_cfg) | ||||||
|         return(util.mergedict(cfg, self.cloud.cfg)) |         cloud_cfg = self.cloud.cfg or {} | ||||||
|  |         return util.mergedict(cfg, cloud_cfg) | ||||||
|  |  | ||||||
|     def handle(self, name, args, freq=None): |     def extract(self, name): | ||||||
|         try: |         modname = handlers.form_module_name(name) | ||||||
|             mod = __import__("cc_" + name.replace("-", "_"), globals()) |         if not modname: | ||||||
|             def_freq = getattr(mod, "frequency", per_instance) |             return None | ||||||
|             handler = getattr(mod, "handle") |         return handlers.fixup_module(importer.import_module(modname)) | ||||||
|  |  | ||||||
|  |     def handle(self, name, mod, args, freq=None): | ||||||
|  |         def_freq = mod.frequency  | ||||||
|         if not freq: |         if not freq: | ||||||
|             freq = def_freq |             freq = def_freq | ||||||
|  |         c_name = "config-%s" % (name) | ||||||
|             self.cloud.sem_and_run("config-" + name, freq, handler, |         real_args = [name, self.cfg, self.cloud, LOG, args] | ||||||
|                 [name, self.cfg, self.cloud, cloudinit.log, args]) |         return self.sems.run_functor(c_name, freq, mod.handle, real_args) | ||||||
|         except: |  | ||||||
|             raise |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Joshua Harlow
					Joshua Harlow