Yeela Kaplan has uploaded a new change for review.
Change subject: [WIP]configurators: move configurator functions into conf_utils ......................................................................
[WIP]configurators: move configurator functions into conf_utils
Change-Id: Id67a0f51adb2d543c0542a48c020d34a13d1f2ed Signed-off-by: Yeela Kaplan ykaplan@redhat.com --- M lib/vdsm/tool/Makefile.am A lib/vdsm/tool/conf_utils.py M vdsm.spec.in 3 files changed, 110 insertions(+), 1 deletion(-)
git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/86/44286/1
diff --git a/lib/vdsm/tool/Makefile.am b/lib/vdsm/tool/Makefile.am index c8979ca..c3ed0cc 100644 --- a/lib/vdsm/tool/Makefile.am +++ b/lib/vdsm/tool/Makefile.am @@ -35,7 +35,8 @@ dump_bonding_defaults.py \ dump_volume_chains.py \ nwfilter.py \ - configfile.py \ + conf_utils.py \ + configfile.py \ configurator.py \ register.py \ restore_nets.py \ diff --git a/lib/vdsm/tool/conf_utils.py b/lib/vdsm/tool/conf_utils.py new file mode 100644 index 0000000..1308097 --- /dev/null +++ b/lib/vdsm/tool/conf_utils.py @@ -0,0 +1,107 @@ +# Copyright 2015 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +# +# Refer to the README and COPYING files for full details of the license +# +import os + +from .. configfile import ( + ConfigFile, +) + +from ... import utils + +if utils.isOvirtNode(): + from ovirt.node.utils.fs import Config as NodeCfg + + +def get_file(fname, files): + return files[fname]['path'] + + +def remove_conf(files, version): + for cfile, content in files.items(): + content['removeConf'](content['path'], version) + + +def add_section(content, version, vdsmConfiguration={}): + """ + Add a 'configuration section by vdsm' part to a config file. + This section contains only keys not originally defined + The section headers will include the current configuration version. + """ + configuration = {} + for fragment in content['fragments']: + if vdsmConfiguration: + if is_applicable(fragment, vdsmConfiguration): + configuration.update(fragment['content']) + else: + configuration.update(fragment['content']) + if configuration: + with open_config(content['path'], version) as conff: + for key, val in configuration.items(): + conff.addEntry(key, val) + + +def remove_section(path, version): + """ + remove entire 'configuration section by vdsm' section. + section is removed regardless of it's version. + """ + if os.path.exists(path): + with open_config(path, version) as conff: + conff.removeConf() + + +def remove_file(content, vdsmConfiguration): + """ + delete a file if it exists. + """ + if utils.isOvirtNode(): + NodeCfg().delete(content['path']) + else: + try: + os.unlink(content['path']) + except OSError as e: + if e.errno != errno.ENOENT: + raise + + +def get_persisted_files(files): + """ + get files where vdsm is expected to add a section. + """ + return [ + cfile['path'] for cfile in files.values() + if cfile['persisted'] + ] + + +def open_config(path, conf_version): + return ConfigFile(path, conf_version) + + +def is_applicable(fragment, vdsmConfiguration): + """ + Return true if 'fragment' should be included for current + configuration. An applicable fragment is a fragment who's list + of conditions are met according to vdsmConfiguration. + """ + applyFragment = True + for key, booleanValue in fragment['conditions'].items(): + if vdsmConfiguration[key] != booleanValue: + applyFragment = False + return applyFragment diff --git a/vdsm.spec.in b/vdsm.spec.in index 5020d8b..21e1b50 100644 --- a/vdsm.spec.in +++ b/vdsm.spec.in @@ -1094,6 +1094,7 @@ %{python_sitelib}/%{vdsm_name}/tool/dummybr.py* %{python_sitelib}/%{vdsm_name}/tool/dump_bonding_defaults.py* %{python_sitelib}/%{vdsm_name}/tool/nwfilter.py* +%{python_sitelib}/%{vdsm_name}/tool/conf_utils.py* %{python_sitelib}/%{vdsm_name}/tool/configurator.py* %{python_sitelib}/%{vdsm_name}/tool/configurators/__init__* %{python_sitelib}/%{vdsm_name}/tool/configurators/certificates.py*