Skip to main content

Docker compose to the next level with Jinja2 templating

Project description

Jinja Compose

GitHub Workflow Status (with event) PyPI - Python Version PyPI - Status PyPI - License PyPI - Version PyPI - Format

jinja-compose is a tool for running docker-compose commands with Jinja2 templating.

Installation

pip install jinja-compose-wrapper

Then ensure your Python bin directory is in your PATH.

Usage

Jinja Compose operates using the same syntax as docker-compose, but with the addition of a template and optional injection file. The typical project setup looks like this:

/project_dir
├── compose.jyml
├── compose.py
└── compose.yaml  [generated by jinja-compose]

Where compose.jyml is a Jinja2 template file, compose.py is an optional Python file containing variables to be injected into the template, and compose.yaml is the generated docker-compose file.

Example

In compose.jyml we define a service called server, which only runs in production when the is_production variable is defined and only forwards ports on a certain host.

services:
  server:
    build:
      context: .
    image: sid220/apriltag_localisation:latest
    environment:
      - DAPRILTAG_PRODUCTION={{ MyJinjaComposeInjection.is_production }}
      - OPENCV_VIDEOIO_DEBUG=1
    {% if MyJinjaComposeInjection.my_static_method() == 'special_host' %}
    ports:
        - "5000:5000"
    {% endif %}

To define the is_production variable and my_static_method method, we create a compose.py file with a class that inherits from JinjaComposeInject.

from jinja_compose_wrapper.libjinja_compose import JinjaComposeInject
import socket

class MyJinjaComposeInjection(JinjaComposeInject):
    is_production = 1
    
    @staticmethod
    def my_static_method():
        return socket.gethostname()

Once done we can now bring this service up:

jinja_compose up

Or just build the yaml file:

jinja_compose -d echo

Full Usage Documentation

jinja_compose [-h] [--template TEMPLATE] [--output OUTPUT] [--injection-file INJECTION_FILE] [--dockercmd [DOCKERCMD]] [--as-root] [action ...]

positional arguments:
  action

options:
  -h, --help            show this help message and exit
  --template TEMPLATE, -i TEMPLATE, -t TEMPLATE
  --output OUTPUT, -o OUTPUT
  --injection-file INJECTION_FILE, -p INJECTION_FILE
  --dockercmd [DOCKERCMD], -d [DOCKERCMD]
  --as-root, -r

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jinja-compose-wrapper-0.0.4.tar.gz (4.7 kB view details)

Uploaded Source

Built Distribution

jinja_compose_wrapper-0.0.4-py3-none-any.whl (6.9 kB view details)

Uploaded Python 3

File details

Details for the file jinja-compose-wrapper-0.0.4.tar.gz.

File metadata

  • Download URL: jinja-compose-wrapper-0.0.4.tar.gz
  • Upload date:
  • Size: 4.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.4

File hashes

Hashes for jinja-compose-wrapper-0.0.4.tar.gz
Algorithm Hash digest
SHA256 407d7f4eb7e979b45ef2ce2bd7c47cc88d796dcd592873b81425357e1de092e7
MD5 2a1a9a9fa2a29e701d96b23d50026da9
BLAKE2b-256 56cea1c6b6fb2ad1043068cf26490829e0be8bb1c801dfb69d39f359eac2f237

See more details on using hashes here.

File details

Details for the file jinja_compose_wrapper-0.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for jinja_compose_wrapper-0.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 727de85f0146c0512d3f3816473a3cda4b3e57ccba1120a4d96c7dd45937d0af
MD5 e34b5c9d2b732f68a00cdc101da850a1
BLAKE2b-256 386d699ad2b2d9e1467a2f741d35899ffd36130cc5207efbbc35c5c1d86c7dd9

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page