Skip to content


Peering Manager comes with a built-in templating feature. This feature can be used to generate configuration for routers as well as e-mails.


Even though Peering Manager uses a sandboxed environment to run Jinja2 logic, the language is powerful enough to do things that can potentially leak confidential details or even harm the machine. Be extremely careful when using code from someone else.


The templating feature is based on Jinja2. To simplify template writing, Peering Manager exposes variables and filters. While exposed filters are always the same, variables depends on the context in which the template is rendered. Rendering a device configuration uses a context different from the one used when rendering an e-mail.

You can also use Jinja2 extensions by installing them in the Python environment and asking Peering Manager to load them using the JINJA2_TEMPLATE_EXTENSIONS setting.


Tests can be performed via a terminal and the render_configuration command. This command must be run from Peering Manager's virtual environment and can take up to five arguments:

  • --limit [LIMIT]: limit the configuration to the given set of routers (comma separated)
  • --input [INPUT]: file to read the template from (default to stdin)
  • --output [OUTPUT]: file to write the configuration to (default to stdout)
  • --trim: remove new line after tag (keep them by default)
  • --lstrip: strip whitespaces before block (keep them by default)

For example, to generate the configuration for a device called router1 from the standard input and printing it to the standard output, the command to run will be:

(venv) # echo '{{ router.hostname }} | python render_configuration --limit router1


If you need some guidance before writing a template, you can take a look at the following examples. Please note these may require changes to work as intended as they are maintained by the community.