I have the following data structure:

client_groups:
  apache:
    - '10.5.10.111'
    - '10.2.10.112'
    - '10.5.10.11'

  mail:
    - '1.2.3.4'
    - '5.6.7.8'

  database:
    - '10.9.8.7'

client_destinations:
  apache:
    - var: '$syslogtag'
      contains: 'apache-access:'
      destination: '/logs/apache-servers/access.log'

    - var: '$syslogtag'
      contains: 'apache-error:'
      destination: '/logs/apache-servers/error.log'

  mail:
    - var: 'local5'
      contains: 'dovecot'
      destination: '/logs/mail/mail.log'

  database:
    - var:
      contains:
      destination: '/logs/db/activity.log'

In my jinja2 template-file, I have the below:

{% for k in client_groups %}
{% if client_destinations[k][0].var is defined %}
{% for i in range(0,client_destinations[k]|length) %}
if $fromhost-ip ==  {{ client_groups[k] | to_json }} and {{ 
client_destinations[k][i].var }} == '{{ client_destinations[k][i].contains 
}}' then {{ client_destinations[k][i].destination }}
{% endfor %}
{% endif %}
{% else %}
if $fromhost-ip ==  {{ client_groups[k] | to_json }} then {{ 
client_destinations[k].destination }}
{% endfor %}

The desired output is:

*if $fromhost-ip ==  ["10.5.10.111", "10.2.10.112", "10.5.10.11"] and 
$syslogtag == 'apache-access:' then /logs/apache-servers/access.log*
*if $fromhost-ip ==  ["10.5.10.111", "10.2.10.112", "10.5.10.11"] and 
$syslogtag == 'apache-error:' then /logs/apache-servers/error.log*
*if $fromhost-ip ==  ["1.2.3.4", "5.6.7.8"] and local5 == 'dovecot' then 
/logs/mail/mail.log*
*if $fromhost-ip ==  ["10.9.8.7"] == then /logs/db/activity.log*

But, I get the below output:

*if $fromhost-ip ==  ["10.5.10.111", "10.2.10.112", "10.5.10.11"] and 
$syslogtag == 'apache-access:' then /logs/apache-servers/access.log*
*if $fromhost-ip ==  ["10.5.10.111", "10.2.10.112", "10.5.10.11"] and 
$syslogtag == 'apache-error:' then /logs/apache-servers/error.log*
*if $fromhost-ip ==  ["1.2.3.4", "5.6.7.8"] and local5 == 'dovecot' then 
/logs/mail/mail.log*
*if $fromhost-ip ==  ["10.9.8.7"] and  == '' then /logs/db/activity.log*

This means, the statement after {% else %} - if $fromhost-ip ==  {{ 
client_groups[k] | to_json }} then {{ client_destinations[k].destination }} 
- is getting included in the `for` loop ({% for i in 
range(0,client_destinations[k]|length) %}); {% else %} is not being 
honored. 

What should be changed? 

Thanks in advance.

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/ad497104-434c-40ef-80a4-e07dad06acef%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to