我正在尝试设置一个剧本来概括日志文件集中化和模板的设置。我想通过通用模板使用 ansible vars 编写 rsyslog.d/ 配置文件。
变量:
vars:
loglist:
- app_id: 'dsm'
rsyslog_conf_file: '13-dsm.conf'
ruleset: 'Centralize'
logfiles:
- name: /var/opt/ds_agent/diag/amEvent.log
regex: 'zzz'
- name: /XXXX/amEvent.log
regex: 'xxx'
- app_id: 'audit'
rsyslog_conf_file: '06-auditd.conf'
ruleset: 'Centralize'
logfiles:
- name: /var/log/audit/audit.log
regex: ''
任务 :
- name: Rsyslog logs config
template:
src: ./templates/rsyslog.d/99-generic-template.conf.j2
dest: /tmp/{{ item.0.rsyslog_conf_file }}
owner: root
group: root
mode: '0644'
with_subelements:
- "{{ loglist }}"
- logfiles
模板:
{% for val in loglist | subelements('logfiles') %}
input(type="imfile"
File="{{ val.1.name }}"
Tag="{{ val.0.app_id }}__"
{% if val.1.regex|length %}
startmsg.regex="{{ val.1.regex }}"
{% endif %}
Ruleset="{{ val.0.ruleset }}"
addMetadata="on")
{% endfor %}
我已经接近了,但是模板正在遍历整个列表,每次迭代所有日志文件名,而不是仅遍历当前项目。
结果是 2 个具有相同内容的文件:13-dsm.conf 和 06-auditd.conf:
input(type="imfile"
File="/var/opt/ds_agent/diag/amEvent.log"
Tag="dsm__"
startmsg.regex="a"
Ruleset="Centralizehorsprod"
addMetadata="on")
input(type="imfile"
File="/XXXX/amEvent.log"
Tag="dsm__"
startmsg.regex="X"
Ruleset="Centralizehorsprod"
addMetadata="on")
input(type="imfile"
File="/var/log/audit/audit.log"
Tag="audit__"
startmsg.regex="hqhq"
Ruleset="Centralizehorsprod"
addMetadata="on")
预期结果是2个文件及其各自的日志文件名。
06-审计.conf
input(type="imfile"
File="/var/log/audit/audit.log"
Tag="audit__"
startmsg.regex="hqhq"
Ruleset="Centralizehorsprod"
addMetadata="on")
和 13-dsm.conf
input(type="imfile"
File="/var/opt/ds_agent/diag/amEvent.log"
Tag="dsm__"
startmsg.regex="a"
Ruleset="Centralizehorsprod"
addMetadata="on")
input(type="imfile"
File="/XXXX/amEvent.log"
Tag="dsm__"
startmsg.regex="X"
Ruleset="Centralizehorsprod"
addMetadata="on")
谢谢
答案1
尝试这个
任务
- name: Rsyslog logs config
template:
src: ./templates/99-generic-template.conf.j2
dest: /tmp/{{ item.rsyslog_conf_file }}
with_items:
- "{{ loglist }}"
模板
{% for val in item.logfiles %}
input(type="imfile"
File="{{ val.name }}"
Tag="{{ item.app_id }}__"
{% if val.regex|length %}
startmsg.regex="{{ val.regex }}"
{% endif %}
Ruleset="{{ item.ruleset }}"
addMetadata="on")
{% endfor %}