From 296b5f06c7b85703813f7ccb941239fd35f776af Mon Sep 17 00:00:00 2001 From: Sivan Becker Date: Thu, 5 Sep 2019 17:19:13 +0300 Subject: [PATCH] Adding docker compose override files to cob docker deploy --- cob/cli/docker_cli.py | 12 ++++++++++-- cob/templates/systemd_unit.j2 | 2 +- doc/changelog.rst | 1 + doc/deployment.rst | 7 +++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/cob/cli/docker_cli.py b/cob/cli/docker_cli.py index 82f4519..1737a6c 100644 --- a/cob/cli/docker_cli.py +++ b/cob/cli/docker_cli.py @@ -411,19 +411,27 @@ def _generate_compose_file_from_image(image_name, *, http_port=None): @docker.command(name='deploy', help='Deploys an dockerized cob app image to the local systemd-based machine') @click.option('--force', is_flag=True, default=False) +@click.option('--compose-override', 'compose_overrides', multiple=True) @click.argument('image_name') -def deploy_image(image_name, force): +def deploy_image(image_name, force, compose_overrides): click.echo(f'Obtaining project information for {image_name}...') project_name = _get_project_name_from_image(image_name) unit_template = load_template('systemd_unit') filename = Path('/etc/systemd/system') / f'{project_name}-docker.service' + + for override_file in compose_overrides: + docker_compose_override_file = Path(override_file) + _logger.debug(f'Checking the existance of a docker compose override file under project root {docker_compose_override_file}') + if not docker_compose_override_file.exists(): + raise click.ClickException(f'File {docker_compose_override_file} does not exist') + click.echo(f'Writing systemd unit file under {filename}...') if filename.exists() and not force: click.confirm(f'{filename} already exists. Overwrite?', abort=True) tmp_filename = Path(mkdtemp()) / 'systemd-unit' with tmp_filename.open('w') as f: # pylint: disable=no-member - f.write(unit_template.render(project_name=project_name, image_name=image_name, cob=f'{sys.executable} -m cob.cli.main')) + f.write(unit_template.render(project_name=project_name, image_name=image_name, compose_overrides=compose_overrides, cob=f'{sys.executable} -m cob.cli.main')) subprocess.check_call(f'sudo -p "Enter password to deploy service" mv {tmp_filename} {filename}', shell=True) click.echo(f'Starting systemd service {filename.stem}...') diff --git a/cob/templates/systemd_unit.j2 b/cob/templates/systemd_unit.j2 index 4dcd809..09d268d 100644 --- a/cob/templates/systemd_unit.j2 +++ b/cob/templates/systemd_unit.j2 @@ -7,7 +7,7 @@ After=docker.service Type=oneshot RemainAfterExit=yes ExecStartPre=-{{cob}} docker stop-image {{image_name}} -ExecStart={{cob}} docker run-image {{image_name}} -d +ExecStart={{cob}} docker run-image {{image_name}} {% for cfile in compose_overrides %} -o {{cfile}} {% endfor %} -d ExecStop={{cob}} docker stop-image {{image_name}} [Install] diff --git a/doc/changelog.rst b/doc/changelog.rst index 3fe6dce..b507a0b 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -1,6 +1,7 @@ Changelog ========= +* :feature:`122` Adding docker compose override files to ``cob docker deploy --compose-override``. The new flag can be used multiple times. * :release:`0.21.4 <10-02-2019>` * :release:`0.21.3 <13-12-2018>` * :release:`0.21.2 <06-12-2018>` diff --git a/doc/deployment.rst b/doc/deployment.rst index 14a688b..b9eb67b 100644 --- a/doc/deployment.rst +++ b/doc/deployment.rst @@ -87,3 +87,10 @@ If your target machine is based on *systemd* (e.g. recent Ubuntu Server releases $ cob docker deploy your.server.com:4567/myproject:latest This will pull off the needed information from the Docker image and create appropriate unit files to run your project. + + + +.. note:: cob uses docker-compose for deployment. a docker-compose-override yml file can be provided which is then used as described in `docker-compose overview `_. + +To use the above capability, add ``--compose-override `` to the above ``cob docker deploy`` command. +You can use more than one compose-override files by repeating the flag for each file.