Adds support for multiple instances
Saves plugins data in a per-instance section. This is useful in case an instance is snapshotted and new instances are booted from the new image.
This commit is contained in:
		| @@ -41,18 +41,24 @@ LOG = logging.getLogger(__name__) | ||||
| class InitManager(object): | ||||
|     _PLUGINS_CONFIG_SECTION = 'Plugins' | ||||
|  | ||||
|     def _get_plugin_status(self, osutils, plugin_name): | ||||
|     def _get_plugins_section(self, instance_id): | ||||
|         if not instance_id: | ||||
|             return self._PLUGINS_CONFIG_SECTION | ||||
|         else: | ||||
|             return instance_id + "/" + self._PLUGINS_CONFIG_SECTION | ||||
|  | ||||
|     def _get_plugin_status(self, osutils, instance_id, plugin_name): | ||||
|         return osutils.get_config_value(plugin_name, | ||||
|                                         self._PLUGINS_CONFIG_SECTION) | ||||
|                                         self._get_plugins_section(instance_id)) | ||||
|  | ||||
|     def _set_plugin_status(self, osutils, plugin_name, status): | ||||
|     def _set_plugin_status(self, osutils, instance_id, plugin_name, status): | ||||
|         osutils.set_config_value(plugin_name, status, | ||||
|                                  self._PLUGINS_CONFIG_SECTION) | ||||
|                                  self._get_plugins_section(instance_id)) | ||||
|  | ||||
|     def _exec_plugin(self, osutils, service, plugin, shared_data): | ||||
|     def _exec_plugin(self, osutils, service, plugin, instance_id, shared_data): | ||||
|         plugin_name = plugin.get_name() | ||||
|  | ||||
|         status = self._get_plugin_status(osutils, plugin_name) | ||||
|         status = self._get_plugin_status(osutils, instance_id, plugin_name) | ||||
|         if status == plugins_base.PLUGIN_EXECUTION_DONE: | ||||
|             LOG.debug('Plugin \'%(plugin_name)s\' execution already done, ' | ||||
|                       'skipping' % locals()) | ||||
| @@ -62,7 +68,8 @@ class InitManager(object): | ||||
|             try: | ||||
|                 (status, reboot_required) = plugin.execute(service, | ||||
|                                                            shared_data) | ||||
|                 self._set_plugin_status(osutils, plugin_name, status) | ||||
|                 self._set_plugin_status(osutils, instance_id, plugin_name, | ||||
|                                         status) | ||||
|                 return reboot_required | ||||
|             except Exception, ex: | ||||
|                 LOG.error('plugin \'%(plugin_name)s\' failed ' | ||||
| @@ -98,6 +105,9 @@ class InitManager(object): | ||||
|         LOG.info('Metadata service loaded: \'%s\'' % | ||||
|                  service.get_name()) | ||||
|  | ||||
|         instance_id = service.get_instance_id() | ||||
|         LOG.debug('Instance id: %s', instance_id) | ||||
|  | ||||
|         plugins = plugins_factory.PluginFactory().load_plugins() | ||||
|  | ||||
|         plugins_shared_data = {} | ||||
| @@ -107,7 +117,7 @@ class InitManager(object): | ||||
|             for plugin in plugins: | ||||
|                 if self._check_plugin_os_requirements(osutils, plugin): | ||||
|                     if self._exec_plugin(osutils, service, plugin, | ||||
|                                          plugins_shared_data): | ||||
|                                          instance_id, plugins_shared_data): | ||||
|                         reboot_required = True | ||||
|                         if CONF.allow_reboot: | ||||
|                             break | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Alessandro Pilotti
					Alessandro Pilotti