From dfa4f0ef8a7f324db651056ab6f0fb30460764c5 Mon Sep 17 00:00:00 2001 From: Alessandro Pilotti Date: Tue, 22 Jul 2014 18:24:26 +0300 Subject: [PATCH] Adds the LocalScriptsPlugin plugin This plugin allows the execution of arbitrary scripts located in the CONF.local_scripts_path dir --- cloudbaseinit/plugins/factory.py | 1 + cloudbaseinit/plugins/windows/localscripts.py | 43 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 cloudbaseinit/plugins/windows/localscripts.py diff --git a/cloudbaseinit/plugins/factory.py b/cloudbaseinit/plugins/factory.py index 758a7ca7..a3e2827f 100644 --- a/cloudbaseinit/plugins/factory.py +++ b/cloudbaseinit/plugins/factory.py @@ -38,6 +38,7 @@ opts = [ 'ConfigWinRMListenerPlugin', 'cloudbaseinit.plugins.windows.winrmcertificateauth.' 'ConfigWinRMCertificateAuthPlugin', + 'cloudbaseinit.plugins.windows.localscripts.LocalScriptsPlugin', ], help='List of enabled plugin classes, ' 'to executed in the provided order'), diff --git a/cloudbaseinit/plugins/windows/localscripts.py b/cloudbaseinit/plugins/windows/localscripts.py new file mode 100644 index 00000000..c3165dbc --- /dev/null +++ b/cloudbaseinit/plugins/windows/localscripts.py @@ -0,0 +1,43 @@ +# Copyright 2014 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. + +import os + +from oslo.config import cfg + +from cloudbaseinit.plugins import base +from cloudbaseinit.plugins.windows import fileexecutils + +opts = [ + cfg.StrOpt('local_scripts_path', default=None, + help='Path location containing scripts to be executed when ' + 'the plugin runs'), +] + +CONF = cfg.CONF +CONF.register_opts(opts) + + +class LocalScriptsPlugin(base.BasePlugin): + + def _get_files_in_dir(self, path): + return sorted([os.path.join(path, f) for f in os.listdir(path) + if os.path.isfile(os.path.join(path, f))]) + + def execute(self, service, shared_data): + if CONF.local_scripts_path: + for file_path in self._get_files_in_dir(CONF.local_scripts_path): + fileexecutils.exec_file(file_path) + + return (base.PLUGIN_EXECUTION_DONE, False)