testing/vcttesting/deploy_mach_commands.py (127 lines of code) (raw):
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
from mach.decorators import (
CommandArgument,
CommandProvider,
Command,
)
@CommandProvider
class DeployCommands(object):
def __init__(self, context):
lm = context.log_manager
lm.enable_unstructured()
@Command(
"github-webhooks",
category="deploy",
description="GitHub Web Hooks Lambda functions",
)
def github_webhooks(self):
from vcttesting.deploy import github_webhook_lambda
github_webhook_lambda()
@Command("hgmo", category="deploy", description="Deploy hg.mozilla.org")
@CommandArgument(
"--skip-hgssh", action="store_true", help="Skip hgssh deployment if present"
)
@CommandArgument(
"--skip-hgweb", action="store_true", help="Skip hgweb deployment if present"
)
@CommandArgument(
"--skip-mirrors", action="store_true", help="Skip mirrors deployment if present"
)
@CommandArgument(
"--skip-kafka", action="store_true", help="Skip Kafka cluster deployment if present"
)
@CommandArgument(
"--clean-wdir",
action="store_true",
help="Clean working directory of encrypted secrets after deploy",
)
@CommandArgument("--verbosity", type=int, help="How verbose to be with output")
def hgmo(
self,
skip_hgssh=False,
skip_hgweb=False,
skip_mirrors=False,
skip_kafka=False,
clean_wdir=False,
verbosity=None,
):
from vcttesting.deploy import deploy_hgmo as deploy
return deploy(
clean_wdir=clean_wdir,
skip_mirrors=skip_mirrors,
skip_hgssh=skip_hgssh,
skip_hgweb=skip_hgweb,
skip_kafka=skip_kafka,
verbosity=verbosity,
)
@Command(
"hgmo-strip",
category="deploy",
description="Strip commits from a hg.mozilla.org repo",
)
@CommandArgument("repo", help="Repo to strip (path under hg.mozilla.org/)")
@CommandArgument("rev", help="Revset of revisions to strip")
@CommandArgument("--verbosity", type=int, help="How verbose to be with output")
def hgmo_strip(self, repo, rev, verbosity=None):
from vcttesting.deploy import hgmo_strip as strip
return strip(repo, rev, verbosity=verbosity)
@Command(
"hgmo-reclone-repos",
category="deploy",
description="Re-clone repositories on hg.mozilla.org",
)
@CommandArgument("repo", nargs="*", help="Repositories to re-clone")
@CommandArgument(
"--repo-file", help="File containing list of repositories to re-clone"
)
def hgmo_reclone_repos(self, repo, repo_file=None):
from vcttesting.deploy import hgmo_reclone_repos as reclone
if repo_file:
if repo:
print("cannot specify repos from both arguments and a file")
return 1
repo = open(repo_file, "rb").read().splitlines()
return reclone(repo)
@Command(
"hgweb-bootstrap",
category="deploy",
description="Bootstrap a new hgweb machine",
)
@CommandArgument(
"--instance", help="Instance type to bootstrap (hgweb, mirror or none)"
)
@CommandArgument(
"--hgweb-workers",
type=int,
help="Number of concurrent workers for hgweb bootstrap procedure",
)
@CommandArgument(
"--hgssh-workers",
type=int,
help="Number of concurrent workers for hgssh bootstrap procedure",
)
@CommandArgument("--verbosity", type=int, help="How verbose to be with output")
def hgweb_bootstrap(
self, instance=None, hgweb_workers=None, hgssh_workers=None, verbosity=None
):
from vcttesting.deploy import run_playbook
from vcttesting.vctutil import decrypt_sops_files
decrypt_sops_files()
# Create extra_vars dict using only non-`None` values
# Ansible defaults only work if the value is undefined
extra_vars = {
key: val
for key, val in {
("instance", instance),
("hgweb_workers", hgweb_workers),
("hgssh_workers", hgssh_workers),
}
if val is not None
}
return run_playbook(
"bootstrap-hgweb", extra_vars=extra_vars, verbosity=verbosity
)
@Command("reviewbot", category="deploy")
@CommandArgument(
"--verbosity", type=int, default=0, help="How verbose to be with output"
)
def reviewbot(self, verbosity=0):
from vcttesting.deploy import run_playbook
return run_playbook("deploy-reviewbot", verbosity=verbosity)