Ejemplo n.º 1
0
def restore(config, srcdir):
    if 'dest' in config:
        dest = config['dest']
    else:
        dest = config['dir']

    srcdir = os.path.join(srcdir, config['project'])
    if os.path.exists(srcdir):
        run_hook('pre-restore-code', [config['project'], dest], logger=logger)

        logger.info("deleting '%(dest)s'" % {'dest': dest})
        rmtree_silent(dest)
        os.makedirs(dest)

        logger.info("copying '%(src)s' to '%(dest)s'" % {
            'src': srcdir,
            'dest': dest
        })
        copytree(srcdir, dest, symlinks=True, keepdst=True)

        run_hook('post-restore-code', [config['project'], dest], logger=logger)

        return dest
    else:
        logger.debug("'%(srcdir)s' don't exists, no code to restore" %
                     {'srcdir': srcdir})
        return None
Ejemplo n.º 2
0
def dump(config, savedir, symlink=False):
    if 'active' in config and config['active'] in ('false', 'off', '0'):
        return

    if 'src' in config:
        src = config['src']
    else:
        src = config['dir']

    if 'ignore' in config:
        ignore = ignore_patterns(*[p.strip() for p in config['ignore'].split(',')])
    else:
        ignore = None

    run_hook('pre-create-code', [config['project'], src], logger=logger, exit_on_error=True)

    makedirs_silent(savedir)
    dest = os.path.join(savedir, config['project'])
    if symlink:
        logger.info("symlink '%(src)s' to '%(dest)s'" % {'src': src, 'dest': dest})
        symlink_silent(src, dest)
    else:
        logger.info("copy '%(src)s' to '%(dest)s'" % {'src': src, 'dest': dest})
        copytree(src, dest, symlinks=True, ignore=ignore)

    run_hook('post-create-code', [config['project'], src], logger=logger)
Ejemplo n.º 3
0
def dump(config, savedir, symlink=False):
    if 'active' in config and config['active'] in ('false', 'off', '0'):
        return

    if 'src' in config:
        src = config['src']
    else:
        src = config['dir']

    if 'ignore' in config:
        ignore = ignore_patterns(
            *[p.strip() for p in config['ignore'].split(',')])
    else:
        ignore = None

    run_hook('pre-create-code', [config['project'], src],
             logger=logger,
             exit_on_error=True)

    makedirs_silent(savedir)
    dest = os.path.join(savedir, config['project'])
    if symlink:
        logger.info("symlink '%(src)s' to '%(dest)s'" % {
            'src': src,
            'dest': dest
        })
        symlink_silent(src, dest)
    else:
        logger.info("copy '%(src)s' to '%(dest)s'" % {
            'src': src,
            'dest': dest
        })
        copytree(src, dest, symlinks=True, ignore=ignore)

    run_hook('post-create-code', [config['project'], src], logger=logger)
Ejemplo n.º 4
0
def dump(config, rawtables, savedir):
    if 'active' in config and config['active'] in ('false', 'off', '0'):
        return

    makedirs_silent(savedir)

    dump = config['dump'].split()
    jobs = []
    for database, tables in get_tables(rawtables or config['names']).iteritems():
        if not tables:
            # database without a table: dump all
            cmd = dump + [database]
            output = file(os.path.join(savedir, database + '.dump'), 'w+b')
            errors = file(os.path.join(savedir, database + '.dump.log'), 'w')

            jobs.append({'cmd': cmd,
                         'args': {'stdout': output, 'stderr': errors}})
        else:
            for table in tables:
                cmd = [] + dump  # clone dump
                # Enclose table name in doubl quote
                qtable = '.'.join(['"%s"' % e for e in table.split('.')])
                cmd += ['-n'] if config['use_schema'] in ('true', 'yes', '1') \
                    else ['-t']
                cmd += [qtable, database]
                output = file(os.path.join(savedir, database + '.' + table + '.dump'), 'w+b')
                errors = file(os.path.join(savedir, database + '.' + table + '.dump.log'), 'w')

                jobs.append({'cmd': cmd,
                             'args': {'stdout': output, 'stderr': errors}})

    for job in jobs:
        logger.info("dumping ('%(cmd)s') to '%(dest)s'" % {
            'cmd': ' '.join(job['cmd']),
            'dest': job['args']['stdout'].name
        })

        p = subprocess.Popen(job['cmd'], **job['args'])
        exitcode = p.wait()

        if exitcode != 0:
            logger.error("dump error, see '%(errors)s'" % {'errors': job['args']['stderr'].name})
            sys.exit(1)
        else:
            os.remove(job['args']['stderr'].name)

    run_hook('post-create-database', [savedir], logger=logger, exit_on_error=True)
Ejemplo n.º 5
0
def restore(config, srcdir):
    if not os.path.exists(srcdir):
        logger.debug("'%(srcdir)s' don't exists, no files to restore" % {'srcdir': srcdir})
        return

    run_hook('pre-restore-files', logger=logger)

    for dest in get_dirs(config['dirs']):
        logger.info("deleting '%(dest)s'" % {'dest': dest})
        rmtree_silent(dest)

        # first '/' removed in second arg
        src = os.path.join(srcdir, dest[1:])

        logger.info("copying '%(src)s' to '%(dest)s'" % {'src': src, 'dest': dest})
        copytree(src, dest, symlinks=True)

    run_hook('post-restore-files', logger=logger)
Ejemplo n.º 6
0
def restore(config, codedir):
    if "active" in config and config["active"] in ("false", "off", "0"):
        logger.debug("apache is deactivated in config file, nothing to restore")
        return

    if not os.path.exists(os.path.dirname(config["dest"])):
        logger.error("'%(dir)s' do not exists" % {"dir": config["dest"]})
        sys.exit(1)

    run_hook("pre-restore-apache", logger=logger)
    f = file(config["dest"], "w")
    if "content" not in config:
        f.write(
            "Include %(codedir)s/%(project)s/apache/*.conf\n"
            % {"codedir": os.path.normpath(codedir), "project": config["project"]}
        )
    else:
        f.write(config["content"])

    f.close()

    run_hook("post-restore-apache", logger=logger)
Ejemplo n.º 7
0
def restore(config, codedir):
    if 'active' in config and config['active'] in ('false', 'off', '0'):
        logger.debug(
            "apache is deactivated in config file, nothing to restore")
        return

    if not os.path.exists(os.path.dirname(config['dest'])):
        logger.error("'%(dir)s' do not exists" % {'dir': config['dest']})
        sys.exit(1)

    run_hook('pre-restore-apache', logger=logger)
    f = file(config['dest'], 'w')
    if 'content' not in config:
        f.write("Include %(codedir)s/%(project)s/apache/*.conf\n" % {
            'codedir': os.path.normpath(codedir),
            'project': config['project']
        })
    else:
        f.write(config['content'])

    f.close()

    run_hook('post-restore-apache', logger=logger)
Ejemplo n.º 8
0
def restore(config, srcdir):
    if 'dest' in config:
        dest = config['dest']
    else:
        dest = config['dir']

    srcdir = os.path.join(srcdir, config['project'])
    if os.path.exists(srcdir):
        run_hook('pre-restore-code', [config['project'], dest], logger=logger)

        logger.info("deleting '%(dest)s'" % {'dest': dest})
        rmtree_silent(dest)
        os.makedirs(dest)

        logger.info("copying '%(src)s' to '%(dest)s'" % {'src': srcdir, 'dest': dest})
        copytree(srcdir, dest, symlinks=True, keepdst=True)

        run_hook('post-restore-code', [config['project'], dest], logger=logger)

        return dest
    else:
        logger.debug("'%(srcdir)s' don't exists, no code to restore" % {'srcdir': srcdir})
        return None
Ejemplo n.º 9
0
def restore(config, srcdir):

    if not os.path.exists(srcdir):
        logger.debug("'%(srcdir)s' don't exists, no database to restore" % {'srcdir': srcdir})
        return

    restore_tmp = config['restore_tmp'].split()
    restore_table = config['restore_table'].split()
    psql = config['psql'].split()
    drop = config['drop'].split()
    createdb = config['createdb'].split()

    run_hook('pre-restore-database', get_tables_from_dir(srcdir).keys(), logger=logger)
    swapjobs = []
    for database, tables in get_tables_from_dir(srcdir).iteritems():
        if not tables:
            # database without a table: restore all database
            dumpfile = os.path.join(srcdir, database + '.dump')
            tmpdatabase = database + '_deploy_tmp'
            drop_database(tmpdatabase, dropcmd=drop, psqlcmd=psql)
            run_job(createdb + ("%(dbname)s" % {'dbname': tmpdatabase}).split())
            run_job(restore_tmp + ("%(dbname)s %(dump)s" % {'dbname': tmpdatabase, 'dump': dumpfile}).split())

            if database_exists(database, psqlcmd=psql):
                swapjobs.append("DROP DATABASE %(newname)s;" % {'newname': database})
            swapjobs.append("ALTER DATABASE %(oldname)s RENAME TO %(newname)s;" % {
                'newname': database, 'oldname': tmpdatabase
            })
        else:
            # restore a table
            for table in tables:
                dumpfile = os.path.join(srcdir, database + '.' + table + '.dump')
                truncate_table(
                    database, table, psqlcmd=psql,
                    is_schema=config['use_schema'] in ('true', 'yes', '1')
                )
                run_job(restore_table + ['-d', database, dumpfile])

    if swapjobs:
        run_hook('pre-restore-database-swap', get_tables_from_dir(srcdir).keys(), logger=logger)
        basecmd = psql + "-d template1 -c".split()
        for cmd in swapjobs:
            run_job(basecmd + ['%s' % cmd])
        run_hook('post-restore-database-swap', get_tables_from_dir(srcdir).keys(), logger=logger)

    run_hook('post-restore-database', get_tables_from_dir(srcdir).keys(), logger=logger)