Exemplo n.º 1
0
Arquivo: app.py Projeto: apeming/cli
def rollback(ctx, appname, cluster, revision):
    appname = get_appname(appname=appname)
    kae = ctx.obj['kae_api']
    kae.set_cluster(cluster)
    with handle_console_err():
        kae.rollback(appname, revision)
    click.echo(info('Rollback %s(revision %s) done.' % (appname, revision)))
Exemplo n.º 2
0
Arquivo: app.py Projeto: apeming/cli
def renew(ctx, appname, cluster):
    appname = get_appname(appname=appname)
    kae = ctx.obj['kae_api']
    kae.set_cluster(cluster)
    with handle_console_err():
        kae.renew(appname)
    click.echo(info('Renew %s done.' % (appname, )))
Exemplo n.º 3
0
Arquivo: app.py Projeto: apeming/cli
def kill_build_task(ctx, appname):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)

    with handle_console_err():
        kae.kill_build_task(appname)
    click.echo(info('Kill app %s\'s build task done.' % (appname, )))
Exemplo n.º 4
0
Arquivo: app.py Projeto: apeming/cli
def register_release(ctx, appname, tag, git, f, literal, force):
    appname = get_appname(appname=appname)
    tag = get_git_tag(git_tag=tag)

    specs_text = get_specs_text(f, literal)
    if specs_text is None:
        errmsg = [
            "specs_text is required, please use one of the instructions to specify it.",
            "1. specify --literal or -f in coomand line",
            "2. make the current workdir in the source code dir which contains app.yaml"
        ]
        fatal('\n'.join(errmsg))
    kae = ctx.obj['kae_api']
    git = git or get_remote_url(remote=ctx.obj['remotename'])
    if not git:
        fatal("git url not found, please check repository or pass argument")
    branch = get_current_branch()
    with handle_console_err():
        kae.register_release(appname,
                             tag,
                             git,
                             specs_text,
                             branch=branch,
                             force=force)
    click.echo(info('Register %s %s %s done.' % (appname, tag, git)))
Exemplo n.º 5
0
Arquivo: app.py Projeto: apeming/cli
def delete_app(ctx, appname):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    with handle_console_err():
        ret = kae.delete_app(appname)

    click.echo(info(json.dumps(ret)))
Exemplo n.º 6
0
Arquivo: app.py Projeto: kaecloud/cli
def get_config(ctx, appname, cluster):
    kae = ctx.obj['kae_api']
    kae.set_cluster(cluster)

    appname = get_appname(appname=appname)
    with handle_console_err():
        d = kae.get_config(appname)
    newest = d.get("newest")
    current = d.get("current")

    click.echo(info("------------------ newest ----------------------"))
    if isinstance(newest, dict):
        for k, v in newest.items():
            click.echo(info("key:"))
            click.echo(k)
            click.echo(info("data:"))
            click.echo(v)
    else:
        click.echo(newest)

    click.echo("\n\n")
    click.echo(info("----------------- current --------------------"))
    if isinstance(current, dict):
        for k, v in current.items():
            click.echo(info("key:"))
            click.echo(k)
            click.echo(info("data:"))
            click.echo(v)
    else:
        click.echo(current)
Exemplo n.º 7
0
Arquivo: app.py Projeto: apeming/cli
def set_secret(ctx, appname, cluster, f, literal, replace):
    data = None
    if literal:
        try:
            data = json.loads(literal)
        except Exception:
            fatal(
                "can't load secret from literal, pls ensure it's a valid json")
    try:
        if f:
            with open(f, "r") as fp:
                data = json.load(fp)
    except Exception:
        fatal("can't read secret data from {}".format(f))
    if data is None:
        fatal("you must specify literal or filename")
    for k, v in data.items():
        if not isinstance(v, str):
            fatal("value of secret must be string")
        if not isinstance(k, str):
            fatal("key of secret must be string")
    kae = ctx.obj['kae_api']
    kae.set_cluster(cluster)

    appname = get_appname(appname=appname)
    with handle_console_err():
        d = kae.set_secret(appname, data, replace)
    click.echo(info(str(d)))
Exemplo n.º 8
0
def get_secret(ctx, appname):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    with handle_console_err():
        d = kae.get_secret(appname)

    ss = pprint.pformat(d)
    click.echo(info(ss))
Exemplo n.º 9
0
Arquivo: app.py Projeto: apeming/cli
def get_release_specs(ctx, appname, tag):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    tag = get_git_tag(git_tag=tag)

    with handle_console_err():
        release = kae.get_release(appname, tag)
    click.echo(info(release['specs_text']))
Exemplo n.º 10
0
Arquivo: app.py Projeto: apeming/cli
def watch_app_pods(ctx, appname, cluster, raw):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    kae.set_cluster(cluster)

    # with handle_console_err():
    watcher = kae.watch_app_pods(appname)
    display_pods(kae, watcher, appname, forever=True)
Exemplo n.º 11
0
Arquivo: app.py Projeto: apeming/cli
def delete_app_canary(ctx, appname, cluster):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    kae.set_cluster(cluster)
    with handle_console_err():
        ret = kae.delete_app_canary(appname)

    click.echo(info(json.dumps(ret)))
Exemplo n.º 12
0
Arquivo: app.py Projeto: apeming/cli
def set_app_abtesting_rules(ctx, appname, rules, cluster):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    rules = json.loads(rules)
    kae.set_cluster(cluster)
    with handle_console_err():
        ret = kae.set_app_abtesting_rules(appname, rules)

    click.echo(info(json.dumps(ret)))
Exemplo n.º 13
0
Arquivo: app.py Projeto: apeming/cli
def get_app(ctx, appname, raw):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    with handle_console_err():
        app = kae.get_app(appname)
    if raw:
        click.echo(str(app))
    else:
        table = PrettyTable(['name', 'type', 'git', 'created'])
        table.align['git'] = 'l'
        table.add_row([app['name'], app['type'], app['git'], app['created']])
        click.echo(table)
Exemplo n.º 14
0
def register_release(ctx, appname, tag, git, f, literal):
    appname = get_appname(appname=appname)
    tag = get_git_tag(git_tag=tag)

    specs_text = get_specs_text(f, literal)
    kae = ctx.obj['kae_api']
    git = git or get_remote_url(remote=ctx.obj['remotename'])
    if not git:
        fatal("git url not found, please check repository or pass argument")
    branch = get_current_branch()
    with handle_console_err():
        kae.register_release(appname, tag, git, specs_text, branch=branch)
    click.echo(info('Register %s %s %s done.' % (appname, tag, git)))
Exemplo n.º 15
0
def get_config(ctx, appname):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    with handle_console_err():
        d = kae.get_config(appname)
    if isinstance(d, dict):
        for k, v in d.items():
            click.echo(info("key:"))
            click.echo(k)
            click.echo(info("data:"))
            click.echo(v)
    else:
        click.echo(d)
Exemplo n.º 16
0
Arquivo: app.py Projeto: apeming/cli
def get_app_releases(ctx, appname, raw):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    with handle_console_err():
        releases = kae.get_app_releases(appname)

    if raw:
        click.echo(str(releases))
    else:
        table = PrettyTable(['name', 'tag', 'created'])
        for r in releases:
            table.add_row([appname, r['tag'], r['created']])
        click.echo(table)
Exemplo n.º 17
0
Arquivo: app.py Projeto: apeming/cli
def get_release(ctx, appname, tag, raw):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    tag = get_git_tag(git_tag=tag)

    with handle_console_err():
        r = kae.get_release(appname, tag)

    if raw:
        click.echo(str(r))
    else:
        table = PrettyTable(['name', 'tag', 'created'])
        table.add_row([appname, r['tag'], r['created']])
        click.echo(table)
Exemplo n.º 18
0
def set_config(ctx, appname, name, f, literal):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    if literal:
        data = literal
    elif f:
        try:
            with open(f, "r") as fp:
                data = fp.read()
        except Exception:
            fatal("can't read config data from {}".format(f))
    with handle_console_err():
        d = kae.set_config(appname, name, data)
    ss = pprint.pformat(d)
    click.echo(info(ss))
Exemplo n.º 19
0
Arquivo: test.py Projeto: kaecloud/cli
def test(appname, tag, f, literal):
    """build test image and run test script in app.yaml"""
    repo_dir = os.getcwd()
    if f:
        repo_dir = os.path.dirname(os.path.abspath(f))

    appname = get_appname(cwd=repo_dir, appname=appname)
    tag = get_git_tag(cwd=repo_dir, git_tag=tag, required=False)
    if tag is None:
        tag = 'latest'

    specs_text = get_specs_text(f, literal)
    if specs_text is None:
        errmsg = [
            "specs_text is required, please use one of the instructions to specify it.",
            "1. specify --literal or -f in coomand line",
            "2. make the current workdir in the source code dir which contains app.yaml"
        ]
        fatal('\n'.join(errmsg))
    try:
        yaml_dict = yaml.load(specs_text)
    except yaml.YAMLError as e:
        fatal('specs text is invalid yaml {}'.format(str(e)))
    try:
        specs = app_specs_schema.load(yaml_dict).data
    except Exception as e:
        fatal('specs text is invalid: {}'.format(str(e)))
    if "test" not in specs:
        fatal("no test specified in app.yaml")
    builds = specs['test']['builds']
    if len(builds) == 0:
        builds = specs["builds"]
    for build in builds:
        image_tag = build.tag if build.tag else tag
        dockerfile = build.get('dockerfile', None)
        if dockerfile is None:
            dockerfile = os.path.join(repo_dir, "Dockerfile")
        full_image_name = "{}:{}".format(build.name, image_tag)
        build_image(full_image_name, repo_dir, None, dockerfile=dockerfile)

    default_image_name = "{}:{}".format(appname, tag)
    for entrypoint in specs['test']['entrypoints']:
        image = entrypoint.image if entrypoint.image else default_image_name
        cmd = entrypoint.script
        volumes = entrypoint.get('volumes', [])
        run_container(image, volumes, cmd)
Exemplo n.º 20
0
def get_app_pods(ctx, appname, raw):
    kae = ctx.obj['kae_api']
    appname = get_appname(appname=appname)
    with handle_console_err():
        pods = kae.get_app_pods(appname)

    if raw:
        click.echo(str(pods))
    else:
        table = PrettyTable(['name', 'status', 'ready'])
        for item in pods['items']:
            name = item['metadata']['name']
            status = item['status']['phase']
            ready = sum([
                1 if c_status['ready'] else 0
                for c_status in item['status']['container_statuses']
            ])
            table.add_row([name, status, ready])
        click.echo(table)