A tool to generate templates based on Jinja and YAML
Project description
cfgtemplater
cfgtemplater is a Jinja2 template CLI rendering tool. It allows to integrate metadata and defaults variables values within a YAML header. It is also integrates basic IP filters and tests since it's main development purpose is to generate network devices configuration files. It is as well able to load external filters and tests from other python modules.
Installation
pip install cfgtemplater
Usage
usage: cfgtemplater [-h] [-y YAML] [-p KEY=VALUE] [-e FILE] TEMPLATE
A simple YAML/Jinja2 config generator.
positional arguments:
TEMPLATE template
optional arguments:
-h, --help show this help message and exit
-y YAML YAML file
-p KEY=VALUE key/value pair
-e FILE Jinja2 extensions modules
Usage examples
Load variables from a YAML file
cfgtemplater -y variables.yml template.j2
Load variables from multiple YAML files (merged in order)
cfgtemplater -y default_variables.yml -y instance_variables.yml template.j2
Override variables from CLI
cfgtemplater -y default_variables -p 'variable1=value1' template.j2
Pass python literals from CLI
cfgtemplater -p "variable1=[{'name':'varx', 'value':'x'}, {'name':'vary', 'value':'y'}]" template.j2
Template
(Main) template may look like this:
---
name: Example template
variables:
variable1:
default: "example"
description: "example variable"
variable2:
default:
- value: 0
name: zero
- value: 1
name: one
---
This is an {{ variable1 }} file.
{% for variable in variable2 %}
This is a {{ variable.name }} : {{ variable.value }}
{% endfor %}
{{ variable3 }}
The YAML header may contain template metadata (like name, description, whatever). It may as well contain default variables or variables descriptions or any variable metadata. Defaults values are injected in the template when rendering, and can be redefined using CLI or YAML file.
Extensions
Jinja2 filters and tests can be loaded from external files.
Load ansible ipaddr filter (ansible_ipaddr.py)
import netaddr
from ansible.plugins.filter.ipaddr import *
Render template using ipaddr filters
cfgtemplater -e ansible_ipaddr.py template.j2
Basic module usage
>>> from cfgtemplater.config_template import ConfigTemplate
>>> t = ConfigTemplate('examples/example1.j2')
>>> t.name
'Example template'
>>> t.variables
{'variable1': {'default': 'example', 'description': 'example variable'}, 'variable2': {'default': [{'value': 0, 'name': 'zero'}, {'value': 1, 'name': 'one'}]}}
>>> t.content
'This is an {{ variable1 }} file.\n\n{% for variable in variable2 %}\n This is a {{ variable.name }} : {{ variable.value }}\n{% endfor %}\n\n{{ variable3 }}\n'
>>> print(t.render({'variable3': 'TEST'}))
This is an example file.
This is a zero : 0
This is a one : 1
TEST
Integrated filters and tests
IP filters
first_address
{{ ipv4_net | first_address }}
{{ ipv6_net | first_address }}
192.0.2.1/24
2001:db8::1/120
last_address
{{ ipv4_net | last_address }}
{{ ipv6_net | last_address }}
192.0.2.254/24
2001:db8::ff/120
address
{{ ipv4_net | address }}
{{ ipv6_net | address }}
192.0.2.0
2001:db8::
network
{{ ipv4_net | first_address | network }}
{{ ipv6_net | first_address | network }}
192.0.2.0/24
2001:db8::/120
broadcast
{{ ipv4_net | broadcast }}
{{ ipv6_net | broadcast }}
192.0.2.255/24
2001:db8::ff/120
prefixlen
{{ ipv4_net | prefixlen }}
{{ ipv6_net | prefixlen }}
24
120
netmask
{{ ipv4_net | netmask }}
{{ ipv6_net | netmask }}
255.255.255.0
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00
hostmask
{{ ipv4_net | first_address | hostmask }}
{{ ipv6_net | first_address | hostmask }}
0.0.0.255
::ff
compress
{{ '192.000.002.001' | compress }}
{{ '2001:0db8:0000:0000:0000:0000:0000:0001' | compress }}
192.0.2.1
2001:db8::1
uncompress
{{ '192.0.2.1' | uncompress }}
{{ '2001:db8::1' | uncompress }}
192.000.002.001
2001:0db8:0000:0000:0000:0000:0000:0001
octets
{% for octet in ipv4_net | octets %}
{{ octet }}
{% endfor %}
192
0
2
0
hextets
{% for hextet in ipv6_net | hextets %}
{{ hextet }}
{% endfor %}
2001
0db8
0000
0000
0000
0000
0000
0000
IP tests
is_ip
{{ ipv4_net | is_ip }}
{{ ipv6_net | is_ip }}
{{ 'test' | is_ip
True
True
False
is_ipv4
{{ ipv4_net | is_ipv4 }}
{{ ipv6_net | is_ipv4 }}
True
False
is_ipv6
{{ ipv6_net | is_ipv6 }}
{{ ipv4_net | is_ipv6 }}
True
False
is_ip_net
{{ ipv4_net | is_ip_net }}
{{ ipv6_net | is_ip_net }}
{{ ipv6_net | first_address | is_ip_net }}
{{ ipv6_net | first_address | is_ip_net }}
True
True
False
False
is_ipv4_net
{{ ipv4_net | is_ipv4_net }}
{{ ipv6_net | is_ipv4_net }}
{{ ipv4_net | first_address | is_ipv4_net }}
{{ ipv6_net | first_address | is_ipv4_net }}
True
False
False
False
is_ipv6_net
{{ ipv6_net | is_ipv6_net }}
{{ ipv4_net | is_ipv6_net }}
{{ ipv6_net | first_address | is_ipv4_net }}
{{ ipv4_net | first_address | is_ipv4_net }}
True
False
False
False
is_ipv4_host
{{ ipv4_net | first_address | is_ipv4_host }}
{{ ipv4_net | is_ipv4_host }}
True
False
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file cfgtemplater-0.0.2.tar.gz
.
File metadata
- Download URL: cfgtemplater-0.0.2.tar.gz
- Upload date:
- Size: 7.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 49a9b0bf86c87c124f827e915b062bacf0e8e83afb7711eae092e18cc7b2b583 |
|
MD5 | 74665c113ae34e9971660136855565df |
|
BLAKE2b-256 | e216cce8c3497f2951f142386b1899effee52672ed57d34e8a44f86a1184bf94 |
File details
Details for the file cfgtemplater-0.0.2-py3-none-any.whl
.
File metadata
- Download URL: cfgtemplater-0.0.2-py3-none-any.whl
- Upload date:
- Size: 8.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.31.1 CPython/3.7.3
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7cbc0f92a548547cd2ea028c48ae844433fbc3fd6e0121c6debeeb1d3b4b95cf |
|
MD5 | 10c0fcce0ac886b97cfe8e132ccfc21e |
|
BLAKE2b-256 | 5a41d73465844cf68b50d28f89e4224204fe8e9273e0753097ff8242f7a55377 |