X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fadmin.py;h=2bb1f1853187af821ccf06c317bf40cc6de8aefd;hb=01496fe710b21e3922ef7b6f3ffa74f2b697b34d;hp=467b265c5c3fdd6c0de339eadd1bd37ad770213d;hpb=d1fa96ba96fcb92b685f6ff7b957dfa1f33b49a0;p=dak.git diff --git a/dak/admin.py b/dak/admin.py index 467b265c..2bb1f185 100755 --- a/dak/admin.py +++ b/dak/admin.py @@ -25,7 +25,6 @@ import apt_pkg from daklib import utils from daklib.dbconn import * -from daklib.config import Config ################################################################################ @@ -56,6 +55,10 @@ Perform administrative work on the dak database. Commands can use a long or abbreviated form: + config / c: + c db show db config + c db-shell show db config in a usable form for psql + architecture / a: a list show a list of architectures a rm ARCH remove an architecture (will only work if @@ -68,6 +71,10 @@ Perform administrative work on the dak database. suite / s: s list show a list of suites s show SUITE show config details for a suite + s add SUITE VERSION [ label=LABEL ] [ description=DESCRIPTION ] + [ origin=ORIGIN ] [ codename=CODENAME ] + add suite SUITE, version VERSION. label, + description, origin and codename are optional. suite-architecture / s-a: s-a list-suite ARCH show the suites an ARCH is in @@ -171,6 +178,37 @@ def __suite_show(d, args): print su.details() +def __suite_add(d, args): + die_arglen(args, 4, "E: adding a suite requires at least a name and a version") + suite_name = args[2].lower() + version = args[3] + rest = args[3:] + + def get_field(field): + for varval in args: + if varval.startswith(field + '='): + return varval.split('=')[1] + return None + + print "Adding suite %s" % suite_name + if not dryrun: + try: + s = d.session() + suite = Suite() + suite.suite_name = suite_name + suite.version = version + suite.label = get_field('label') + suite.description = get_field('description') + suite.origin = get_field('origin') + suite.codename = get_field('codename') + s.add(suite) + s.commit() + except IntegrityError, e: + die("E: Integrity error adding suite %s (it probably already exists)" % suite_name) + except SQLAlchemyError, e: + die("E: Error adding suite %s (%s)" % (suite_name, e)) + print "Suite %s added" % (suite_name) + def suite(command): args = [str(x) for x in command] Cnf = utils.get_conf() @@ -182,10 +220,12 @@ def suite(command): if mode == 'list': __suite_list(d, args) - if mode == 'show': + elif mode == 'show': __suite_show(d, args) + elif mode == 'add': + __suite_add(d, args) else: - die("E: suite-architecture command unknown") + die("E: suite command unknown") dispatch['suite'] = suite dispatch['s'] = suite @@ -287,6 +327,46 @@ dispatch['s-a'] = suite_architecture ################################################################################ +def show_config(command): + args = [str(x) for x in command] + cnf = utils.get_conf() + + die_arglen(args, 2, "E: config needs at least a command") + + mode = args[1].lower() + + if mode == 'db': + connstr = "" + if cnf["DB::Host"]: + # TCP/IP + connstr = "postgres://%s" % cnf["DB::Host"] + if cnf["DB::Port"] and cnf["DB::Port"] != "-1": + connstr += ":%s" % cnf["DB::Port"] + connstr += "/%s" % cnf["DB::Name"] + else: + # Unix Socket + connstr = "postgres:///%s" % cnf["DB::Name"] + if cnf["DB::Port"] and cnf["DB::Port"] != "-1": + connstr += "?port=%s" % cnf["DB::Port"] + print connstr + elif mode == 'db-shell': + e = ['PGDATABASE'] + print "PGDATABASE=%s" % cnf["DB::Name"] + if cnf["DB::Host"]: + print "PGHOST=%s" % cnf["DB::Host"] + e.append('PGHOST') + if cnf["DB::Port"] and cnf["DB::Port"] != "-1": + print "PGPORT=%s" % cnf["DB::Port"] + e.append('PGPORT') + print "export " + " ".join(e) + else: + die("E: config command unknown") + +dispatch['config'] = show_config +dispatch['c'] = show_config + +################################################################################ + def main(): """Perform administrative work on the dak database""" global dryrun