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:
parent
bad73c7abe
commit
198065f2ca
@ -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
|
||||
|
@ -78,6 +78,9 @@ class BaseMetadataService(object):
|
||||
self._cache[path] = data
|
||||
return data
|
||||
|
||||
def get_instance_id(self):
|
||||
pass
|
||||
|
||||
def get_content(self, name):
|
||||
pass
|
||||
|
||||
|
@ -56,6 +56,9 @@ class BaseOpenStackService(base.BaseMetadataService):
|
||||
else:
|
||||
return data
|
||||
|
||||
def get_instance_id(self):
|
||||
return self._get_meta_data().get('uuid')
|
||||
|
||||
def get_host_name(self):
|
||||
return self._get_meta_data().get('hostname')
|
||||
|
||||
|
@ -389,7 +389,7 @@ class WindowsUtils(base.BaseOSUtils):
|
||||
def _get_config_key_name(self, section):
|
||||
key_name = self._config_key
|
||||
if section:
|
||||
key_name += section + '\\'
|
||||
key_name += section.replace('/', '\\') + '\\'
|
||||
return key_name
|
||||
|
||||
def set_config_value(self, name, value, section=None):
|
||||
|
Loading…
x
Reference in New Issue
Block a user