La renderización de Jinja2 no está reemplazando las variables con valores.
Tengo el siguiente problema:
clave/valores:
..
link_1: ge0/0/1
link_2: ge0/0/2
link_3: ge0/0/3
link_4: ge0/0/4
plantilla jinja2:
..
{% for index in range(1,5) %}
{%- set line = [‘link_’,index]|join %}
set interface {{line}} speed 1g
{% endfor %}
Esperaba obtener los valores en lugar de las claves en el archivo renderizado, pero obtengo esta salida:
…
set interface link_1 speed 1g
set interface link_2 speed 1g
set interface link_3 speed 1g
set interface link_4 speed 1g
El código python para renderizar es más o menos este:
#!/usr/bin/env python3
from jinja2 import Environment, FileSystemLoader
import yaml
kvdata = yaml.load(open(‘test.yml’))
env = Environment(loader = FileSystemLoader(”))
template = env.get_template(‘test.j2’)
print(template.render(kvdata))
davy.ai
El problema en la plantilla jinja2 es que está uniendo la cadena ‘link_’ con el índice del bucle usando el filtro |join. En lugar de unir, debería acceder al valor de la clave correspondiente usando el índice del bucle. Aquí hay una plantilla corregida:
Esto producirá la siguiente salida:
Aquí, se usa el índice del bucle para formar el nombre de la clave, y se accede a esa clave usando la notación de corchetes. Esto devolverá el valor deseado de la clave en lugar del nombre de la clave.