Exemple #1
0
def main(args: Optional[Sequence[str]] = None):
    """
    Executes things in order
    """

    setup_logging()
    args = parse_args(args)
    now = datetime.utcnow()

    with doing("Parsing remote configuration"):
        wp_config = parse_wp_config(args.source)

    with TemporaryDirectory() as d:
        work_location = parse_location(d)

        with doing("Saving settings"):
            dump_settings(args, wp_config, now, join(d, "settings.json"))

        with doing("Copying database"):
            db = create_from_source(wp_config, args.source)
            db.dump_to_file(join(d, "dump.sql"))

        with doing("Copying files"):
            copy_files(args.source, work_location.child("wordpress"))

        with doing("Writing archive"):
            args.backup_dir.ensure_exists_as_dir()
            archive_location = make_dump_file_name(args, wp_config, now)

            archive_location.archive_local_dir(d)
            doing.logger.info("Wrote archive %s", archive_location)

    return archive_location
Exemple #2
0
def main(argv: Optional[Sequence[Text]] = None):
    args = parse_args(argv)
    setup_logging()

    rep = [
        *zip(
            (x.encode(args.charset) for x in args.before),
            (x.encode(args.charset) for x in args.after),
        )
    ]

    with open(args.input, "rb") as i, open(args.output, "wb") as o:
        for line in i:
            o.write(walk(line, rep))
Exemple #3
0
def main(args: Optional[Sequence[str]] = None):
    """
    Executes things in order
    """

    setup_logging()
    args = parse_args(args)

    gen = args.settings_generator

    origin_source = parse_location(gen.get_source(args.origin))
    origin_backup_dir = gen.get_backup_dir(args.origin)

    with doing(f"Backing up {args.origin} to {origin_backup_dir}"):
        origin_archive = snapshot([f"{origin_source}", origin_backup_dir])

    target_backup_dir = gen.get_backup_dir(args.target)
    target_source = parse_location(gen.get_source(args.target))

    with doing(f"Checking if {args.target} ({target_source}) already exists"):
        target_exists = target_source.exists()

    if target_exists:
        with doing(f"Backing up {args.target} to {target_backup_dir}"):
            snapshot([f"{target_source}", target_backup_dir])

    if target_exists:
        with doing(f"Reading wp_config from {args.target}"):
            wp_config = parse_wp_config(target_source)
    else:
        with doing(f"Generating wp_config for {args.target}"):
            wp_config = gen.get_wp_config(args.target)

    patch = apply_wp_config(gen.get_patch(args.origin, args.target), wp_config,
                            target_source)

    with NamedTemporaryFile(mode="w", encoding="utf-8") as pf:
        json.dump(patch, pf)
        pf.flush()

        with doing(f"Overriding {args.target} with {args.origin}"):
            restore(["-p", pf.name, f"{origin_archive}"])

    if hasattr(gen, "post_exec"):
        with doing("Running post-exec hook"):
            gen.post_exec(args.origin, args.target)
Exemple #4
0
def main(args: Optional[Sequence[str]] = None):
    """
    Executes things in order
    """

    setup_logging()
    args = parse_args(args)
    snap: Location = args.snapshot

    with TemporaryDirectory() as d:
        with doing("Extracting archive"):
            snap.extract_archive_to_dir(d)

        with doing("Reading configuration"):
            config = patch_config(read_config(join(d, "settings.json")),
                                  args.patch, args.allow_in_place)

        dump = join(d, "dump.sql")

        if config["replace_in_dump"]:
            with doing("Patch the SQL dump"):
                new_dump = join(d, "dump_patched.sql")
                patch_sql_dump(dump, new_dump,
                               make_replace_map(config["replace_in_dump"]))
                dump = new_dump

        if config["php_define"]:
            with doing("Patch wp-config.php"):
                set_wp_config_values(config["php_define"],
                                     join(d, "wordpress", "wp-config.php"))

        with doing("Restoring files"):
            remote = get_remote(config)
            restore_files(join(d, "wordpress"), remote)

        if config["git"]:
            with doing("Cloning Git repos"):
                for repo in config["git"]:
                    location = remote.child(repo["location"])
                    location.set_git_repo(repo["repo"], repo["version"])
                    doing.logger.info("Cloned %s@%s to %s", repo["repo"],
                                      repo["version"], location)

        if config["owner"]:
            with doing("Changing files owner"):
                remote.chown(config["owner"])

        with doing("Reading WP config"):
            wp_config = get_wp_config(config)

        if config["mysql_root"]:
            mysql_root = config["mysql_root"]

            with doing("Ensuring that DB and user exist"):
                ensure_db_exists(wp_config, mysql_root, remote)

        with doing("Restoring DB"):
            db = create_from_source(wp_config, remote)
            restore_db(db, dump)

        if config["setup_queries"]:
            with doing("Running setup queries"):
                run_queries(db, config["setup_queries"])

        if config["outer_files"]:
            with doing("Creating outer files"):
                install_outer_files(config["outer_files"], remote)

        if config["post_install"]:
            with doing("Running post install scripts"):
                run_post_install(config["post_install"], remote)

        if config["dns"]:
            with doing("Configuring DNS"):
                configure_dns(config["dns"])