From 98e6f6a90910bdb40b9cb1d1f94ea1f0b629f4ad Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 14:23:00 +0100 Subject: [PATCH] Add support for default logrotate options --- logrotate/config.sls | 2 +- logrotate/defaults.yaml | 5 ++ logrotate/files/Arch/logrotate.conf | 38 -------------- logrotate/files/Debian/logrotate.conf | 38 -------------- logrotate/files/RedHat/logrotate.conf | 35 ------------- logrotate/files/Suse/logrotate.conf | 26 --------- logrotate/map.jinja | 38 ++++++++++++-- logrotate/templates/logrotate.conf.tmpl | 70 +++++++++++++++++++++++++ 8 files changed, 109 insertions(+), 143 deletions(-) delete mode 100644 logrotate/files/Arch/logrotate.conf delete mode 100644 logrotate/files/Debian/logrotate.conf delete mode 100644 logrotate/files/RedHat/logrotate.conf delete mode 100644 logrotate/files/Suse/logrotate.conf create mode 100644 logrotate/templates/logrotate.conf.tmpl diff --git a/logrotate/config.sls b/logrotate/config.sls index f882de8..b24165f 100644 --- a/logrotate/config.sls +++ b/logrotate/config.sls @@ -6,7 +6,7 @@ include: logrotate-config: file.managed: - name: {{ logrotate.conf_file }} - - source: salt://logrotate/files/{{ salt['grains.get']('os_family') }}/logrotate.conf + - source: salt://logrotate/templates/logrotate.conf.tmpl - template: jinja - user: {{ salt['pillar.get']('logrotate:config:user', logrotate.user) }} - group: {{ salt['pillar.get']('logrotate:config:group', logrotate.group) }} diff --git a/logrotate/defaults.yaml b/logrotate/defaults.yaml index 7e2f163..dc2456d 100644 --- a/logrotate/defaults.yaml +++ b/logrotate/defaults.yaml @@ -8,4 +8,9 @@ logrotate: user: root group: root service: cron + login_records_jobs: True + default_config: + weekly: True + rotate: 4 + create: True diff --git a/logrotate/files/Arch/logrotate.conf b/logrotate/files/Arch/logrotate.conf deleted file mode 100644 index 974f0f4..0000000 --- a/logrotate/files/Arch/logrotate.conf +++ /dev/null @@ -1,38 +0,0 @@ -# see "man logrotate" for details -# rotate log files weekly -weekly - -# keep 4 weeks worth of backlogs -rotate 4 - -# restrict maximum size of log files -#size 20M - -# create new (empty) log files after rotating old ones -create - -# uncomment this if you want your log files compressed -#compress - -# Logs are moved into directory for rotation -# olddir /var/log/archive - -# Ignore pacman saved files -tabooext + .pacorig .pacnew .pacsave - -# Arch packages drop log rotation information into this directory -include /etc/logrotate.d - -/var/log/wtmp { - monthly - create 0664 root utmp - minsize 1M - rotate 1 -} - -/var/log/btmp { - missingok - monthly - create 0600 root utmp - rotate 1 -} diff --git a/logrotate/files/Debian/logrotate.conf b/logrotate/files/Debian/logrotate.conf deleted file mode 100644 index 349f82a..0000000 --- a/logrotate/files/Debian/logrotate.conf +++ /dev/null @@ -1,38 +0,0 @@ -# see "man logrotate" for details -# rotate log files weekly -weekly - -{% if grains['os'] == "Ubuntu" %} -# use the syslog group by default, since this is the owning group -# of /var/log/syslog. -su root syslog -{% endif %} - -# keep 4 weeks worth of backlogs -rotate 4 - -# create new (empty) log files after rotating old ones -create - -# uncomment this if you want your log files compressed -#compress - -# packages drop log rotation information into this directory -include /etc/logrotate.d - -# no packages own wtmp, or btmp -- we'll rotate them here -/var/log/wtmp { - missingok - monthly - create 0664 root utmp - rotate 1 -} - -/var/log/btmp { - missingok - monthly - create 0660 root utmp - rotate 1 -} - -# system-specific logs may be configured here diff --git a/logrotate/files/RedHat/logrotate.conf b/logrotate/files/RedHat/logrotate.conf deleted file mode 100644 index 56e9103..0000000 --- a/logrotate/files/RedHat/logrotate.conf +++ /dev/null @@ -1,35 +0,0 @@ -# see "man logrotate" for details -# rotate log files weekly -weekly - -# keep 4 weeks worth of backlogs -rotate 4 - -# create new (empty) log files after rotating old ones -create - -# use date as a suffix of the rotated file -dateext - -# uncomment this if you want your log files compressed -#compress - -# RPM packages drop log rotation information into this directory -include /etc/logrotate.d - -# no packages own wtmp and btmp -- we'll rotate them here -/var/log/wtmp { - monthly - create 0664 root utmp - minsize 1M - rotate 1 -} - -/var/log/btmp { - missingok - monthly - create 0600 root utmp - rotate 1 -} - -# system-specific logs may be also be configured here. diff --git a/logrotate/files/Suse/logrotate.conf b/logrotate/files/Suse/logrotate.conf deleted file mode 100644 index 0981de0..0000000 --- a/logrotate/files/Suse/logrotate.conf +++ /dev/null @@ -1,26 +0,0 @@ -# see "man logrotate" for details -# rotate log files weekly -weekly - -# keep 4 weeks worth of backlogs -rotate 4 - -# create new (empty) log files after rotating old ones -create - -# use date as a suffix of the rotated file -dateext - -# uncomment this if you want your log files compressed -#compress - -# comment these to switch compression to use gzip or another -# compression scheme -compresscmd /usr/bin/xz -uncompresscmd /usr/bin/xzdec - -# former versions had to have the compressext set accordingly -#compressext .xz - -# RPM packages drop log rotation information into this directory -include /etc/logrotate.d diff --git a/logrotate/map.jinja b/logrotate/map.jinja index fb0d288..b3f6897 100644 --- a/logrotate/map.jinja +++ b/logrotate/map.jinja @@ -1,18 +1,46 @@ # -*- coding: utf-8 -*- # vim: ft=jinja +{% import_yaml 'logrotate/defaults.yaml' as default_settings %} + {% set os_family_map = salt['grains.filter_by']({ - 'RedHat': { - 'service': 'crond', - }, 'Arch': { 'service': 'logrotate.timer', + 'default_config': { + 'tabooext': '+ .pacorig .pacnew .pacsave', + }, + }, + 'RedHat': { + 'service': 'crond', + 'default_config': { + 'dateext': True, + }, + }, + 'Suse': { + 'login_records_jobs': False, + 'default_config': { + 'dateext': True, + 'compresscmd': '/usr/bin/xz', + 'uncompresscmd': '/usr/bin/xzdec', + }, }, }, grain="os_family", - merge=salt['pillar.get']('logrotate:lookup')) + merge=salt['pillar.get']('logrotate:lookup')) or {} +%} -{% do default_settings.logrotate.update(os_family_map) %} +{% set os_map = salt['grains.filter_by']({ + 'Ubuntu': { + 'default_config': { + 'su': 'root syslog' + }, + }, + }, + grain="os", + merge=os_family_map) or {} +%} + +{% do default_settings.logrotate.update(os_map) %} {% set logrotate = salt['pillar.get']( 'logrotate', diff --git a/logrotate/templates/logrotate.conf.tmpl b/logrotate/templates/logrotate.conf.tmpl new file mode 100644 index 0000000..2cd769d --- /dev/null +++ b/logrotate/templates/logrotate.conf.tmpl @@ -0,0 +1,70 @@ +{%- from "logrotate/map.jinja" import logrotate with context -%} +{%- set config = pillar.get('logrotate:default_config', logrotate.default_config) -%} + +{%- set processed_parameters = [] -%} + +{%- macro set_parameter(parameter, default=None) -%} +{%- set value = config.get(parameter, default) -%} +{%- if value is not none %} + {%- if value is sameas true -%} +{{ parameter }} + {%- elif value is sameas false -%} +no{{ parameter }} + {%- elif value is string or value is number -%} +{{ parameter }} {{ value }} + {%- else -%} +{{ value }} + {%- endif %} +{%- do processed_parameters.append(parameter) %} +{%- endif %} +{%- endmacro -%} + +# Managed by saltstack +# +# See "man logrotate" for details. + +# log files rotation period +{% for period in ['hourly', 'daily', 'weekly', 'yearly'] -%} +{{ set_parameter(period) }} +{%- endfor %} + +# keep x periods worth of backlogs +{{ set_parameter('rotate', 4) }} + +# create new (empty) log files after rotating old ones +{{ set_parameter('create', True) }} + +# use date as a suffix of the rotated file +{{ set_parameter('dateext', False) }} + +# change this if you want your log files compressed +{{ set_parameter('compress', False) }} + +{#- Accept arbitrary parameters #} +{%- for parameter in config %} + {%- if parameter not in processed_parameters %} +{{ set_parameter(parameter) }} + {%- endif %} +{%- endfor %} + +# packages drop log rotation information into this directory +include {{ logrotate.include_dir }} + +{% if logrotate.login_records_jobs -%} +# no packages own wtmp and btmp -- we'll rotate them here +/var/log/wtmp { + monthly + create 0664 root utmp + minsize 1M + rotate 1 +} + +/var/log/btmp { + missingok + monthly + create 0600 root utmp + rotate 1 +} +{%- endif %} + +# system-specific logs may be configured here