Ansible:遍历字典

时间:2019-02-03 07:13:41

标签: ansible jinja2

我很难弄清楚如何使用for遍历字典来为rsyslog配置构建模板文件(Jinja2)。方案是我有一个集中的rsyslog服务器,该服务器接受来自各种rsyslog客户端的日志。

我以这种方式构建了一个默认的dicts文件:

rsyslog_client_groups:
  caprica: [ '"10.5.10.111"' , '"10.5.10.112"', '"10.5.10.11"', '"10.5.10.12"', '"10.5.12.21"' ]
   apache: [ '"10.5.13.24"' , '"10.5.13.25"' , '"10.5.13.26"' ]


rsyslog_client_destinations:
 apache:
   - var: '$syslogtag'
     contains: 'apache-access:'
     destination: '/logs/web/access.log'
   - var: '$syslogtag'
     contains: 'apache-error:'
     destination: '/logs/web/error.log'
 caprica:
    - destination: '/logs/mail/mail.log'

我需要编写一个模板文件(使用for),将字典rsyslog_client_groupsrsyslog_client_destinations组合在一起,以便最终在集中式日志服务器上以这种方式创建rsyslog配置文件:

if $fromhost-ip == [ "10.5.10.111", "10.5.10.112", "10.5.10.11", "10.5.10.12", "10.5.12.21" ] then /logs/mail/mail.log
& stop

if $fromhost-ip == [ "10.5.13.24", "10.5.13.25", "10.5.13.26" ] then {
  if $syslogtag contains 'apache-access:' then /logs/web/access.log
  & stop
  else if $syslogtag contains 'apache-error:' then /logs/web/error.log
  & stop
  else /logs/web/other.log
  & stop
}

UPDATE:

以下代码最接近我完成的任务:

{% for k, v in syslog_clients.iteritems() %}
if $fromhost-ip == {{ v }} then /logs/{{ k }}/{{ k }}.log
& stop
{% endfor %}

由于无法根据需要匹配的rsyslog_client_groups字符串({{1}中的)来设置contains中日志的正确目的地,因此无法达到最终结果})

0 个答案:

没有答案