X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fadmin.py;h=2bb1f1853187af821ccf06c317bf40cc6de8aefd;hb=01496fe710b21e3922ef7b6f3ffa74f2b697b34d;hp=1cf80f2855a414d858fb1a7777a2101c9d5a2ccf;hpb=0d4f6d79a7c4f326537d30b21b5fb5852917f2ee;p=dak.git diff --git a/dak/admin.py b/dak/admin.py index 1cf80f28..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 @@ -65,6 +68,14 @@ Perform administrative work on the dak database. If SUITELIST is given, add to each of the suites at the same time + 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 s-a list-arch SUITE show the architectures in a SUITE @@ -151,6 +162,82 @@ dispatch['a'] = architecture ################################################################################ +def __suite_list(d, args): + s = d.session() + for j in s.query(Suite).order_by('suite_name').all(): + print j.suite_name + +def __suite_show(d, args): + if len(args) < 2: + die("E: showing an suite entry requires a suite") + + s = d.session() + su = get_suite(args[2].lower()) + if su is None: + die("E: can't find suite entry for %s" % (args[2].lower())) + + 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() + d = DBConn() + + die_arglen(args, 2, "E: suite needs at least a command") + + mode = args[1].lower() + + if mode == 'list': + __suite_list(d, args) + elif mode == 'show': + __suite_show(d, args) + elif mode == 'add': + __suite_add(d, args) + else: + die("E: suite command unknown") + +dispatch['suite'] = suite +dispatch['s'] = suite + +################################################################################ + +def __suite_architecture_list(d, args): + s = d.session() + for j in s.query(Suite).order_by('suite_name').all(): + print j.suite_name + ' ' + \ + ','.join([a.architecture.arch_string for a in j.suitearchitectures]) + def __suite_architecture_listarch(d, args): die_arglen(args, 3, "E: suite-architecture list-arch requires a suite") a = get_suite_architectures(args[2].lower()) @@ -210,7 +297,7 @@ def __suite_architecture_rm(d, args): except SQLAlchemyError, e: die("E: Can't remove suite-architecture entry (%s, %s) - %s" % (args[2].lower(), args[3].lower(), e)) - print "Removed suite-architecture entry for %s, %s" % (args[2].lower(), args[3].lower()) + print "Removed suite-architecture entry for %s, %s" % (args[2].lower(), args[3].lower()) def suite_architecture(command): @@ -222,7 +309,9 @@ def suite_architecture(command): mode = args[1].lower() - if mode == 'list-arch': + if mode == 'list': + __suite_architecture_list(d, args) + elif mode == 'list-arch': __suite_architecture_listarch(d, args) elif mode == 'list-suite': __suite_architecture_listsuite(d, args) @@ -238,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