Skip to main content

Jinja2 tools

Use Jinja2 templates via cli

Install

$ pip install jinja2-tools

Usage

Usage: jinja render [OPTIONS]
Options:
  -d, --data TEXT          PATH to YAML or JSON data file, URL or '-' for
                           stdin.

  -t, --template TEXT      PATH to directory or to any file that uses Jinja,
                           URL or '-' for stdin.

  -v, --verbose
  -tb, --no-trim-blocks    Disable trim blocks.
  -lb, --no-lstrip-blocks  Disable lstrip blocks.
  -o, --output PATH        PATH for output, stdout by default.
  -e, --extra-var TEXT     key value pair separated by '='. 'value' will be
                           treated as JSON or as a string in case of JSON
                           decoding error. This will take precedence over
                           'data'.

  --help                   Show this message and exit.

Whitespace Control

trim_blocks and lstrip_blocks are used by default, to disable them use -tb or -lb respectively.

Examples

  • Use path from the filesystem for data & template:

    ➜ jinja render -d examples/data/data.yaml -t examples/templates/template.yaml
    (1)
    ip access-list extended al-hq-in
    (2)
        (3)    remark Allow traffic from hq to local office
        (4)(2)
        (3)    permit 10.0.0.0/22 10.100.0.0/24
        (5)(6)
    (7)
    
    # All ACLs have been generated
    
  • Use stdin for data & URL for template, also disable trim blocks & lstrip blocks:

    ➜ jinja render -d - -t https://raw.githubusercontent.com/Avielyo10/jinja2-tools/master/examples/templates/template.yaml -lb -tb < examples/data/data.yaml
    (1)
    ip access-list extended al-hq-in
      (2)
        (3)
        remark Allow traffic from hq to local office
        (4)
      (2)
        (3)
        permit 10.0.0.0/22 10.100.0.0/24
        (5)
      (6)
    (7)
    
    # All ACLs have been generated
    
  • Verbose:

    ➜ jinja render -d examples/data/data.yaml -t examples/templates/template.yaml -v     
    ---------- [Data] ----------
    {
      "access_lists": {
        "al-hq-in": [
          {
            "action": "remark",
            "text": "Allow traffic from hq to local office"
          },
          {
            "action": "permit",
            "src": "10.0.0.0/22",
            "dst": "10.100.0.0/24"
          }
        ]
      }
    }
    
    ---------- [Template] ----------
    {% for acl, acl_lines in access_lists.items() %}(1)
    ip access-list extended {{ acl }}
      {% for line in acl_lines %}(2)
        (3){% if line.action == "remark" %}
        remark {{ line.text }}
        (4){% elif line.action == "permit" %}
        permit {{ line.src }} {{ line.dst }}
        (5){% endif %}
      {% endfor %}(6)
    {% endfor %}(7)
    
    # All ACLs have been generated
    
    (1)
    ip access-list extended al-hq-in
    (2)
        (3)    remark Allow traffic from hq to local office
        (4)(2)
        (3)    permit 10.0.0.0/22 10.100.0.0/24
        (5)(6)
    (7)
    
    # All ACLs have been generated
    
  • Pass the data using multiple extra vars:

    ➜ jinja render -t examples/templates/template.yaml \
    -e access_lists='{"al-hq-in": [{"action": "remark", "text": "Allow traffic from hq to local office"}, {"action": "permit", "src": "10.0.0.0/22", "dst": "10.100.0.0/24"}]}' \
    -e message=world \
    -v
    ---------- [ExtraVars] ----------
    {
      "access_lists": {
        "al-hq-in": [
          {
            "action": "remark",
            "text": "Allow traffic from hq to local office"
          },
          {
            "action": "permit",
            "src": "10.0.0.0/22",
            "dst": "10.100.0.0/24"
          }
        ]
      },
      "message": "world"
    } 
    
    ---------- [Template] ----------
    {% for acl, acl_lines in access_lists.items() %}(1)
    ip access-list extended {{ acl }}
      {% for line in acl_lines %}(2)
        (3){% if line.action == "remark" %}
        remark {{ line.text }}
        (4){% elif line.action == "permit" %}
        permit {{ line.src }} {{ line.dst }}
        (5){% endif %}
      {% endfor %}(6)
    {% endfor %}(7)
    hello {{ message }}!
    # All ACLs have been generated 
    
    (1)
    ip access-list extended al-hq-in
    (2)
        (3)    remark Allow traffic from hq to local office
        (4)(2)
        (3)    permit 10.0.0.0/22 10.100.0.0/24
        (5)(6)
    (7)
    hello world!
    # All ACLs have been generated
    
  • Use directory option

    ➜ jinja render -d examples/data/data.yaml -t examples/ -o test/
    ➜ tree test/
    test/
    ├── config
    │   ├── example.ini
    │   └── example.properties
    ├── data
    │   ├── data.json
    │   └── data.yaml
    └── templates
        ├── lookup.yaml
        └── template.yaml
    
    3 directories, 6 files
    ➜ cat test/templates/template.yaml
    (1)
    ip access-list extended al-hq-in
    (2)
        (3)    remark Allow traffic from hq to local office
        (4)(2)
        (3)    permit 10.0.0.0/22 10.100.0.0/24
        (5)(6)
    (7)
    hello jinja!
    # All ACLs have been generated
    

Release files for jinja2-tools 1.0.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for jinja2-tools 1.0.8
File Size Uploaded
jinja2-tools-1.0.8.tar.gz 21.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for jinja2-tools 1.0.8
File Interpreter ABI Platform
jinja2_tools-1.0.8-py3-none-any.whl Python 3 none any Details

Total release size: 43.8 kB

Release files / jinja2-tools-1.0.8.tar.gz

Download URL jinja2-tools-1.0.8.tar.gz
Size 21.3 kB
Tags Source
SHA-256 checksum
How to use checksums
9abfec5aea736fe55911ac5d073af8f24921230bd3c7f1a103ec2226d60e2cc3
BLAKE2b-256 checksum
How to use checksums
536ee4517920c1d7aa42b3f828e13e101ff36b0bce44633faee43e5c32006fe6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.2

Release files / jinja2_tools-1.0.8-py3-none-any.whl

Download URL jinja2_tools-1.0.8-py3-none-any.whl
Size 22.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
b345288cdf4c2d63fad24504bf4a5e948aeefb01f31bc6305aeca8b17ff0a43d
BLAKE2b-256 checksum
How to use checksums
f5c79e307ab39f2a1f2899d2f49f1b66dea62a79deda2bc3171d8f5dbdfbd291
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.12.2

Release history Release notifications | RSS feed

This release

1.0.8 This release

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page