From 224025473e2f37c684c80556fdeb8102ddaf3b13 Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Tue, 22 Jun 2010 17:30:07 +0000 Subject: Add the ability to specify important entries via info/info.xml We currently have 'important' entries specified only inside the code for various client tools. This provides no room for growing that list outside of adding things to the code itself. With this change, users can now specify important entries via an additional attribute in their info.xml files. Signed-off-by: Sol Jerome git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5957 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Client/Tools/APT.py | 3 ++- src/lib/Client/Tools/Portage.py | 2 +- src/lib/Client/Tools/YUMng.py | 3 ++- src/lib/Client/Tools/__init__.py | 3 +++ src/lib/Options.py | 13 ++++++++----- src/lib/Server/Plugin.py | 11 ++++++++--- 6 files changed, 24 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/lib/Client/Tools/APT.py b/src/lib/Client/Tools/APT.py index 8157d9e6c..1c035f956 100644 --- a/src/lib/Client/Tools/APT.py +++ b/src/lib/Client/Tools/APT.py @@ -47,7 +47,8 @@ class APT(Bcfg2.Client.Tools.Tool): def __init__(self, logger, setup, config): Bcfg2.Client.Tools.Tool.__init__(self, logger, setup, config) - self.__important__ = ["%s/cache/debconf/config.dat" % var_path, + self.__important__ = self.__important__ + \ + ["%s/cache/debconf/config.dat" % var_path, "%s/cache/debconf/templates.dat" % var_path, '/etc/passwd', '/etc/group', '%s/apt/apt.conf' % etc_path, diff --git a/src/lib/Client/Tools/Portage.py b/src/lib/Client/Tools/Portage.py index dad9c4f3a..765e981fe 100644 --- a/src/lib/Client/Tools/Portage.py +++ b/src/lib/Client/Tools/Portage.py @@ -9,7 +9,6 @@ class Portage(Bcfg2.Client.Tools.PkgTool): the rest from Toolset.Toolset.""" name = 'Portage' __execs__ = ['/usr/bin/emerge', '/usr/bin/equery'] - __important__ = ['/etc/make.conf'] __handles__ = [('Package', 'ebuild')] __req__ = {'Package': ['name', 'version']} pkgtype = 'ebuild' @@ -18,6 +17,7 @@ class Portage(Bcfg2.Client.Tools.PkgTool): def __init__(self, logger, cfg, setup): Bcfg2.Client.Tools.PkgTool.__init__(self, logger, cfg, setup) + self.__important__ = self.__important__ + ['/etc/make.conf'] self.cfg = cfg self.installed = {} self.RefreshPackages() diff --git a/src/lib/Client/Tools/YUMng.py b/src/lib/Client/Tools/YUMng.py index de5b221c1..a203b6961 100644 --- a/src/lib/Client/Tools/YUMng.py +++ b/src/lib/Client/Tools/YUMng.py @@ -75,7 +75,8 @@ class YUMng(Bcfg2.Client.Tools.RPMng.RPMng): def __init__(self, logger, setup, config): Bcfg2.Client.Tools.RPMng.RPMng.__init__(self, logger, setup, config) - self.__important__ = [entry.get('name') for struct in config \ + self.__important__ = self.__important__ + \ + [entry.get('name') for struct in config \ for entry in struct \ if entry.tag in ['Path', 'ConfigFile'] and \ (entry.get('name').startswith('/etc/yum.d') \ diff --git a/src/lib/Client/Tools/__init__.py b/src/lib/Client/Tools/__init__.py index 8ab815022..59f66612d 100644 --- a/src/lib/Client/Tools/__init__.py +++ b/src/lib/Client/Tools/__init__.py @@ -102,6 +102,9 @@ class Tool: __important__ = [] def __init__(self, logger, setup, config): + self.__important__ = [entry.get('name') for struct in config for entry in struct \ + if entry.tag == 'Path' and \ + entry.get('important') in ['true', 'True']] self.setup = setup self.logger = logger if not hasattr(self, '__ireq__'): diff --git a/src/lib/Options.py b/src/lib/Options.py index abdfedc51..11dd41205 100644 --- a/src/lib/Options.py +++ b/src/lib/Options.py @@ -181,18 +181,21 @@ DEBUG = Option("Enable debugging output", False, cmd='-d') VERBOSE = Option("Enable verbose output", False, cmd='-v') DAEMON = Option("Daemonize process, storing pid", False, cmd='-D', odesc="") -MDATA_OWNER = Option('Default ConfigFile owner', +MDATA_OWNER = Option('Default Path owner', default='root', cf=('mdata', 'owner'), odesc='owner permissions') -MDATA_GROUP = Option('Default ConfigFile group', +MDATA_GROUP = Option('Default Path group', default='root', cf=('mdata', 'group'), odesc='group permissions') -MDATA_PERMS = Option('Default ConfigFile permissions', +MDATA_IMPORTANT = Option('Default Path priority (importance)', + default='False', cf=('mdata', 'important'), + odesc='Important entries are installed first') +MDATA_PERMS = Option('Default Path permissions', '644', cf=('mdata', 'perms'), odesc='octal permissions') -MDATA_PARANOID = Option('Default ConfigFile paranoid setting', +MDATA_PARANOID = Option('Default Path paranoid setting', 'false', cf=('mdata', 'paranoid'), - odesc='ConfigFile paranoid setting') + odesc='Path paranoid setting') SERVER_REPOSITORY = Option('Server repository path', '/var/lib/bcfg2', cf=('server', 'repository'), cmd='-Q', diff --git a/src/lib/Server/Plugin.py b/src/lib/Server/Plugin.py index 765d908dc..2c2f0a21d 100644 --- a/src/lib/Server/Plugin.py +++ b/src/lib/Server/Plugin.py @@ -18,6 +18,7 @@ import Bcfg2.Options # grab default metadata info from bcfg2.conf opts = {'owner': Bcfg2.Options.MDATA_OWNER, 'group': Bcfg2.Options.MDATA_GROUP, + 'important': Bcfg2.Options.MDATA_IMPORTANT, 'perms': Bcfg2.Options.MDATA_PERMS, 'paranoid': Bcfg2.Options.MDATA_PARANOID} mdata_setup = Bcfg2.Options.OptionParser(opts) @@ -29,9 +30,13 @@ logger = logging.getLogger('Bcfg2.Plugin') default_file_metadata = mdata_setup info_regex = re.compile( \ - '^owner:(\s)*(?P\S+)|group:(\s)*(?P\S+)|' + - 'perms:(\s)*(?P\w+)|encoding:(\s)*(?P\w+)|' + - 'paranoid:(\s)*(?P\S+)|mtime:(\s)*(?P\w+)$') + 'encoding:(\s)*(?P\w+)|' + + 'group:(\s)*(?P\S+)|' + + 'important:(\s)*(?P\S+)|' + + 'mtime:(\s)*(?P\w+)$' + + '^owner:(\s)*(?P\S+)|' + + 'paranoid:(\s)*(?P\S+)|' + + 'perms:(\s)*(?P\w+)|') class PluginInitError(Exception): """Error raised in cases of Plugin initialization errors.""" -- cgit v1.2.3-1-g7c22