diff --git a/README.md b/README.md index f1b6e5f..b69a4c9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,9 @@ # ansible-logrotate-plusplus Ansible role which installs and configures logrotate +It can test if paths exist before writing a logrotate config to the server. +Load the roles default vars with custom paths and per path parameters, and run the playbook across a dynamic +infrastructure and only write logerotate rules to the appropriate system with the correct paths present. + +This project was based of https://github.com/arillso/ansible.logrotate 1.5.2 +(https://github.com/arillso/ansible.logrotate/commit/038649f7933c21ba9f1f2c8363bfb4d49aaf46f2) + diff --git a/defaults/main.yml b/defaults/main.yml index 239dd3b..6c2fea1 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -36,14 +36,50 @@ logrotate_btmp: # An example of multiple log rotate applications with available settings: # logrotate_applications: # - name: name-your-log-rotate-application -# definitions: -# - logs: -# - /var/log/apt/term.log -# - /var/log/apt/history.log -# options: -# - rotate 12 -# - monthly -# - missingok -# - notifempty -# - compress -logrotate_applications: [] +# logs: +# - /var/log/apt/term.log +# - /var/log/apt/history.log +# options: +# - rotate 12 +# - monthly +# - missingok +# - notifempty +# - compress +logrotate_applications: + - name: nextcloud-snap-apache-php_errors + logs: + - /var/snap/nextcloud/current/apache/logs/*.log + options: + - daily + - compress + - rotate 6 + - missingok + - copytruncate + - delaycompress + + - name: nextcloud-snap-apache-error_log" + logs: + - /var/snap/nextcloud/current/apache/logs/error_log + options: + - daily + - compress + - rotate 6 + - missingok + - copytruncate + - delaycompress + + - name: custom + logs: + - /var/log/custom/*_log + options: + - daily + - compress + - rotate 6 + + - name : dpkg + logs: + - /var/log/dpkg.log + options: + - daily + - compress + - rotate 6 diff --git a/tasks/create-logrotate-application-configuration-files.yml b/tasks/create-logrotate-application-configuration-files.yml new file mode 100644 index 0000000..10f2ff9 --- /dev/null +++ b/tasks/create-logrotate-application-configuration-files.yml @@ -0,0 +1,22 @@ +--- +- name: 'check if there exist log files for {{ item.name }}' + shell: + cmd: "ls -l {{ item.logs|join(' ') }}" + changed_when: false + register: _available_logs + check_mode: false + failed_when: false + tags: + - configuration + +- name: 'create logrotate configuration file for {{ item.name }}' + become: true + template: + src: 'etc/logrotate.d/application.j2' + dest: '/etc/logrotate.d/{{ item.name }}' + owner: root + group: root + mode: 0644 + when: _available_logs.stdout_lines|length() > 0 + tags: + - configuration diff --git a/tasks/main.yml b/tasks/main.yml index 6c7621e..a7abfc6 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -44,15 +44,10 @@ - configuration - name: 'create logrotate application configuration files' - become: true - template: - src: 'etc/logrotate.d/application.j2' - dest: '/etc/logrotate.d/{{ item.name }}' - owner: root - group: root - mode: 0644 - with_items: - - '{{ logrotate_applications }}' + include_tasks: create-logrotate-application-configuration-files.yml + loop: '{{ logrotate_applications }}' + loop_control: + label: "{{ item.name }}" tags: - configuration diff --git a/templates/etc/logrotate.d/application.j2 b/templates/etc/logrotate.d/application.j2 index 73ab028..8bafa6e 100644 --- a/templates/etc/logrotate.d/application.j2 +++ b/templates/etc/logrotate.d/application.j2 @@ -1,37 +1,35 @@ {{ ansible_managed | comment }} -{% for definition in item.definitions %} -{{ definition.logs | join(" ") }} { -{% for option in definition.options %} +{{ item.logs | join(" ") }} { +{% for option in item.options %} {{ option }} {% endfor %} -{% if definition.postrotate|default([]) %} +{% if item.postrotate|default([]) %} postrotate -{% for line in definition.postrotate %} +{% for line in item.postrotate %} {{ line }} {% endfor %} endscript {% endif %} -{% if definition.preremove|default([]) %} +{% if item.preremove|default([]) %} preremove -{% for line in definition.preremove %} +{% for line in item.preremove %} {{ line }} {% endfor %} endscript {% endif %} -{% if definition.lastaction|default([]) %} +{% if item.lastaction|default([]) %} lastaction -{% for line in definition.lastaction %} +{% for line in item.lastaction %} {{ line }} {% endfor %} endscript {% endif %} -{% if definition.firstaction|default([]) %} +{% if item.firstaction|default([]) %} firstaction -{% for line in definition.firstaction %} +{% for line in item.firstaction %} {{ line }} {% endfor %} endscript {% endif %} } -{% endfor %}