ansible-compose: deploy docker-compose over ssh
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Deploying a docker-compose.yml
==============================

Provide ssh configuration and target dir as first argument, then the path to a
docker-compose.yml file::

   ansible-compose user@host:22/absolute/target/path ./docker-compose-example.yml

Or, deploy from a url, just like kubectl apply would let you::

   ansible-compose user@host:22/absolute/target/path https://raw.git.../docker-compose.yml

Automatic creation of volume dirs
=================================

It will try to automatically create the volume bind dirs for you. To set the
uid and/or guid, set them as env vars, either in the compose.yml::

   environment:
     uid: 1001
     gid: 100

Or with an env var::

   web_environment_uid=1001

Transforms for docker-compose.yml on the CLI
============================================

Transforms apply on the docker-compose.yml as if it was a template we are going
to render using environment variables.

``drop_web_environment=1``
   The best source of documentation for this feature is the test script.

with env vars: servicename_environment_something=foo will overwrite the
something env var of the servicename service with the `foo` value, whereas
setting drop_servicename_environment_something=1 will drop the value at all.

This kind of filter will also work on service options ie. servicename_image=foo
or drop_servicename_image=1 would respectively override and drop the image key
of the servicename service. It also works on services themselves, and any other
key at the first level of the compose document.

Note that any other argument will be passed to ansible-playbook.

Running commands on the compose of a target
===========================================

Provide ssh configuration and target dir as first argument, then the
docker-compose command::

   ansible-compose user@host:22/absolute/target/path stop
   ansible-compose user@host:22/absolute/target/path start
   ansible-compose user@host:22/absolute/target/path logs
   ansible-compose user@host:22/absolute/target/path help

Installation
============

Local::

   pip install --user ansible-compose
   export PATH="$HOME/.local/bin:$PATH"
   echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc

The current configuration in CI for image yourlabs/ansible-compose is:

- ANSIBLE_HOST_KEY_CHECKING=false
- SSH_PRIVATE_KEY=our passwordless private key generated with ssh-keygen -t ed25519 and default options
- SSH_INSECURE=true not checking any host key today !

Example gitlab ci job
=====================

.. code-block:: yaml

   deploy:
      stage: deploy
      image: yourlabs/ansible-compose
      script:
      - ansible-compose
            deploy@example.com/home/staging
            ./docker-compose.yml
            # composed to rely on $CI_COMMIT_SHA
