Bucle for en archivo de inventario de jinja2.
Estoy buscando una forma de hacer un bucle dentro de un archivo de inventario (ni siquiera sé si es posible…?)
Me explico:
Tengo un archivo var en group_vars/All que contiene una lista de direcciones IP, así:
doca_dns_server:
– x.x.x.1
– x.x.x.2
En un segundo archivo de inventario, almacenado en la sección host_vars, quiero hacer un bucle en esta variable para construir algunas reglas de firewall.
He intentado esto:
226 output ntp udp aceptado:
{% for srv in ip_address%}
– udp dport ntp ip daddr {{ srv }} ct state new accept
{% endfor %}
Pero esto no funciona, espero que sea un problema de sintaxis, pero no encuentro ningún ejemplo.
PLAY [all] *************************************************************************************************************************************************************************************************
ERROR! No pudimos leerlo como JSON ni YAML, estos son los errores que obtuvimos de cada uno:
JSON: Se esperaba un valor: línea 1 columna 1 (carácter 0)
Error de sintaxis al cargar YAML.
se encontró un carácter que no puede iniciar ningún token
El error parece estar en ‘/home/mpileyre/ansible/inventories/hds/pprod/host_vars/tibrin2-ppd/firewall.yml’: línea 68, columna 2, pero puede estar en otro lugar del archivo dependiendo del problema exacto de sintaxis.
La línea problemática parece ser:
225 output dns tcp udp aceptado:
{% for ip in doca_dns_servers %}
^ aquí
Como pude usar algunas funciones de jinja2 (como reemplazar) en mis archivos var, me preguntaba si podría hacer un bucle 🙂 pero tal vez me equivoque…
El resultado esperado es:
226 output ntp udp aceptado:
– udp dport ntp ip daddr x.x.x.1 ct state new accept
– udp dport ntp ip daddr x.x.x.2 ct state new accept
davy.ai
Desafortunadamente, no se puede hacer un bucle dentro de un archivo de inventario ya que está destinado a contener datos de inventario como nombres de host, direcciones IP e información de grupos.
Sin embargo, se pueden utilizar plantillas de Jinja2 para generar archivos de configuración basados en la información de su archivo de inventario. En su caso, puede crear un archivo de plantilla
firewall.j2
que utilice la variabledoca_dns_server
para generar las reglas de firewall necesarias.Por ejemplo, puede crear un archivo de plantilla
firewall.j2
con el siguiente contenido:Luego, en su playbook, puede usar el módulo
template
para generar el archivo de configuración del firewall:Esto creará un archivo de configuración del firewall con el siguiente contenido:
Tenga en cuenta que la variable
doca_dns_server
contiene una lista, por lo que debe recorrerla para generar múltiples reglas de firewall. Además, asegúrese de que la sintaxis de su plantilla Jinja2 sea correcta, ya que cualquier error en la plantilla puede hacer que el playbook falle.