From 1c6661a485384e6204f3037687ec13557261b686 Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 12:10:13 +0100 Subject: [PATCH 1/8] Move common settings to defaults.yaml --- logrotate/defaults.yaml | 11 ++++++++ logrotate/map.jinja | 62 ++++++++++++++--------------------------- 2 files changed, 32 insertions(+), 41 deletions(-) create mode 100644 logrotate/defaults.yaml diff --git a/logrotate/defaults.yaml b/logrotate/defaults.yaml new file mode 100644 index 0000000..7e2f163 --- /dev/null +++ b/logrotate/defaults.yaml @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml + +logrotate: + pkg: logrotate + conf_file: '/etc/logrotate.conf' + include_dir: '/etc/logrotate.d' + user: root + group: root + service: cron + diff --git a/logrotate/map.jinja b/logrotate/map.jinja index 898c06b..fb0d288 100644 --- a/logrotate/map.jinja +++ b/logrotate/map.jinja @@ -1,42 +1,22 @@ -{% set logrotate = salt['grains.filter_by']({ - 'RedHat': { - 'pkg' : 'logrotate', - 'service' : 'crond', - 'conf_file' : '/etc/logrotate.conf', - 'include_dir' : '/etc/logrotate.d', - 'user' : 'root', - 'group' : 'root', +# -*- coding: utf-8 -*- +# vim: ft=jinja + +{% set os_family_map = salt['grains.filter_by']({ + 'RedHat': { + 'service': 'crond', + }, + 'Arch': { + 'service': 'logrotate.timer', + }, }, - 'ScientificLinux': { - 'pkg' : 'logrotate', - 'service' : 'crond', - 'conf_file' : '/etc/logrotate.conf', - 'include_dir' : '/etc/logrotate.d', - 'user' : 'root', - 'group' : 'root', - }, - 'Arch': { - 'pkg' : 'logrotate', - 'service' : 'logrotate.timer', - 'conf_file' : '/etc/logrotate.conf', - 'include_dir' : '/etc/logrotate.d', - 'user' : 'root', - 'group' : 'root', - }, - 'Debian': { - 'pkg' : 'logrotate', - 'service' : 'cron', - 'conf_file' : '/etc/logrotate.conf', - 'include_dir' : '/etc/logrotate.d', - 'user' : 'root', - 'group' : 'root', - }, - 'Suse': { - 'pkg' : 'logrotate', - 'service' : 'cron', - 'conf_file' : '/etc/logrotate.conf', - 'include_dir' : '/etc/logrotate.d', - 'user' : 'root', - 'group' : 'root', - }, - }, merge=salt['pillar.get']('logrotate:lookup')) %} + grain="os_family", + merge=salt['pillar.get']('logrotate:lookup')) + +{% do default_settings.logrotate.update(os_family_map) %} + +{% set logrotate = salt['pillar.get']( + 'logrotate', + default=default_settings.logrotate, + merge=True + ) +%} From f0cf823177f2c68ed62c84e8ead4f8f2e9fe62a4 Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 12:50:32 +0100 Subject: [PATCH 2/8] Split init.sls into config, install and service Following the template-formula example. --- README.rst | 8 ++++++++ logrotate/config.sls | 10 ++++++++-- logrotate/init.sls | 24 ++++++------------------ logrotate/install.sls | 8 ++++++++ logrotate/jobs.sls | 2 +- logrotate/service.sls | 17 +++++++++++++++++ 6 files changed, 48 insertions(+), 21 deletions(-) create mode 100644 logrotate/install.sls create mode 100644 logrotate/service.sls diff --git a/README.rst b/README.rst index cf81661..4388045 100644 --- a/README.rst +++ b/README.rst @@ -25,9 +25,17 @@ Installs the ``logrotate`` package and service/timer/cron. Manages logrotate config and include dir. +``logrotate.install`` +--------------------- + +Installs the logrotate package and its dependencies. + ``logrotate.jobs`` ------------------ Create custom job for logrotate. +``logrotate.service`` +--------------------- +Manages the startup and running state of the logrotate service. diff --git a/logrotate/config.sls b/logrotate/config.sls index 68b1503..367666e 100644 --- a/logrotate/config.sls +++ b/logrotate/config.sls @@ -11,6 +11,12 @@ logrotate_config: - user: {{ salt['pillar.get']('logrotate:config:user', logrotate.user) }} - group: {{ salt['pillar.get']('logrotate:config:group', logrotate.group) }} - mode: {{ salt['pillar.get']('logrotate:config:mode', '644') }} - - require: - - pkg: logrotate + +logrotate_directory: + file.directory: + - name: {{ logrotate.include_dir }} + - user: {{ salt['pillar.get']('logrotate:config:user', logrotate.user) }} + - group: {{ salt['pillar.get']('logrotate:config:group', logrotate.group) }} + - mode: 755 + - makedirs: True diff --git a/logrotate/init.sls b/logrotate/init.sls index 73f8037..8e907f6 100644 --- a/logrotate/init.sls +++ b/logrotate/init.sls @@ -1,19 +1,7 @@ -{% from "logrotate/map.jinja" import logrotate with context %} - -logrotate: - pkg.installed: - - name: {{ logrotate.pkg|json }} - service.running: - - name: {{ logrotate.service }} - - enable: True - -logrotate_directory: - file.directory: - - name: {{ logrotate.include_dir }} - - user: {{ salt['pillar.get']('logrotate:config:user', logrotate.user) }} - - group: {{ salt['pillar.get']('logrotate:config:group', logrotate.group) }} - - mode: 755 - - makedirs: True - - require: - - pkg: logrotate +# -*- coding: utf-8 -*- +# vim: ft=sls +include: + - logrotate.install + - logrotate.config + - logrotate.service diff --git a/logrotate/install.sls b/logrotate/install.sls new file mode 100644 index 0000000..ffcc8c9 --- /dev/null +++ b/logrotate/install.sls @@ -0,0 +1,8 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{% from "logrotate/map.jinja" import logrotate with context %} + +logrotate-pkg: + pkg.installed: + - name: {{ logrotate.pkg }} diff --git a/logrotate/jobs.sls b/logrotate/jobs.sls index b122916..2b050bf 100644 --- a/logrotate/jobs.sls +++ b/logrotate/jobs.sls @@ -15,7 +15,7 @@ logrotate_{{key}}: - group: {{ salt['pillar.get']('logrotate:config:group', logrotate.group) }} - mode: {{ salt['pillar.get']('logrotate:config:mode', '644') }} - require: - - pkg: logrotate + - pkg: logrotate-pkg - context: {% if value is mapping %} path: {{ value.get('path', []) }} diff --git a/logrotate/service.sls b/logrotate/service.sls new file mode 100644 index 0000000..ae8a788 --- /dev/null +++ b/logrotate/service.sls @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# vim: ft=sls + +{% from "logrotate/map.jinja" import logrotate with context %} + +include: + - logrotate.config + - logrotate.install + +logrotate: + service.running: + - name: {{ logrotate.service }} + - enable: True + - require: + - pkg: logrotate-pkg + - file: logrotate_config + - file: logrotate_directory From 0846ae41e30a90d5c38b1551959c67fdf69cf892 Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 12:52:25 +0100 Subject: [PATCH 3/8] Rename state identifiers Just for cosmetics --- logrotate/config.sls | 4 ++-- logrotate/jobs.sls | 4 ++-- logrotate/service.sls | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/logrotate/config.sls b/logrotate/config.sls index 367666e..f882de8 100644 --- a/logrotate/config.sls +++ b/logrotate/config.sls @@ -3,7 +3,7 @@ include: - logrotate -logrotate_config: +logrotate-config: file.managed: - name: {{ logrotate.conf_file }} - source: salt://logrotate/files/{{ salt['grains.get']('os_family') }}/logrotate.conf @@ -12,7 +12,7 @@ logrotate_config: - group: {{ salt['pillar.get']('logrotate:config:group', logrotate.group) }} - mode: {{ salt['pillar.get']('logrotate:config:mode', '644') }} -logrotate_directory: +logrotate-directory: file.directory: - name: {{ logrotate.include_dir }} - user: {{ salt['pillar.get']('logrotate:config:user', logrotate.user) }} diff --git a/logrotate/jobs.sls b/logrotate/jobs.sls index 2b050bf..eb2b9ab 100644 --- a/logrotate/jobs.sls +++ b/logrotate/jobs.sls @@ -5,8 +5,8 @@ include: - logrotate -{% for key,value in jobs.items() %} -logrotate_{{key}}: +{% for key, value in jobs.items() %} +logrotate-{{ key }}: file.managed: - name: {{ logrotate.include_dir }}/{{ key.split("/")[-1] }} - source: salt://logrotate/templates/job.tmpl diff --git a/logrotate/service.sls b/logrotate/service.sls index ae8a788..1dbb774 100644 --- a/logrotate/service.sls +++ b/logrotate/service.sls @@ -13,5 +13,5 @@ logrotate: - enable: True - require: - pkg: logrotate-pkg - - file: logrotate_config - - file: logrotate_directory + - file: logrotate-config + - file: logrotate-directory From 98e6f6a90910bdb40b9cb1d1f94ea1f0b629f4ad Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 14:23:00 +0100 Subject: [PATCH 4/8] 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 From 3676ff62163f544a1a5dd904b348dbcf0982fb5e Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 14:34:35 +0100 Subject: [PATCH 5/8] Add sample default_config to pillar.example --- pillar.example | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/pillar.example b/pillar.example index 52b682e..7176c8b 100644 --- a/pillar.example +++ b/pillar.example @@ -3,6 +3,12 @@ logrotate: lookup: pkg: logrotate service: crond + default_config: + - weekly + - rotate: 52 + - create + - compress + - dateext jobs: /tmp/var/log/mysql/error: config: From 0ac29dd03fcf717d42becd398f922cf060b7c1b4 Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 17:03:08 +0100 Subject: [PATCH 6/8] Fix deep merge of settings --- logrotate/map.jinja | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/logrotate/map.jinja b/logrotate/map.jinja index b3f6897..791522d 100644 --- a/logrotate/map.jinja +++ b/logrotate/map.jinja @@ -40,11 +40,9 @@ merge=os_family_map) or {} %} -{% do default_settings.logrotate.update(os_map) %} - -{% set logrotate = salt['pillar.get']( - 'logrotate', - default=default_settings.logrotate, - merge=True +{% set logrotate = salt['grains.filter_by']( + default_settings, + merge=os_map, + base='logrotate', ) %} From 6c3292430d66e371408132b01b2067029ddaf838 Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Tue, 14 Feb 2017 17:45:52 +0100 Subject: [PATCH 7/8] Fix retrieving configuration from pillar --- logrotate/templates/logrotate.conf.tmpl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/logrotate/templates/logrotate.conf.tmpl b/logrotate/templates/logrotate.conf.tmpl index 2cd769d..49b183b 100644 --- a/logrotate/templates/logrotate.conf.tmpl +++ b/logrotate/templates/logrotate.conf.tmpl @@ -1,5 +1,5 @@ {%- from "logrotate/map.jinja" import logrotate with context -%} -{%- set config = pillar.get('logrotate:default_config', logrotate.default_config) -%} +{%- set config = salt['pillar.get']('logrotate:default_config', logrotate.default_config) -%} {%- set processed_parameters = [] -%} From bc4b450e381553fe46495ef8d529dbcbb8a10768 Mon Sep 17 00:00:00 2001 From: Gilles Dartiguelongue Date: Mon, 13 Mar 2017 11:40:09 +0100 Subject: [PATCH 8/8] Fix default_config example in pillar.example --- pillar.example | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pillar.example b/pillar.example index 7176c8b..a9c5e30 100644 --- a/pillar.example +++ b/pillar.example @@ -4,11 +4,11 @@ logrotate: pkg: logrotate service: crond default_config: - - weekly - - rotate: 52 - - create - - compress - - dateext + weekly: True + rotate: 52 + create: True + compress: True + dateext: True jobs: /tmp/var/log/mysql/error: config: