Как настроить logrotate для rsyslog, используя Ansible - PullRequest
0 голосов
/ 13 февраля 2020

У меня проблема с настройкой logrotate с помощью Ansible.

Все нормально, когда у меня logrotate_scripts с logrotates, где в файле logrotate есть только одна конфигурация, например, nginx или php.

Проблема заключается в том, что я хочу настроить rsyslog logrotate, где более одной конфигурации (отдельно для syslog и для остальных журналов, таких как deamon и т. Д.).

Это задача:

- name: Setup logrotate.d scripts
  template:
    src: logrotate.d.j2
    dest: "{{ logrotate_conf_dir }}{{ item.name }}"
  with_items: "{{ logrotate_scripts }}"
  when: logrotate_scripts is defined

Вот шаблон ( logrotate.d.j2 ), который работает только для одной конфигурации в файле (nginx case).

{{ item.path }} {
  {% if item.options is defined -%}
  {% for option in item.options -%}
  {{ option }}
  {% endfor -%}
  {% endif %}
  {%- if item.scripts is defined -%}
  {%- for name, script in item.scripts.iteritems() -%}
  {{ name }}
    {{ script }}
  endscript
  {% endfor -%}
  {% endif -%}
}

Это конфигурация:

logrotate_scripts:
  - name: nginx
    path: /var/log/nginx/*.log
    option:
      - daily
      - missingok
      - maxsize 100M
      - rotate 14
      - compress
      - delaycompress
  - name: rsyslog
    path: /var/log/syslog
    option:
      - weekly
      - missingok
      - maxsize 10M
      - rotate 35
    paths: /var/log/deamon.log
    options:
      - weekly
      - missingok
      - maxsize 100M
      - rotate 14

Так я перестраиваю шаблон, чтобы добавить две конфигурации в один файл, как в rsyslog.

{% for path in item.path -%}
{{ path }}
{% endfor %}

{
  {% if item.options is defined -%}
  {% for option in item.options -%}
  {{ option }}
  {% endfor -%}
  {% endif %}
  {%- if item.scripts is defined -%}
  {%- for name, script in item.scripts.iteritems() -%}
  {{ name }}
    {{ script }}
  endscript
  {% endfor -%}
  {% endif -%}
}

{% for paths in item.paths -%}
{{ paths }}
{% endfor %}

{
  {% if item.option is defined -%}
  {% for options in item.option -%}
  {{ options }}
  {% endfor -%}
  {% endif %}
  {%- if item.scripts is defined -%}
  {%- for name, script in item.scripts.iteritems() -%}
  {{ name }}
    {{ script }}
  endscript
  {% endfor -%}
  {% endif -%}
}

Проблема в том, работает для rsyslog, но не срабатывает , когда есть только одна конфигурация, как в nginx.

Любая идея, как мне перестроить шаблон или, может быть, я должен сделать это в совершенно другой способ?

...