Skip to content

ivanbratovic/laebelmaker

Repository files navigation

Laebelmaker

Tool for generating Traefik labels. Written in Python.

Installation

Laebelmaker is published on PyPI. You can use pip to install it:

python3 -m pip install --user laebelmaker

It is recommended that you also install the docker module. You can install both Laebelmaker and docker as its dependency with:

python3 -m pip install --user laebelmaker[docker]

This will allow Laebelmaker to use metadata of Docker images to prevent redundant prompts from the user, e.g. when an image exposes a single port.

Usage

Laebelmaker can be used to automatically generate Traefik labels from various sources, such as docker-compose.yml files, running Docker containers and user-given options.

You can always consult the help menu for all features with short (and hopefully clear) explanations:

$ laebelmaker --help
usage: laebelmaker [-h] [-i] [-c NAME] [-f FORMAT] [FILE ...]

Generate Traefik labels

positional arguments:
  FILE                  Compose file to generate labels for

options:
  -h, --help            show this help message and exit
  -i, --interactive     use interactive mode
  -c NAME, --container NAME
                        generate labels for a given container on the system
  -f FORMAT, --format FORMAT
                        set output format, one of: [docker, none, yaml]

Examples

CLI Interactive Mode

$ laebelmaker -i
Enter value for 'deploy name': myapp
Enter value for 'url': myapp.example.com
Enter value for 'port' (integer): 25565
Enter value for 'https redirection' (yes/No): no
--START GENERATED LABELS FOR 'myapp'--
traefik.enable=true
traefik.http.routers.myapp.rule=Host(`myapp.example.com`)
traefik.http.services.myapp.loadbalancer.server.port=25565
--END GENERATED LABELS FOR 'myapp'--

With Compose YAML file

Invoking laebelmaker on a Docker Compose YAML file, the program will prompt the user for different options, with the defaults given in parentheses. This example also modifies the output format with -f yaml, which means the labels are immediately ready to be used in a YAML file.

$ laebelmaker -f yaml examples/docker-compose-testapp.yml
Found multiple services.
 1. testapp
 2. testapp-db
Service number to use (default 1): 1
Enter value for 'url': testapp.example.com/api
Enter value for 'https redirection' (yes/No): yes
Enter value for 'web entrypoint': http
Enter value for 'websecure entrypoint': https
Enter value for 'tls resolver': letsencrypt
--START GENERATED LABELS FOR 'testapp'--
  - traefik.enable=true
  - traefik.http.routers.testapp.rule=(Host(`testapp.example.com`) && PathPrefix(`/api`))
  - traefik.http.routers.testapp.entrypoints=http
  - traefik.http.routers.testapp-https.rule=(Host(`testapp.example.com`) && PathPrefix(`/api`))
  - traefik.http.routers.testapp-https.entrypoints=https
  - traefik.http.routers.testapp.middlewares=testapp-redir
  - traefik.http.middlewares.testapp-redir.redirectscheme.scheme=https
  - traefik.http.routers.testapp-https.tls=true
  - traefik.http.routers.testapp-https.tls.certresolver=letsencrypt
  - traefik.http.services.testapp.loadbalancer.server.port=80
--END GENERATED LABELS FOR 'testapp'--

If an invalid file is given, Laebelmaker should hopefully print a sensible error message.

$ laebelmaker examples/invalid-image-tag.yml
Pulling image:
 ⠿ ubuntu:latestest Failed
Invalid image tag: 'ubuntu:latestest' in 'examples/invalid-image-tag.yml'.
Failed to produce output.
Try running: laebelmaker --help

To-do

  • Generate Traefik labels using an interactive CLI
  • Generate Traefik labels using command-line options
  • Generate labels from existing service definitions (e.g. Docker Compose YAML files)
  • Learn how to and publish this project to PyPi
  • Add combined Rule types (with logical operators)
  • Add automated tests
  • Increase code coverage for tests
  • Add support for TCP/UDP routers and services
  • Remove pyyaml as a hard dependency
  • Add local Traefik config as data source (e.g. for entrypoint and TLS resolver names)
  • Add Dockerfile as a data source
  • Add K8s YAML as a data source
  • Add Docker Swarm YAML as a data source
  • Add more sophisticated Rule parsing (e.g. from a given URL)

Something to think about:

  • Expand out of Traefik into a more general use-case
  • Compatibility for Windows machines

Guidelines for development

  • Ease of use is a priority
  • Use sensible defaults without asking, when possible
  • When defaults are not possible, offer the user a sensible prefilled value
  • The code should be as Pythonic as possible
  • Use type hints as much as possible to catch logical errors

Local development setup

For local development, a virtual environment is highly recommended. The following section will assume you installed a virtual environment with the venv module:

python3 -m venv venv

All requirements for development are given in requirements-dev.txt. Install all of them before contributing. This is required for pre-commit. You can use the following command to install the requirements:

python3 -m pip --require-virtualenv install -r requirements-dev.txt

Before commiting, install pre-commit hooks for Git by running:

pre-commit install

This will run the following programs to verify a commit:

You can install the Laebelmaker project locally in Development Mode:

python3 -m pip install -e .

The project will be installed in the virtual environment but will remain editable.

About

Tool for generating Traefik labels

Resources

License

Stars

Watchers

Forks

Packages

No packages published