# Copyright 2012 Cloudbase Solutions Srl # # Licensed under the Apache License, Version 2.0 (the "License"); you may # not use this file except in compliance with the License. You may obtain # a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. from oslo_log import log as oslo_logging from cloudbaseinit import conf as cloudbaseinit_conf from cloudbaseinit.utils import classloader CONF = cloudbaseinit_conf.CONF LOG = oslo_logging.getLogger(__name__) # Some plugins were moved to plugins.common, in order to # better reflect the fact that they are not platform specific. # Unfortunately, there are a lot of users out there with old # config files which are using the old plugin names. # So in order not to crash cloudbaseinit for their cases, # we provide this explicit mapping. This will be removed # when we'll reach 1.0 though. OLD_PLUGINS = { 'cloudbaseinit.plugins.windows.mtu.MTUPlugin': 'cloudbaseinit.plugins.common.mtu.MTUPlugin', 'cloudbaseinit.plugins.windows.sethostname.SetHostNamePlugin': 'cloudbaseinit.plugins.common.sethostname.SetHostNamePlugin', 'cloudbaseinit.plugins.windows.networkconfig.NetworkConfigPlugin': 'cloudbaseinit.plugins.common.networkconfig.NetworkConfigPlugin', 'cloudbaseinit.plugins.windows.sshpublickeys.SetUserSSHPublicKeysPlugin': 'cloudbaseinit.plugins.common.sshpublickeys.SetUserSSHPublicKeysPlugin', 'cloudbaseinit.plugins.windows.userdata.UserDataPlugin': 'cloudbaseinit.plugins.common.userdata.UserDataPlugin', 'cloudbaseinit.plugins.windows.setuserpassword.SetUserPasswordPlugin': 'cloudbaseinit.plugins.common.setuserpassword.SetUserPasswordPlugin', 'cloudbaseinit.plugins.windows.localscripts.LocalScriptsPlugin': 'cloudbaseinit.plugins.common.localscripts.LocalScriptsPlugin', } def load_plugins(stage): plugins = [] cl = classloader.ClassLoader() for class_path in CONF.plugins: if class_path in OLD_PLUGINS: new_class_path = OLD_PLUGINS[class_path] LOG.warning("Old plugin module %r was found. The new name is %r. " "The old name will not be supported starting with " "cloudbaseinit 1.0", class_path, new_class_path) class_path = new_class_path try: plugin_cls = cl.load_class(class_path) if not stage or plugin_cls.execution_stage == stage: plugin = plugin_cls() plugins.append(plugin) except ImportError: LOG.error("Could not import plugin module %r", class_path) continue return plugins