diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/Bcfg2/DBSettings.py | 17 | ||||
-rw-r--r-- | src/lib/Bcfg2/Logger.py | 2 | ||||
-rw-r--r-- | src/lib/Bcfg2/Options/Actions.py | 2 | ||||
-rw-r--r-- | src/lib/Bcfg2/Options/Parser.py | 2 | ||||
-rw-r--r-- | src/lib/Bcfg2/Reporting/models.py | 10 | ||||
-rw-r--r-- | src/lib/Bcfg2/Reporting/views.py | 2 | ||||
-rwxr-xr-x | src/sbin/bcfg2-server | 1 |
7 files changed, 24 insertions, 12 deletions
diff --git a/src/lib/Bcfg2/DBSettings.py b/src/lib/Bcfg2/DBSettings.py index e45807094..3b2edd849 100644 --- a/src/lib/Bcfg2/DBSettings.py +++ b/src/lib/Bcfg2/DBSettings.py @@ -154,6 +154,17 @@ def migrate_databases(**kwargs): **kwargs) +def get_db_label(application): + """ Get the name of the database for a given Django "application". The + rule is that if a database with the same name as the application exists, + use it. Otherwise use the default. Returns a string suitible for use as a + key in the Django database settings dict """ + if application in settings['DATABASES']: + return application + + return 'default' + + class PerApplicationRouter(object): """ Django database router for redirecting different applications to their own database """ @@ -161,11 +172,7 @@ class PerApplicationRouter(object): def _db_per_app(self, model, **hints): """ If a database with the same name as the application exists, use it. Otherwise use the default """ - app = model._meta.app_label - if app in settings['DATABASES']: - return app - - return 'default' + return get_db_label(model._meta.app_label) def db_for_read(self, model, **hints): """ Called when Django wants to find out what database to read from """ diff --git a/src/lib/Bcfg2/Logger.py b/src/lib/Bcfg2/Logger.py index 0f7995e0f..11eaeebd1 100644 --- a/src/lib/Bcfg2/Logger.py +++ b/src/lib/Bcfg2/Logger.py @@ -21,7 +21,7 @@ class TermiosFormatter(logging.Formatter): def __init__(self, fmt=None, datefmt=None): logging.Formatter.__init__(self, fmt, datefmt) - if sys.stdout.isatty(): + if hasattr(sys.stdout, 'isatty') and sys.stdout.isatty(): # now get termios info try: self.width = struct.unpack('hhhh', diff --git a/src/lib/Bcfg2/Options/Actions.py b/src/lib/Bcfg2/Options/Actions.py index 0d65c584d..8b941f2bb 100644 --- a/src/lib/Bcfg2/Options/Actions.py +++ b/src/lib/Bcfg2/Options/Actions.py @@ -168,7 +168,7 @@ class ConfigFileAction(FinalizableAction): ``bcfg2-lint.conf``). """ def __call__(self, parser, namespace, values, option_string=None): - get_parser().add_config_file(self.dest, values) + parser.add_config_file(self.dest, values, reparse=False) FinalizableAction.__call__(self, parser, namespace, values, option_string=option_string) diff --git a/src/lib/Bcfg2/Options/Parser.py b/src/lib/Bcfg2/Options/Parser.py index 48f3c5056..677a69e4c 100644 --- a/src/lib/Bcfg2/Options/Parser.py +++ b/src/lib/Bcfg2/Options/Parser.py @@ -37,6 +37,7 @@ class Parser(argparse.ArgumentParser): #: Option for specifying the path to the Bcfg2 config file configfile = PathOption('-C', '--config', + env="BCFG2_CONFIG_FILE", help="Path to configuration file", default="/etc/bcfg2.conf") @@ -219,6 +220,7 @@ class Parser(argparse.ArgumentParser): _debug("Option parsing phase 1: Get and read main config file") bootstrap_parser = argparse.ArgumentParser(add_help=False) self.configfile.add_to_parser(bootstrap_parser) + self.configfile.default_from_config(self._cfp) bootstrap = bootstrap_parser.parse_known_args(args=self.argv)[0] # check whether the specified bcfg2.conf exists diff --git a/src/lib/Bcfg2/Reporting/models.py b/src/lib/Bcfg2/Reporting/models.py index 0598e4d33..2d96990b1 100644 --- a/src/lib/Bcfg2/Reporting/models.py +++ b/src/lib/Bcfg2/Reporting/models.py @@ -3,7 +3,7 @@ import sys from django.core.exceptions import ImproperlyConfigured try: - from django.db import models, backend, connection + from django.db import models, backend, connections except ImproperlyConfigured: e = sys.exc_info()[1] print("Reports: unable to import django models: %s" % e) @@ -12,6 +12,7 @@ except ImproperlyConfigured: from django.core.cache import cache from datetime import datetime, timedelta from Bcfg2.Compat import cPickle +from Bcfg2.DBSettings import get_db_label TYPE_GOOD = 0 @@ -61,7 +62,8 @@ def _quote(value): global _our_backend if not _our_backend: try: - _our_backend = backend.DatabaseOperations(connection) + _our_backend = backend.DatabaseOperations( + connections[get_db_label('Reporting')]) except TypeError: _our_backend = backend.DatabaseOperations() return _our_backend.quote_name(value) @@ -91,8 +93,8 @@ class InteractionManager(models.Manager): maxdate -- datetime object. Most recent date to pull. (default None) """ - from django.db import connection - cursor = connection.cursor() + from django.db import connections + cursor = connections[get_db_label('Reporting')].cursor() cfilter = "expiration is null" sql = 'select ri.id, x.client_id from ' + \ diff --git a/src/lib/Bcfg2/Reporting/views.py b/src/lib/Bcfg2/Reporting/views.py index c7c2a503f..0b8ed65cc 100644 --- a/src/lib/Bcfg2/Reporting/views.py +++ b/src/lib/Bcfg2/Reporting/views.py @@ -13,7 +13,7 @@ from django.http import \ from django.shortcuts import render_to_response, get_object_or_404 from django.core.urlresolvers import \ resolve, reverse, Resolver404, NoReverseMatch -from django.db import connection, DatabaseError +from django.db import DatabaseError from django.db.models import Q, Count from Bcfg2.Reporting.models import * diff --git a/src/sbin/bcfg2-server b/src/sbin/bcfg2-server index 274bd3659..00b4e92e3 100755 --- a/src/sbin/bcfg2-server +++ b/src/sbin/bcfg2-server @@ -16,6 +16,7 @@ class BackendAction(Bcfg2.Options.ComponentAction): class CLI(object): """ bcfg2-server CLI class """ + parse_first = True options = [ Bcfg2.Options.Option( cf=('server', 'backend'), help='Server Backend', |