Feature 1/path testing #2
|
@ -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)
|
||||
|
||||
|
|
85
defaults/main.yml
Normal file
85
defaults/main.yml
Normal file
|
@ -0,0 +1,85 @@
|
|||
---
|
||||
# List of global options. If this is empty the default options of the
|
||||
# distribution are used.
|
||||
logrotate_options: []
|
||||
|
||||
# Path to the include files
|
||||
logrotate_include_dir: /etc/logrotate.d
|
||||
|
||||
# package name to install logrotate.
|
||||
logrotate_package: logrotate
|
||||
|
||||
# Enable hourly rotation with cron.
|
||||
logrotate_use_hourly_rotation: false
|
||||
|
||||
# logroate for wtmp
|
||||
logrotate_wtmp:
|
||||
logs:
|
||||
- /var/log/wtmp
|
||||
options:
|
||||
- missingok
|
||||
- monthly
|
||||
- create 0664 root utmp
|
||||
- rotate 1
|
||||
|
||||
# logroate for btmp
|
||||
logrotate_btmp:
|
||||
logs:
|
||||
- /var/log/btmp
|
||||
options:
|
||||
- missingok
|
||||
- monthly
|
||||
- create 0660 root utmp
|
||||
- rotate 1
|
||||
|
||||
# More log files can be added that will log rotate.
|
||||
# An example of multiple log rotate applications with available settings:
|
||||
# logrotate_applications:
|
||||
# - name: name-your-log-rotate-application
|
||||
# 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
|
32
meta/main.yml
Normal file
32
meta/main.yml
Normal file
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
galaxy_info:
|
||||
author: 'stationgroup'
|
||||
description: |
|
||||
Ansible role for installings and configuring lograte on Linux, deploying a list of defaults only if the
|
||||
logfiles are present on the system.
|
||||
license: MIT
|
||||
min_ansible_version: 2.8
|
||||
platforms:
|
||||
- name: EL
|
||||
versions:
|
||||
- 6
|
||||
- 7
|
||||
- name: Fedora
|
||||
versions:
|
||||
- 29
|
||||
- name: Ubuntu
|
||||
versions:
|
||||
- bionic
|
||||
- cosmic
|
||||
- disco
|
||||
- name: Debian
|
||||
versions:
|
||||
- jessie
|
||||
- stretch
|
||||
- buster
|
||||
|
||||
galaxy_tags:
|
||||
- system
|
||||
- logrotate
|
||||
- log
|
||||
- rotate
|
22
tasks/create-logrotate-application-configuration-files.yml
Normal file
22
tasks/create-logrotate-application-configuration-files.yml
Normal file
|
@ -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
|
58
tasks/main.yml
Normal file
58
tasks/main.yml
Normal file
|
@ -0,0 +1,58 @@
|
|||
---
|
||||
- name: add OS specific variables
|
||||
include_vars: '{{ loop_vars }}'
|
||||
with_first_found:
|
||||
- files:
|
||||
- '{{ distribution }}-{{ distribution_version }}.yml'
|
||||
- '{{ distribution }}-{{ distribution_major_version }}.yml'
|
||||
- '{{ distribution }}.yml'
|
||||
- '{{ ansible_os_family }}.yml'
|
||||
- '{{ ansible_system }}.yml'
|
||||
- 'defaults.yml'
|
||||
paths:
|
||||
- 'vars'
|
||||
loop_control:
|
||||
loop_var: loop_vars
|
||||
vars:
|
||||
distribution: '{{ ansible_distribution }}'
|
||||
distribution_version: '{{ ansible_distribution_version }}'
|
||||
distribution_major_version: '{{ ansible_distribution_major_version }}'
|
||||
tags:
|
||||
- configuration
|
||||
- packages
|
||||
|
||||
- name: 'install logrotate packages'
|
||||
become: true
|
||||
package:
|
||||
name: '{{ logrotate_package }}'
|
||||
state: present
|
||||
register: register_install_package
|
||||
until: register_install_package is succeeded
|
||||
retries: 3
|
||||
tags:
|
||||
- packages
|
||||
|
||||
- name: 'create logrotate configuration file'
|
||||
become: true
|
||||
template:
|
||||
src: 'etc/logrotate.conf.j2'
|
||||
dest: '/etc/logrotate.conf'
|
||||
owner: root
|
||||
group: root
|
||||
mode: 0644
|
||||
tags:
|
||||
- configuration
|
||||
|
||||
- name: 'create logrotate application configuration files'
|
||||
include_tasks: create-logrotate-application-configuration-files.yml
|
||||
loop: '{{ logrotate_applications }}'
|
||||
loop_control:
|
||||
label: "{{ item.name }}"
|
||||
tags:
|
||||
- configuration
|
||||
|
||||
- name: Symlink for hourly rotation
|
||||
file:
|
||||
path: "/etc/cron.hourly/logrotate"
|
||||
src: "/etc/cron.daily/logrotate"
|
||||
state: "{{ 'link' if logrotate_use_hourly_rotation else 'absent' }}"
|
30
templates/etc/logrotate.conf.j2
Normal file
30
templates/etc/logrotate.conf.j2
Normal file
|
@ -0,0 +1,30 @@
|
|||
{{ ansible_managed | comment }}
|
||||
|
||||
# see "man logrotate" for details
|
||||
{% if logrotate_options | length > 0 %}
|
||||
{% for option in logrotate_options %}
|
||||
{{ option }}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
{% for option in logrotate_distribution_options | default([]) %}
|
||||
{{ option }}
|
||||
{% endfor %}
|
||||
{% endif %}
|
||||
|
||||
# packages drop log rotation information into this directory
|
||||
include {{ logrotate_include_dir }}
|
||||
|
||||
# no packages own wtmp, or btmp -- we'll rotate them here
|
||||
{{ logrotate_wtmp.logs | join(" ") }} {
|
||||
{% for option in logrotate_wtmp.options %}
|
||||
{{ option }}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
{{ logrotate_btmp.logs | join(" ") }} {
|
||||
{% for option in logrotate_btmp.options %}
|
||||
{{ option }}
|
||||
{% endfor %}
|
||||
}
|
||||
|
||||
# system-specific logs may be configured here
|
35
templates/etc/logrotate.d/application.j2
Normal file
35
templates/etc/logrotate.d/application.j2
Normal file
|
@ -0,0 +1,35 @@
|
|||
{{ ansible_managed | comment }}
|
||||
|
||||
{{ item.logs | join(" ") }} {
|
||||
{% for option in item.options %}
|
||||
{{ option }}
|
||||
{% endfor %}
|
||||
{% if item.postrotate|default([]) %}
|
||||
postrotate
|
||||
{% for line in item.postrotate %}
|
||||
{{ line }}
|
||||
{% endfor %}
|
||||
endscript
|
||||
{% endif %}
|
||||
{% if item.preremove|default([]) %}
|
||||
preremove
|
||||
{% for line in item.preremove %}
|
||||
{{ line }}
|
||||
{% endfor %}
|
||||
endscript
|
||||
{% endif %}
|
||||
{% if item.lastaction|default([]) %}
|
||||
lastaction
|
||||
{% for line in item.lastaction %}
|
||||
{{ line }}
|
||||
{% endfor %}
|
||||
endscript
|
||||
{% endif %}
|
||||
{% if item.firstaction|default([]) %}
|
||||
firstaction
|
||||
{% for line in item.firstaction %}
|
||||
{{ line }}
|
||||
{% endfor %}
|
||||
endscript
|
||||
{% endif %}
|
||||
}
|
9
vars/CentOS.yml
Normal file
9
vars/CentOS.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# vars file for arillso.logrotate
|
||||
|
||||
# List of global options for the different systems.
|
||||
logrotate_distribution_options:
|
||||
- weekly
|
||||
- rotate 4
|
||||
- create
|
||||
- dateext
|
9
vars/Debian.yml
Normal file
9
vars/Debian.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# vars file for arillso.logrotate
|
||||
|
||||
# List of global options for the different systems.
|
||||
logrotate_distribution_options:
|
||||
- weekly
|
||||
- rotate 4
|
||||
- create
|
||||
- dateext
|
9
vars/RedHat.yml
Normal file
9
vars/RedHat.yml
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
# vars file for arillso.logrotate
|
||||
|
||||
# List of global options for the different systems.
|
||||
logrotate_distribution_options:
|
||||
- weekly
|
||||
- rotate 4
|
||||
- create
|
||||
- dateext
|
10
vars/Ubuntu.yml
Normal file
10
vars/Ubuntu.yml
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
# vars file for arillso.logrotate
|
||||
|
||||
# List of global options for the different systems.
|
||||
logrotate_distribution_options:
|
||||
- weekly
|
||||
- rotate 4
|
||||
- create
|
||||
- dateext
|
||||
- su root syslog
|
Loading…
Reference in a new issue