diff options
Diffstat (limited to 'src/lib/Bcfg2')
-rw-r--r-- | src/lib/Bcfg2/Reporting/Collector.py | 9 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Core.py | 24 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Metadata.py | 7 | ||||
-rw-r--r-- | src/lib/Bcfg2/Server/Plugins/Packages/Apt.py | 1 | ||||
-rw-r--r-- | src/lib/Bcfg2/settings.py | 7 |
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'], |