Skip to main content

Extend your dockerfiles with Jinja2 syntax to to more awesome dockerfiles

Project description

docker-jinja - dj

Extend your dockerfiles with Jinja2 syntax and logic.

Create new filter and functions for Jinja with simple datasource files.

Installation

Install from pypi with pip install docker-jinja

To install in development mode, first navigate to root of project and then run pip install -r dev-requirements.txt; pip install -e .. It is recommended to install inside a virtualenv to avoid conflicts with dependencies.

Quickstart guide

Create a Dockerfile.jinja that contains all regular Dockerfile build steps and the jinja syntax. For exapmle:

$ cat Dockerfile.jinja 
FROM {{ OS }}
MAINTAINER {{ MAINTAINER }} 

ARG {{ ARG1 }}

Run dj command. For example:

dj --dockerfile Dockerfile.jinja --outfile Dockerfile --env OS=ubuntu:12.04 --env MAINTAINER=Grokzen --env ARG1=foobar --config test-config.json

And you will get the output:

FROM ubuntu:12.04
MAINTAINER Grokzen

ARG foobar

Configuration files

It is possible to create predefined configuration files with settings, enviroment variables and datasources.

dj tries to load the following configuration files in the following order:

  • /etc/dj.yaml
  • /etc/dj.json
  • ~/.dj.yaml
  • ~/.dj.json
  • $CWD + '.dj.yaml'
  • $CWD + '.dj.json'

YAML is the file format to prefer but json is also supported.

Currently it is not possible to automatically load a config file next to the source Dockerfile.

Datasources

If you want to extend the Jinja syntax with additional filters and global functions you have the datasource pattern to help you.

A datasource file is a python script that can contain any code you want so you can extend dj to be capable to perform any task you want.

You can tell dj to load a datasource file in multiple ways.

  • In any config file create a key datasources with a list of strings paths pointing to all files that dj should import. (Must be absolute path)
  • Point to a file with cli key -s/--datasource and dj will load that file. (Relative paths is supported)
  • Add a python file to contrib folder and it will auto load during execution.

Global functions ################

A global function is a regular python function that you can call from jinja. These functions can be used to perform any usefull task you require.

To create a global function you define a method within a datasource and its name should starts with _global_ and then follow by the name you want to use in your Dockerfile.

For example if you have the following code:

def _global_foo():
    return "bar" 

You can call it from jinja with:

RUN echo '{{ foo() }}'

and it will render into

RUN echo 'bar'

Filter functions ################

To create a new filter function you define a method within a datasource and its name should starts with _filter_ and then follow by the name you want to use in your Dockerfile.

For example if you have the following code

def _filter_bar(arg):
    return arg.upper()

You can call it from jinja with:

RUN echo '{{ "opa"|bar }}'

and it will render into

RUN echo 'OPA'

Other rendering engines

Currently only Jinja2 is supported as rendering engine

Supported python version

  • 3.10

Contribute

Open an Issue on github describing the problem you have.

If you have a fix for the problem or want to add something to contrib library, open a PR with your fix. The PR must contain some test to verify that it work if it is a bugfix or new feature. All tests in all supported python environments must pass on TravisCI before a PR will be accepted.

All PR:s should have their commits squashed to a single commit.

License

See LICENSE file. (MIT)

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

docker-jinja3-0.0.0.post3.tar.gz (10.6 kB view details)

Uploaded Source

Built Distribution

docker_jinja3-0.0.0.post3-py3-none-any.whl (10.2 kB view details)

Uploaded Python 3

File details

Details for the file docker-jinja3-0.0.0.post3.tar.gz.

File metadata

  • Download URL: docker-jinja3-0.0.0.post3.tar.gz
  • Upload date:
  • Size: 10.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.6

File hashes

Hashes for docker-jinja3-0.0.0.post3.tar.gz
Algorithm Hash digest
SHA256 3ae933a5037d48db86fc1b400d0e646c755d3e8e6dfa57e4924e378d02781e08
MD5 b42ee4dfa65fe43802ee4e7f0a4af68a
BLAKE2b-256 e9981dd2bb79b8525d99c6d5d08b5931239c2f81b57fa78cc4df00e3f485a936

See more details on using hashes here.

File details

Details for the file docker_jinja3-0.0.0.post3-py3-none-any.whl.

File metadata

File hashes

Hashes for docker_jinja3-0.0.0.post3-py3-none-any.whl
Algorithm Hash digest
SHA256 c7635e206bbd85189388f54930883f0d7d58e5f7df4163b4a737db26a9f59ea1
MD5 d2028f1f7b809e540388a0bf73dc587f
BLAKE2b-256 bf28d57d5490d78ae165a7d682e2ddf2adcf1276673e79c08a96e61f78e0d190

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