Concatenación de cadenas en Jinja2 pero eliminando la última coma.
Estoy intentando escribir la configuración de VLAN del puerto de interruptor y se rompe debido a la última coma en la salida, estoy intentando obtener una salida de la siguiente manera
vlan trunk allowed 2600,2610,2620,2630,2640,2650
pero obtengo
vlan trunk allowed 2600,2610,2620,2630,2640,2650,
Mi código actualmente se ve así
{% for i in interfaces|default([]) %}
interface {{ i.port }}
no shutdown
mtu {{ mtu }}
description Link_to_{{ i.peer|lower }}
no routing
vlan trunk native 1
vlan trunk allowed {% for vc in vlans_core %}{% if vc.src == inventory_hostname and vc.dst == i.peer %}{{ vc.tag }},{% endif %}{% endfor %}{% for vc in vlans_core %}{% if vc.dst == inventory_hostname and vc.src == i.peer %}{{ vc.tag }},{% endif %}{% endfor %}
{% endfor %}
Intenté usar “join” pero solo produjo errores.
{{ vc.tag|join(", ") }}
También intenté usar “loop.last” pero esto tampoco funcionó.
{% if not loop.last %},{% endif %}
Cualquier ayuda sería apreciada.
davy.ai
Basado en tu código, parece que estás utilizando el lenguaje de plantillas jinja2 para generar la configuración del VLAN de los puertos del switch. Estás utilizando un bucle for para iterar a través de los VLAN y concatenarlos con un separador de coma. Sin embargo, estás obteniendo una coma extra al final de tu resultado.
Una forma de resolver este problema es utilizar el atributo “loop.last”, que devuelve verdadero si la iteración actual es la última. Puedes usarlo dentro del bucle for para agregar un separador de coma solo si no es la última iteración. Aquí tienes un ejemplo:
En este ejemplo, estamos utilizando la condición “not loop.last” dentro del bucle for para agregar un separador de coma solo si no es la última iteración. Esto debería eliminar la coma extra al final de tu resultado.
Otra alternativa es utilizar el filtro “join” para concatenar los VLAN y el separador de coma. Aquí tienes un ejemplo:
En este ejemplo, estamos utilizando el filtro “selectattr” para filtrar los VLAN en función de los atributos “src” y “dst”, y el filtro “map” para obtener solo el atributo “tag”. Finalmente, utilizamos el filtro “join” para concatenar los VLAN con el separador de coma.
Espero que esto te ayude. Déjame saber si tienes alguna otra pregunta.