Пример #1
0
def show():
    """
        Show running plans
    """

    loader = Loader()

    table = Table(title='running plan report')
    table.add_column('plan')
    table.add_column('container(s)')
    table.add_column('port(s)')
    table.add_column('volume(s)')

    for plan in loader.valid_plans():
        if not len(plan.container.containers()) > 0:
            continue

        table.add_row(
            f'[bold]{plan.name}[/]',
            '\n'.join(f'[cyan]{c.name}[/]'
                      for c in plan.container.containers()),
            '\n'.join(f'[blue]{p[1]}<-{p[0]}[/]'
                      for p in plan.container.ports()),
            f"[green]{','.join(f'{v[0]}->{v[1]}' for v in plan.volumes.items())}[/]",
        )

    console.print(table)
Пример #2
0
Файл: plans.py Проект: vcont/dwn
def show(detail):
    """
        Shows all of the available plans
    """

    loader = Loader()

    if detail:
        table = Table(title='dwn plans',
                      show_lines=True,
                      caption=f'{len(loader.valid_plans())} plans')
        table.add_column('name')
        table.add_column('path', overflow='fold')
        table.add_column('volumes', overflow='fold')
        table.add_column('ports')
        table.add_column('yaml', no_wrap=True)

        for p in loader.valid_plans():
            table.add_row(
                f'[bold]{p.name}[/]',
                f'[dim]{p.plan_path}[/]',
                f"[green]{','.join(f'{v[0]}->{v[1]}' for v in p.volumes.items())}[/]",
                f"[blue]{','.join(f'{o[0]}<-{o[1]}' for o in p.exposed_ports)}[/]",
                f'{open(p.plan_path).read()}',
            )

        console.print(table)

        return

    table = Table(title='dwn plans',
                  caption=f'{len(loader.valid_plans())} plans')
    table.add_column('name')
    table.add_column('path', overflow='fold')

    for p in loader.valid_plans():
        table.add_row(
            f'[bold]{p.name}[/]',
            f'[dim]{p.plan_path}[/]',
        )

    console.print(table)
Пример #3
0
def pull(name):
    """
        Pull plan images.
    """

    plan_targets = []

    if not name and not click.confirm('> a plan name was not specified, '
                                      'pull all valid plan images?'):
        return

    try:
        client = docker.from_env()
    except DockerException as e:
        console.error(f'failed to connect to docker: [bold]{e}[/e]')
        return

    loader = Loader()

    if name:
        plan_targets.append(loader.get_plan(name))
    else:
        [plan_targets.append(n) for n in loader.valid_plans()]

    for p in plan_targets:
        try:
            console.info(f'pulling image [bold]{p.image}:{p.version}[/]')
            client.images.pull(p.image, tag=p.version)
        except ImageNotFound as e:
            console.error(f'failed to pull image: [bold]{e}[/]')
            continue
        except DockerException as e:
            console.error(f'a docker exception occurred: [bold]{e}[/]')
            continue

        console.info(
            f'image [bold]{p.image}:{p.version}[/] for plan [cyan]{p.name}[/] pulled'
        )
Пример #4
0
Файл: plans.py Проект: vcont/dwn
def update(name):
    """
        Update plan images.
    """

    plan_targets = []

    if not name and not click.confirm('> a plan name was not specified, '
                                      'pull all valid plan images?'):
        return

    try:
        client = docker.from_env()
    except DockerException as e:
        console.error(f'failed to connect to docker: [bold]{e}[/e]')
        return

    loader = Loader()

    if name:
        plan_targets.append(loader.get_plan(name))
    else:
        [plan_targets.append(n) for n in loader.valid_plans()]

    for p in plan_targets:
        if p is None:
            continue

        try:
            # build the image if we have an inline dockerfile
            if p.has_dockerfile():
                console.info(f'building image [bold]{p.image_version()}[/]')
                dockerfile = BytesIO(p.dockerfile.encode('utf-8'))

                _, logs = client.images.build(fileobj=dockerfile,
                                              pull=True,
                                              tag=p.image_version(),
                                              rm=True,
                                              forcerm=True,
                                              nocache=True)
                for log in logs:
                    console.debug(log)

                console.info(
                    f'container for [bold]{p.image_version()}[/] built')

            # pull the image instead
            else:
                console.info(f'pulling image [bold]{p.image_version()}[/]')
                client.images.pull(p.image, tag=p.version)

        except ImageNotFound as e:
            console.error(f'failed to pull image: [bold]{e}[/]')
            continue
        except DockerException as e:
            console.error(f'a docker exception occurred: [bold]{e}[/]')
            continue

        console.info(
            f'image [bold]{p.image_version()}[/] for plan [cyan]{p.name}[/] updated'
        )