From 82f49dd3f9fca03f1d364dec6b9c60c70c9ecc0d Mon Sep 17 00:00:00 2001 From: Sol Jerome Date: Wed, 1 Jul 2009 18:02:21 +0000 Subject: Plugin.py: Add configurable metadata settings to bcfg2.conf (ticket #680) The default settings for ConfigFile metadata were previously hardcoded in Plugin.py. This change enables setting global user-specified defaults in the [mdata] section of bcfg2.conf. Signed-off-by: Sol Jerome git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@5308 ce84e21b-d406-0410-9b95-82705330c041 --- man/bcfg2.conf.5 | 20 ++++++++++++++++++++ src/lib/Options.py | 12 ++++++++++++ src/lib/Server/Plugin.py | 33 ++++++++++++++++++++++++++------- 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/man/bcfg2.conf.5 b/man/bcfg2.conf.5 index ab09b588b..320987160 100644 --- a/man/bcfg2.conf.5 +++ b/man/bcfg2.conf.5 @@ -48,6 +48,26 @@ The file monitor used to watch for changes in the repository. Values of 'gamin', 'fam', or 'pseudo' are valid. +.SH MDATA OPTIONS +These options affect the default metadata settings for ConfigFiles. + +.TP +.B owner +Global owner for ConfigFiles (defaults to root) + +.TP +.B group +Global group for ConfigFiles (defaults to root) + +.TP +.B perms +Global permissions for ConfigFiles (defaults to 644) + +.TP +.B paranoid +Global paranoid settings for ConfigFiles (defaults to false) + + .SH CLIENT OPTIONS These options only affect client functionality, specified in the [client] section. diff --git a/src/lib/Options.py b/src/lib/Options.py index ea3630389..716c21f09 100644 --- a/src/lib/Options.py +++ b/src/lib/Options.py @@ -176,6 +176,18 @@ 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', + default='root', cf=('mdata', 'owner'), + odesc='owner permissions') +MDATA_GROUP = Option('Default ConfigFile group', + default='root', cf=('mdata', 'group'), + odesc='group permissions') +MDATA_PERMS = Option('Default ConfigFile permissions', + '644', cf=('mdata', 'perms'), + odesc='octal permissions') +MDATA_PARANOID = Option('Default ConfigFile paranoid setting', + 'false', cf=('mdata', 'paranoid'), + odesc='ConfigFile 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 f0cbaa693..269508b13 100644 --- a/src/lib/Server/Plugin.py +++ b/src/lib/Server/Plugin.py @@ -1,14 +1,28 @@ '''This module provides the baseclass for Bcfg2 Server Plugins''' __revision__ = '$Revision$' -import logging, lxml.etree, re, copy, posixpath +import copy +import logging +import lxml.etree +import posixpath +import re from lxml.etree import XML, XMLSyntaxError +import Bcfg2.Options + +# grab default metadata info from bcfg2.conf +opts = {'owner':Bcfg2.Options.MDATA_OWNER, + 'group':Bcfg2.Options.MDATA_GROUP, + 'perms':Bcfg2.Options.MDATA_PERMS, + 'paranoid':Bcfg2.Options.MDATA_PARANOID} +mdata_setup = Bcfg2.Options.OptionParser(opts) +mdata_setup.parse([]) +del mdata_setup['args'] + logger = logging.getLogger('Bcfg2.Plugin') -default_file_metadata = {'owner': 'root', 'group': 'root', 'perms': '644', - 'encoding': 'ascii', 'paranoid':"false"} +default_file_metadata = mdata_setup info_regex = re.compile( \ '^owner:(\s)*(?P\S+)|group:(\s)*(?P\S+)|' + @@ -24,8 +38,8 @@ class PluginExecutionError(Exception): pass class Plugin(object): - '''This is the base class for all Bcfg2 Server plugins. Several attributes must be defined - in the subclass: + '''This is the base class for all Bcfg2 Server plugins. + Several attributes must be defined in the subclass: name : the name of the plugin __version__ : a version string __author__ : the author/contact for the plugin @@ -211,7 +225,10 @@ class DirectoryBacked(object): elif name in self.entries: self.entries[name].HandleEvent() else: - if ((name[-1] == '~') or (name[:2] == '.#') or (name[-4:] == '.swp') or (name in ['SCCS', '.svn'])): + if ((name[-1] == '~') or + (name[:2] == '.#') or + (name[-4:] == '.swp') or + (name in ['SCCS', '.svn'])): return if not self.patterns.match(name): return @@ -238,7 +255,9 @@ class DirectoryBacked(object): elif action in ['endExist']: pass else: - print "Got unknown event %s %s %s" % (event.requestID, event.code2str(), event.filename) + print "Got unknown event %s %s %s" % (event.requestID, + event.code2str(), + event.filename) class XMLFileBacked(FileBacked): '''This object is a coherent cache for an XML file to be used as a part of DirectoryBacked.''' -- cgit v1.2.3-1-g7c22