Merge pull request #2 from ginsys/feature-1/path-testing

Feature 1/path testing
This commit is contained in:
Bryan Black 2020-09-17 15:04:59 -07:00 committed by GitHub
commit 357d69cd57
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 306 additions and 0 deletions

View file

@ -1,2 +1,9 @@
# ansible-logrotate-plusplus # ansible-logrotate-plusplus
Ansible role which installs and configures logrotate 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
View 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
View 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

View 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
View 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' }}"

View 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

View 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
View 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
View 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
View 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
View 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