A
T
A
.
C
S
V
L
O
B
A
L
.
Y
M
L
A
R
S
.
Y
M
L
E
M
P
L
A
T
E
.
J
2
Outputs
JinjaFx can create different outputs from the same template using the following syntax:
<output "Output 1"> ... </output> <output "Output 2"> ... </output>
By default an output is rendered as text, but you can also tell JinjaFx to render it as HTML or Markdown (GFM), e.g:
<output:html "Output 1"> ... </output> <output:markdown "Output 2"> ... </output>
Dynamic CSV
Within the "data.csv" pane you can specify regular CSV where each row will be treated as a data set using the header row for variable names. However, it also supports something which I call Dynamic CSV where you can use regular expression based static character classes or static groups as values within the data rows using (value1|value2|value3) or [a-f]. These will then be expanded into multiple rows, e.g:
DEVICE, TYPE us(ma|n[yh]|tx)-pe-1[ab], pe
The above would be expanded to the following, which JinjaFx would then loop through like normal rows (be careful as you can easily create huge data sets) - if you do wish to use literal brackets then they would need to be escaped (e.g. "\[" or "\(").
DEVICE, TYPE usma-pe-1a, pe usma-pe-1b, pe ustx-pe-1a, pe ustx-pe-1b, pe usny-pe-1a, pe usny-pe-1b, pe usnh-pe-1a, pe usnh-pe-1b, pe
We also support the ability to expand rows based on numerical counters using the { start[-end]:step } syntax, e.g:
INTERFACE
et-0/0/{0-9:1}
The above syntax would convert one row into ten rows using the values 0 to 9. If the end value is omitted then it is a passive counter and will only increment if something else is expanding the rows.
Inputs
Normally data is provided to JinjaFx via CSV or YAML/JSON using the above panes, but JinjaFx can also prompt the user for input using the "jinjafx_input" variable in "vars.yml", e.g:
jinjafx_input: prompt: name: text: "Name" required: True age: text: "Age" required: True pattern: "[1-9]+[0-9]*"
These inputs can then be used in your template using the following Jinja2 syntax:
{{ jinjafx_input['name'] }} is {{ jinjafx_input['age'] }} years old
For more advanced syntax that allows you to specify the format of the input dialog please see README.md on GitHub.