Logrotate для rsyslog в Ansible - PullRequest
       69

Logrotate для rsyslog в Ansible

0 голосов
/ 03 февраля 2020

Я пытаюсь изменить конфигурацию rsyslog logrotate, используя Ansible, но при запуске задачи:

- 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_scripts:
  - name: rsyslog
    path: 
        - "/var/log/syslog.log"
        - "/var/log/daemon.log"
        - "/var/log/kern.log"
        - "/var/log/mail.log"
        - "/var/log/user.log"
        - "/var/log/lpr.log"
        - "/var/log/auth.log"
        - "/var/log/cron.log"
        - "/var/log/debug"
        - "/var/log/messages"
    options:
      - daily
      - missingok
      - maxsize 100M
      - rotate 14
      - compress
      - compresscmd /bin/bzip2
      - compressoptions -4
      - compressext .bz2      
      - notifempty

Я получаю этот неправильный формат:

['/var/log/syslog.log', '/var/log/daemon.log', '/var/log/kern.log', '/var/log/mail.log', '/var/log/user.log', '/var/log/lpr.log', '/var/log/auth.log', '/var/log/cron.log', '/var/log/debug', '/var/log/messages'] {
  daily
  missingok
  maxsize 100M
  rotate 14
  compress
  compresscmd /bin/bzip2
  compressoptions -4
  compressext .bz2
  notifempty
  }

Это шаблон, который я использовал для всех своих сценариев logrotate (nginx, php и т. д.), но он не работает должным образом для rsyslog.

{{ 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 -%}
}

Как правильно передать список путей, чтобы получить этот эффект?

/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
  daily
  missingok
  maxsize 100M
  rotate 14
  compress
  compresscmd /bin/bzip2
  compressoptions -4
  compressext .bz2
  notifempty
  }

1 Ответ

1 голос
/ 04 февраля 2020

Вы не предоставили доступ к файлу своего шаблона, но, возможно, вам нужно что-то вроде этого:

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

, чтобы получить список путей.

Если вы не редактируете несколько файлов, кажется неправильным использовать with_items как это. Вероятно, лучше использовать lineinfile для настройки стандартной конфигурации logrotate с вашими настройками.

...