summaryrefslogtreecommitdiffstats
path: root/src/lib
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/Bcfg2/Reporting/Collector.py9
-rw-r--r--src/lib/Bcfg2/Server/Core.py24
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Metadata.py7
-rw-r--r--src/lib/Bcfg2/Server/Plugins/Packages/Apt.py1
-rw-r--r--src/lib/Bcfg2/settings.py7
5 files changed, 34 insertions, 14 deletions
diff --git a/src/lib/Bcfg2/Reporting/Collector.py b/src/lib/Bcfg2/Reporting/Collector.py
index 52700f917..0493c907b 100644
--- a/src/lib/Bcfg2/Reporting/Collector.py
+++ b/src/lib/Bcfg2/Reporting/Collector.py
@@ -56,7 +56,7 @@ class ReportingCollector(object):
"""The collecting process for reports"""
def __init__(self, setup):
- """Setup the collector. This may be called by the daemon or though
+ """Setup the collector. This may be called by the daemon or though
bcfg2-admin"""
self.setup = setup
self.datastore = setup['repo']
@@ -99,12 +99,12 @@ class ReportingCollector(object):
raise ReportingError
try:
- self.logger.debug("Validating storage %s" %
+ self.logger.debug("Validating storage %s" %
self.storage.__class__.__name__)
self.storage.validate()
except:
self.logger.error("Storage backed %s failed to validate: %s" %
- (self.storage.__class__.__name__,
+ (self.storage.__class__.__name__,
traceback.format_exc().splitlines()[-1]))
def run(self):
@@ -162,6 +162,9 @@ class ReportingCollector(object):
pass
if self.storage:
self.storage.shutdown()
+ from django import db
+ self.logger.info("%s: Closing database connection" % self.name)
+ db.close_connection()
def reap_children(self):
"""Join any non-live threads"""
diff --git a/src/lib/Bcfg2/Server/Core.py b/src/lib/Bcfg2/Server/Core.py
index c2cf6b7a4..38daa870e 100644
--- a/src/lib/Bcfg2/Server/Core.py
+++ b/src/lib/Bcfg2/Server/Core.py
@@ -86,6 +86,7 @@ class BaseCore(object):
""" The server core is the container for all Bcfg2 server logic
and modules. All core implementations must inherit from
``BaseCore``. """
+ name = "core"
def __init__(self, setup): # pylint: disable=R0912,R0915
"""
@@ -414,7 +415,7 @@ class BaseCore(object):
:type plugin: string
:returns: None
"""
- self.logger.debug("Loading plugin %s" % plugin)
+ self.logger.debug("%s: Loading plugin %s" % (self.name, plugin))
try:
mod = getattr(__import__("Bcfg2.Server.Plugins.%s" %
(plugin)).Server.Plugins, plugin)
@@ -450,14 +451,18 @@ class BaseCore(object):
def shutdown(self):
""" Perform plugin and FAM shutdown tasks. """
- self.logger.info("Shutting down core...")
+ self.logger.info("%s: Shutting down core..." % self.name)
if not self.terminate.isSet():
self.terminate.set()
- self.fam.shutdown()
- self.logger.info("FAM shut down")
- for plugin in list(self.plugins.values()):
- plugin.shutdown()
- self.logger.info("All plugins shut down")
+ self.fam.shutdown()
+ self.logger.info("%s: FAM shut down" % self.name)
+ for plugin in list(self.plugins.values()):
+ plugin.shutdown()
+ self.logger.info("%s: All plugins shut down" % self.name)
+ if self._database_available:
+ from django import db
+ self.logger.info("%s: Closing database connection" % self.name)
+ db.close_connection()
@property
def metadata_cache_mode(self):
@@ -726,6 +731,11 @@ class BaseCore(object):
self.validate_goals(meta, config)
self.client_run_hook("end_client_run", meta)
+ if self._database_available:
+ from django import db
+ self.logger.debug("%s: Closing database connection" %
+ threading.current_thread().name)
+ db.close_connection()
sort_xml(config, key=lambda e: e.get('name'))
diff --git a/src/lib/Bcfg2/Server/Plugins/Metadata.py b/src/lib/Bcfg2/Server/Plugins/Metadata.py
index 343e14162..f734c98d0 100644
--- a/src/lib/Bcfg2/Server/Plugins/Metadata.py
+++ b/src/lib/Bcfg2/Server/Plugins/Metadata.py
@@ -1657,8 +1657,8 @@ class MetadataLint(Bcfg2.Server.Lint.ServerPlugin):
"client")
def duplicate_groups(self):
- """ Check for groups that are defined more than once. There
- are two ways this can happen:
+ """ Check for groups that are defined more than once. There are two
+ ways this can happen:
1. The group is listed twice with contradictory options.
2. The group is listed with no options *first*, and then with
@@ -1674,7 +1674,8 @@ class MetadataLint(Bcfg2.Server.Lint.ServerPlugin):
grpname = grp.get("name")
if grpname in duplicates:
duplicates[grpname].append(grp)
- elif len(grp.attrib) > 1: # group has options
+ elif set(grp.attrib.keys()).difference(['negate', 'name']):
+ # group has options
if grpname in groups:
duplicates[grpname] = [grp, groups[grpname]]
else:
diff --git a/src/lib/Bcfg2/Server/Plugins/Packages/Apt.py b/src/lib/Bcfg2/Server/Plugins/Packages/Apt.py
index a82a183d8..27a725f23 100644
--- a/src/lib/Bcfg2/Server/Plugins/Packages/Apt.py
+++ b/src/lib/Bcfg2/Server/Plugins/Packages/Apt.py
@@ -77,6 +77,7 @@ class AptSource(Source):
def read_files(self):
bdeps = dict()
bprov = dict()
+ self.essentialpkgs = set()
depfnames = ['Depends', 'Pre-Depends']
if self.recommended:
depfnames.append('Recommends')
diff --git a/src/lib/Bcfg2/settings.py b/src/lib/Bcfg2/settings.py
index 82a3bdb2a..aa784336d 100644
--- a/src/lib/Bcfg2/settings.py
+++ b/src/lib/Bcfg2/settings.py
@@ -82,8 +82,13 @@ def read_config(cfile=DEFAULT_CONFIG, repo=None, quiet=False):
if repo is None:
repo = setup['repo']
+ if setup['db_engine'] == 'ibm_db_django':
+ db_engine = setup['db_engine']
+ else:
+ db_engine = "django.db.backends.%s" % setup['db_engine']
+
DATABASES['default'] = \
- dict(ENGINE="django.db.backends.%s" % setup['db_engine'],
+ dict(ENGINE=db_engine,
NAME=setup['db_name'],
USER=setup['db_user'],
PASSWORD=setup['db_password'],