summaryrefslogtreecommitdiffstats
path: root/src/lib/Bcfg2/Server
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/Bcfg2/Server')
-rw-r--r--src/lib/Bcfg2/Server/Admin/__init__.py3
-rw-r--r--src/lib/Bcfg2/Server/Core.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugin.py62
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/PackagesConfig.py15
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/PackagesSources.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Source.py8
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Yum.py42
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/__init__.py47
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Rules.py6
9 files changed, 62 insertions, 137 deletions
diff --git a/src/lib/Bcfg2/Server/Admin/__init__.py b/src/lib/Bcfg2/Server/Admin/__init__.py
index fdb9a0972..618fa450e 100644
--- a/src/lib/Bcfg2/Server/Admin/__init__.py
+++ b/src/lib/Bcfg2/Server/Admin/__init__.py
@@ -122,7 +122,8 @@ class MetadataCore(Mode):
setup['plugins'],
setup['password'],
setup['encoding'],
- filemonitor=setup['filemonitor'])
+ filemonitor=setup['filemonitor'],
+ setup=setup)
if setup['event debug']:
self.bcore.fam.debug = True
except Bcfg2.Server.Core.CoreInitError:
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py
index a253fd367..8482925b7 100644
--- a/src/lib/Bcfg2/Server/Core.py
+++ b/src/lib/Bcfg2/Server/Core.py
@@ -62,7 +62,7 @@ class Core(Component):
implementation = 'bcfg2-server'
def __init__(self, repo, plugins, password, encoding,
- cfile='/etc/bcfg2.conf', ca=None,
+ cfile='/etc/bcfg2.conf', ca=None, setup=None,
filemonitor='default', start_fam_thread=False):
Component.__init__(self)
self.datastore = repo
@@ -85,6 +85,7 @@ class Core(Component):
self.revision = '-1'
self.password = password
self.encoding = encoding
+ self.setup = setup
atexit.register(self.shutdown)
# Create an event to signal worker threads to shutdown
self.terminate = threading.Event()
@@ -131,6 +132,11 @@ class Core(Component):
self.fam_thread = threading.Thread(target=self._file_monitor_thread)
if start_fam_thread:
self.fam_thread.start()
+ self.monitor_cfile()
+
+ def monitor_cfile(self):
+ if self.setup:
+ self.fam.AddMonitor(self.cfile, self.setup)
def plugins_by_type(self, base_cls):
"""Return a list of loaded plugins that match the passed type.
diff --git a/src/lib/Bcfg2/Server/Plugin.py b/src/lib/Bcfg2/Server/Plugin.py
index d7b4baf45..ca37431a2 100644
--- a/src/lib/Bcfg2/Server/Plugin.py
+++ b/src/lib/Bcfg2/Server/Plugin.py
@@ -1211,65 +1211,3 @@ class GroupSpool(Plugin, Generator):
return
reqid = self.core.fam.AddMonitor(name, self)
self.handles[reqid] = relative
-
-class SimpleConfig(FileBacked,
- ConfigParser.SafeConfigParser):
- ''' a simple plugin config using ConfigParser '''
- _required = True
-
- def __init__(self, plugin):
- filename = os.path.join(plugin.data, plugin.name.lower() + ".conf")
- self.plugin = plugin
- self.fam = self.plugin.core.fam
- self.read_files = set()
- Bcfg2.Server.Plugin.FileBacked.__init__(self, filename)
- ConfigParser.SafeConfigParser.__init__(self)
-
- if (self._required or
- (not self._required and os.path.exists(self.name))):
- self.fam.AddMonitor(self.name, self)
-
- def Index(self):
- """ Build local data structures """
- for section in self.sections():
- self.remove_section(section)
- self.read_files.update(self.read(self.name))
-
- def get(self, section, option, **kwargs):
- """ convenience method for getting config items """
- default = None
- if 'default' in kwargs:
- default = kwargs['default']
- del kwargs['default']
- try:
- return ConfigParser.SafeConfigParser.get(self, section, option,
- **kwargs)
- except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
- if default is not None:
- return default
- else:
- raise
-
- def getboolean(self, section, option, **kwargs):
- """ convenience method for getting boolean config items """
- default = None
- if 'default' in kwargs:
- default = kwargs['default']
- del kwargs['default']
- try:
- return ConfigParser.SafeConfigParser.getboolean(self, section,
- option, **kwargs)
- except (ConfigParser.NoSectionError, ConfigParser.NoOptionError,
- ValueError):
- if default is not None:
- return default
- else:
- raise
-
- @property
- def loaded(self):
- if os.path.exists(self.name):
- return self.name in self.read_files
- else:
- return True
-
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/PackagesConfig.py b/src/lib/Bcfg2/Server/Plugins/Packages/PackagesConfig.py
deleted file mode 100644
index 3846c06ce..000000000
--- a/src/lib/Bcfg2/Server/Plugins/Packages/PackagesConfig.py
+++ /dev/null
@@ -1,15 +0,0 @@
-import Bcfg2.Server.Plugin
-
-class PackagesConfig(Bcfg2.Server.Plugin.SimpleConfig):
- _required = False
-
- def Index(self):
- """ Build local data structures """
- Bcfg2.Server.Plugin.SimpleConfig.Index(self)
-
- if hasattr(self.plugin, "sources") and self.plugin.sources.loaded:
- # only reload Packages plugin if sources have been loaded.
- # otherwise, this is getting called on server startup, and
- # we have to wait until all sources have been indexed
- # before we can call Packages.Reload()
- self.plugin.Reload()
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/PackagesSources.py b/src/lib/Bcfg2/Server/Plugins/Packages/PackagesSources.py
index a966268c0..7796b9e34 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/PackagesSources.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/PackagesSources.py
@@ -9,7 +9,7 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
Bcfg2.Server.Plugin.Debuggable):
__identifier__ = None
- def __init__(self, filename, cachepath, fam, packages, config):
+ def __init__(self, filename, cachepath, fam, packages, setup):
Bcfg2.Server.Plugin.Debuggable.__init__(self)
try:
Bcfg2.Server.Plugin.SingleXMLFileBacked.__init__(self,
@@ -24,7 +24,7 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
raise Bcfg2.Server.Plugin.PluginInitError(msg)
Bcfg2.Server.Plugin.StructFile.__init__(self, filename)
self.cachepath = cachepath
- self.config = config
+ self.setup = setup
if not os.path.exists(self.cachepath):
# create cache directory if needed
try:
@@ -56,7 +56,7 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
self.parsed.add(fname)
break
- if self.config.loaded and self.loaded:
+ if self.loaded:
self.logger.info("Reloading Packages plugin")
self.pkg_obj.Reload()
@@ -91,7 +91,7 @@ class PackagesSources(Bcfg2.Server.Plugin.SingleXMLFileBacked,
return None
try:
- source = cls(self.cachepath, xsource, self.config)
+ source = cls(self.cachepath, xsource, self.setup)
except SourceInitError:
err = sys.exc_info()[1]
self.logger.error("Packages: %s" % err)
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Source.py b/src/lib/Bcfg2/Server/Plugins/Packages/Source.py
index ada04c067..edcdcd9f2 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Source.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Source.py
@@ -36,11 +36,11 @@ class Source(Bcfg2.Server.Plugin.Debuggable):
genericrepo_re = re.compile('https?://.*?/([^/]+)/?$')
basegroups = []
- def __init__(self, basepath, xsource, config):
+ def __init__(self, basepath, xsource, setup):
Bcfg2.Server.Plugin.Debuggable.__init__(self)
self.basepath = basepath
self.xsource = xsource
- self.config = config
+ self.setup = setup
self.essentialpkgs = set()
try:
@@ -272,8 +272,8 @@ class Source(Bcfg2.Server.Plugin.Debuggable):
if not found_arch:
return False
- if self.config.getboolean("global", "magic_groups",
- default=True) == False:
+ if not self.setup.cfp.getboolean("packages", "magic_groups",
+ default=True):
return True
else:
for group in self.basegroups:
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
index 941203db3..53344e200 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Yum.py
@@ -15,7 +15,6 @@ from Bcfg2.Bcfg2Py3k import StringIO, cPickle, HTTPError, ConfigParser, file
from Bcfg2.Server.Plugins.Packages.Collection import Collection
from Bcfg2.Server.Plugins.Packages.Source import SourceInitError, Source, \
fetch_url
-from Bcfg2.Server.Plugins.Packages.PackagesConfig import PackagesConfig
logger = logging.getLogger(__name__)
@@ -50,7 +49,7 @@ PULPSERVER = None
PULPCONFIG = None
-def _setup_pulp(config):
+def _setup_pulp(setup):
global PULPSERVER, PULPCONFIG
if not has_pulp:
msg = "Packages: Cannot create Pulp collection: Pulp libraries not found"
@@ -59,8 +58,8 @@ def _setup_pulp(config):
if PULPSERVER is None:
try:
- username = config.get("pulp", "username")
- password = config.get("pulp", "password")
+ username = setup.cfp.get("packages:pulp", "username")
+ password = setup.cfp.get("packages:pulp", "password")
except ConfigParser.NoSectionError:
msg = "Packages: No [pulp] section found in Packages/packages.conf"
logger.error(msg)
@@ -91,11 +90,6 @@ class YumCollection(Collection):
Collection.__init__(self, metadata, sources, basepath, debug=debug)
self.keypath = os.path.join(self.basepath, "keys")
- if len(sources):
- self.config = sources[0].config
- else:
- self.config = PackageConfig('Packages')
-
if self.use_yum:
self.cachefile = os.path.join(self.cachepath,
"cache-%s" % self.cachekey)
@@ -109,17 +103,18 @@ class YumCollection(Collection):
"%s-yum.conf" % self.cachekey)
self.write_config()
if has_pulp and self.has_pulp_sources:
- _setup_pulp(self.config)
+ _setup_pulp(self.setup)
@property
def helper(self):
- return self.config.get("yum", "helper",
- default="/usr/sbin/bcfg2-yum-helper")
+ return self.setup.cfp.get("packages:yum", "helper",
+ default="/usr/sbin/bcfg2-yum-helper")
@property
def use_yum(self):
- return has_yum and self.config.getboolean("yum", "use_yum_libraries",
- default=False)
+ return has_yum and self.setup.cfp.getboolean("packages:yum",
+ "use_yum_libraries",
+ default=False)
@property
def has_pulp_sources(self):
@@ -140,9 +135,9 @@ class YumCollection(Collection):
debuglevel="0",
reposdir="/dev/null")
try:
- for opt in self.config.options("yum"):
+ for opt in self.setup.cfp.options("packages:yum"):
if opt not in self.option_blacklist:
- mainopts[opt] = self.config.get("yum", opt)
+ mainopts[opt] = self.setup.cfp.get("packages:yum", opt)
except ConfigParser.NoSectionError:
pass
@@ -228,8 +223,8 @@ class YumCollection(Collection):
for key in needkeys:
# figure out the path of the key on the client
- keydir = self.config.get("global", "gpg_keypath",
- default="/etc/pki/rpm-gpg")
+ keydir = self.setup.cfp.get("global", "gpg_keypath",
+ default="/etc/pki/rpm-gpg")
remotekey = os.path.join(keydir, os.path.basename(key))
localkey = os.path.join(self.keypath, os.path.basename(key))
kdata = open(localkey).read()
@@ -451,13 +446,13 @@ class YumSource(Source):
basegroups = ['yum', 'redhat', 'centos', 'fedora']
ptype = 'yum'
- def __init__(self, basepath, xsource, config):
- Source.__init__(self, basepath, xsource, config)
+ def __init__(self, basepath, xsource, setup):
+ Source.__init__(self, basepath, xsource, setup)
self.pulp_id = None
if has_pulp and xsource.get("pulp_id"):
self.pulp_id = xsource.get("pulp_id")
- _setup_pulp(self.config)
+ _setup_pulp(self.setup)
repoapi = RepositoryAPI()
try:
self.repo = repoapi.repository(self.pulp_id)
@@ -499,8 +494,9 @@ class YumSource(Source):
@property
def use_yum(self):
- return has_yum and self.config.getboolean("yum", "use_yum_libraries",
- default=False)
+ return has_yum and self.setup.cfp.getboolean("packages:yum",
+ "use_yum_libraries",
+ default=False)
def save_state(self):
if not self.use_yum:
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
index 4070b13ca..d789a6d39 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/__init__.py
@@ -10,7 +10,6 @@ import Bcfg2.Server.Plugin
from Bcfg2.Bcfg2Py3k import ConfigParser, urlopen
from Bcfg2.Server.Plugins.Packages import Collection
from Bcfg2.Server.Plugins.Packages.PackagesSources import PackagesSources
-from Bcfg2.Server.Plugins.Packages.PackagesConfig import PackagesConfig
class Packages(Bcfg2.Server.Plugin.Plugin,
Bcfg2.Server.Plugin.StructureValidator,
@@ -36,11 +35,9 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
# create key directory if needed
os.makedirs(self.keypath)
- # set up config files
- self.config = PackagesConfig(self)
self.sources = PackagesSources(os.path.join(self.data, "sources.xml"),
self.cachepath, core.fam, self,
- self.config)
+ self.core.setup)
def toggle_debug(self):
Bcfg2.Server.Plugin.Plugin.toggle_debug(self)
@@ -49,7 +46,7 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
@property
def disableResolver(self):
try:
- return not self.config.getboolean("global", "resolver")
+ return not self.core.setup.cfp.getboolean("packages", "resolver")
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
return False
except ValueError:
@@ -57,20 +54,20 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
# "disabled", which are not handled according to the
# Python docs but appear to be handled properly by
# ConfigParser in at least some versions
- return self.config.get("global", "resolver",
- default="enabled").lower() == "disabled"
+ return self.core.setup.cfp.get("packages", "resolver",
+ default="enabled").lower() == "disabled"
@property
def disableMetaData(self):
try:
- return not self.config.getboolean("global", "resolver")
+ return not self.core.setup.cfp.getboolean("packages", "resolver")
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
return False
except ValueError:
# for historical reasons we also accept "enabled" and
# "disabled"
- return self.config.get("global", "metadata",
- default="enabled").lower() == "disabled"
+ return self.core.setup.cfp.get("packages", "metadata",
+ default="enabled").lower() == "disabled"
def create_config(self, entry, metadata):
""" create yum/apt config for the specified host """
@@ -89,20 +86,23 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
def HandleEntry(self, entry, metadata):
if entry.tag == 'Package':
collection = self._get_collection(metadata)
- entry.set('version', self.config.get("global",
+ entry.set('version', self.core.setup.cfp.get("packages",
"version",
default="auto"))
entry.set('type', collection.ptype)
elif entry.tag == 'Path':
- if (entry.get("name") == self.config.get("global", "yum_config",
- default="") or
- entry.get("name") == self.config.get("global", "apt_config",
- default="")):
+ if (entry.get("name") == self.core.setup.cfp.get("packages",
+ "yum_config",
+ default="") or
+ entry.get("name") == self.core.setup.cfp.get("packages",
+ "apt_config",
+ default="")):
self.create_config(entry, metadata)
def HandlesEntry(self, entry, metadata):
if entry.tag == 'Package':
- if self.config.getboolean("global", "magic_groups", default=True):
+ if self.core.setup.cfp.getboolean("packages", "magic_groups",
+ default=True):
collection = self._get_collection(metadata)
if collection.magic_groups_match():
return True
@@ -110,10 +110,12 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
return True
elif entry.tag == 'Path':
# managed entries for yum/apt configs
- if (entry.get("name") == self.config.get("global", "yum_config",
- default="") or
- entry.get("name") == self.config.get("global", "apt_config",
- default="")):
+ if (entry.get("name") == self.core.setup.cfp.get("packages",
+ "yum_config",
+ default="") or
+ entry.get("name") == self.core.setup.cfp.get("packages",
+ "apt_config",
+ default="")):
return True
return False
@@ -183,8 +185,9 @@ class Packages(Bcfg2.Server.Plugin.Plugin,
newpkgs.sort()
for pkg in newpkgs:
lxml.etree.SubElement(independent, 'BoundPackage', name=pkg,
- version=self.config.get("global", "version",
- default="auto"),
+ version=self.core.setup.cfp.get("packages",
+ "version",
+ default="auto"),
type=collection.ptype, origin='Packages')
def Refresh(self):
diff --git a/src/lib/Bcfg2/Server/Plugins/Rules.py b/src/lib/Bcfg2/Server/Plugins/Rules.py
index b80ef351a..e77d08653 100644
--- a/src/lib/Bcfg2/Server/Plugins/Rules.py
+++ b/src/lib/Bcfg2/Server/Plugins/Rules.py
@@ -3,9 +3,6 @@
import re
import Bcfg2.Server.Plugin
-class RulesConfig(Bcfg2.Server.Plugin.SimpleConfig):
- _required = False
-
class Rules(Bcfg2.Server.Plugin.PrioDir):
"""This is a generator that handles service assignments."""
name = 'Rules'
@@ -13,7 +10,6 @@ class Rules(Bcfg2.Server.Plugin.PrioDir):
def __init__(self, core, datastore):
Bcfg2.Server.Plugin.PrioDir.__init__(self, core, datastore)
- self.config = RulesConfig(self)
self._regex_cache = dict()
def HandlesEntry(self, entry, metadata):
@@ -52,4 +48,4 @@ class Rules(Bcfg2.Server.Plugin.PrioDir):
return False
def _regex_enabled(self):
- return self.config.getboolean("rules", "regex", default=False)
+ return self.core.setup.cfp.getboolean("rules", "regex", default=False)