Beispiel #1
0
    def setDb(self,
              dburi,
              releases_history_buckets=None,
              releases_history_class=None):
        from auslib.db import AUSDatabase, GCSHistory

        if not releases_history_class and releases_history_buckets is not None:
            releases_history_class = GCSHistory

        self.db = AUSDatabase(
            dburi,
            releases_history_buckets=releases_history_buckets,
            releases_history_class=releases_history_class)
Beispiel #2
0
    usage += "  cleanup: Cleanup old data from a database. Requires an extra arg of maximum age (in days) of nightly releases. " \
             "Anything older than this will be deleted.\n"
    usage += "  cleanup-dryrun: Show what would be removed if 'cleanup' is run."
    parser = OptionParser(usage=usage)
    parser.add_option("-d", "--db", dest="db", default=None, help="database to manage, in URI format")
    parser.add_option("--version", dest="version", default=None, type="int", help="Create/upgrade to this specific schema version rather than the latest.")
    options, args = parser.parse_args()

    if not options.db:
        parser.error("db is required")
    if len(args) < 1:
        parser.error("need an action to perform")

    action = args[0]

    db = AUSDatabase(options.db, mysql_traditional_mode=True)
    if action == 'create':
        db.create(options.version)
    elif action == 'upgrade':
        db.upgrade(options.version)
    elif action == 'downgrade':
        db.downgrade(options.version)
    elif action.startswith("cleanup"):
        if len(args) < 2:
            parser.error("need to pass maximum nightly release age")
        nightly_age = int(args[1])
        with db.begin() as trans:
            if action == "cleanup":
                cleanup_releases(trans, nightly_age, dryrun=False)
                cleanup_releases_history(trans, dryrun=False)
            else:
Beispiel #3
0
sys.path.append(path.join(path.dirname(__file__), ".."))

from auslib.blobs.apprelease import ReleaseBlobV1
from auslib.db import AUSDatabase

if __name__ == "__main__":
    from optparse import OptionParser
    doc = "%s --db dburi -r release-name -v version -p product foo.json" % sys.argv[0]
    parser = OptionParser(doc)
    parser.add_option("-d", "--db", dest="db", default=None, help="database to manage, in URI format")
    parser.add_option("-r", "--release", dest="release", default=None, help="Release to put blob into")
    parser.add_option("-v", "--version", dest="version", default=None, help="Version of the release")
    parser.add_option("-p", "--product", dest="product", default=None, help="Product of the release")

    options, args = parser.parse_args()

    logging.basicConfig(level=logging.DEBUG, format="%(asctime)s: %(message)s")

    if not options.db or not options.release or not options.version or not options.product or len(args) != 1:
        print doc
        sys.exit(1)

    db = AUSDatabase(options.db)
    blob = ReleaseBlobV1()
    blob.loadJSON(open(args[0]).read())
    try:
        old = db.releases.getReleases(name=options.release)[0]
        db.releases.updateRelease(name=options.release, product=options.product, version=options.version, changed_by='import-json', old_data_version=old['data_version'], blob=blob)
    except IndexError:
        db.releases.addRelease(name=options.release, product=options.product, version=options.version, blob=blob, changed_by='import-json')
Beispiel #4
0
 def setDb(self, dburi):
     from auslib.db import AUSDatabase
     self.db = AUSDatabase(dburi)
Beispiel #5
0
        dest="name",
        required=True,
        help="The name of the person/script doing the migrations.")
    parser.add_argument("releases",
                        metavar="release",
                        nargs="+",
                        help="The releases (aka blob names) to migrate.")

    args = parser.parse_args()

    if args.db and args.ini:
        parser.error("Cannot specify --db and --ini!")

    if args.ini:
        cfg = AdminConfig(args.ini)
        db = AUSDatabase(cfg.getDburi())
        db.setDomainWhitelist(cfg.getDomainWhitelist())
    else:
        db = AUSDatabase(args.db)

    for release in args.releases:
        try:
            rel = db.releases.getReleases(name=release)[0]
            blob = rel["data"]
        except:
            log.debug("No such release '%s', skipping", release)

        if blob["schema_version"] == 4:
            log.debug("%s is already schema 4, skipping", release)
            continue
        elif blob["schema_version"] != 3: