feat(hourly): Add configuration to enable hourly jobstags/v0.13.0
@@ -467,14 +467,14 @@ suites: | |||
- name: default | |||
provisioner: | |||
dependencies: | |||
- name: states | |||
path: ./test/salt | |||
- name: cron | |||
repo: git | |||
source: https://github.com/saltstack-formulas/cron-formula.git | |||
state_top: | |||
base: | |||
'G@os_family:Suse or G@os_family:Debian': | |||
- states.cron | |||
'*': | |||
- logrotate._mapdata | |||
- cron | |||
- logrotate | |||
pillars: | |||
top.sls: |
@@ -3,22 +3,61 @@ | |||
include: | |||
- logrotate | |||
{% set ns = namespace(hourly=False) %} | |||
{% for key, value in logrotate.jobs.items() %} | |||
{% set contents = value.get('contents', False) %} | |||
{% if 'hourly' in (contents or value.config) %} | |||
{% set ns.hourly = True %} | |||
{% break %} | |||
{% endif %} | |||
{% endfor %} | |||
logrotate-config: | |||
file.managed: | |||
- name: {{ logrotate.conf_file }} | |||
- 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) }} | |||
- mode: {{ salt['pillar.get']('logrotate:config:mode', '644') }} | |||
- user: {{ salt['config.get']('logrotate:config:user', logrotate.user) }} | |||
- group: {{ salt['config.get']('logrotate:config:group', logrotate.group) }} | |||
- mode: {{ salt['config.get']('logrotate:config:mode', '0644') }} | |||
- context: | |||
logrotate: {{ logrotate|tojson }} | |||
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 | |||
- user: {{ salt['config.get']('logrotate:config:user', logrotate.user) }} | |||
- group: {{ salt['config.get']('logrotate:config:group', logrotate.group) }} | |||
- mode: '0755' | |||
- makedirs: True | |||
{%- if ns.hourly %} | |||
logrotate-hourly-config: | |||
file.managed: | |||
- name: {{ logrotate.hourly_conf_file }} | |||
- user: {{ salt['config.get']('logrotate:config:user', logrotate.user) }} | |||
- group: {{ salt['config.get']('logrotate:config:group', logrotate.group) }} | |||
- mode: {{ salt['config.get']('logrotate:config:mode', '0644') }} | |||
- contents: | |||
- include {{ logrotate.hourly_include_dir }} | |||
logrotate-hourly-directory: | |||
file.directory: | |||
- name: {{ logrotate.hourly_include_dir }} | |||
- user: {{ logrotate.user }} | |||
- group: {{ logrotate.group }} | |||
- mode: '0755' | |||
- makedirs: True | |||
logrotate-hourly-cron: | |||
file.managed: | |||
- name: "/etc/cron.hourly/logrotate" | |||
- source: salt://logrotate/templates/logrotate.hourly.tmpl | |||
- template: jinja | |||
- user: {{ salt['config.get']('logrotate:config:user', logrotate.user) }} | |||
- group: {{ salt['config.get']('logrotate:config:group', logrotate.group) }} | |||
- mode: '0775' | |||
- context: | |||
logrotate: {{ logrotate|tojson }} | |||
{%- endif %} |
@@ -2,9 +2,13 @@ | |||
# vim: ft=yaml | |||
--- | |||
logrotate: | |||
bin: /usr/sbin/logrotate | |||
status_dir: /var/lib/logrotate | |||
pkg: logrotate | |||
conf_file: '/etc/logrotate.conf' | |||
include_dir: '/etc/logrotate.d' | |||
hourly_conf_file: '/etc/logrotate.hourly.conf' | |||
hourly_include_dir: '/etc/logrotate.hourly.d' | |||
user: root | |||
group: root | |||
service: cron |
@@ -7,9 +7,16 @@ include: | |||
{% for key, value in jobs.items() %} | |||
{% set contents = value.get('contents', False) %} | |||
logrotate-{{ key }}: | |||
file.managed: | |||
{% if 'hourly' in (contents or value.config) %} | |||
- name: {{ logrotate.hourly_include_dir }}/{{ key.split("/")[-1] }} | |||
- require: | |||
- file: {{ logrotate.hourly_include_dir }} | |||
{% else %} | |||
- name: {{ logrotate.include_dir }}/{{ key.split("/")[-1] }} | |||
{% endif %} | |||
- 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') }} | |||
@@ -29,5 +36,5 @@ logrotate-{{ key }}: | |||
data: {{ value | json }} | |||
{% endif %} | |||
{% endif %} | |||
{%- endfor -%} | |||
{% endfor %} |
@@ -26,6 +26,10 @@ Gentoo: | |||
tabooext: + .keep | |||
dateext: true | |||
FreeBSD: | |||
bin: /usr/local/sbin/logrotate | |||
status_dir: /var/run | |||
conf_file: /usr/local/etc/logrotate.conf | |||
hourly_conf_file: /usr/local/etc/logrotate.hourly.conf | |||
include_dir: /usr/local/etc/logrotate.d | |||
hourly_include_dir: /usr/local/etc/logrotate.hourly.d | |||
group: wheel |
@@ -0,0 +1,9 @@ | |||
#!/bin/sh | |||
{{ logrotate.bin }} -s {{ logrotate.status_dir }}/logrotate.hourly.status {{ logrotate.hourly_conf_file }} | |||
EXITVALUE=$? | |||
if [ $EXITVALUE != 0 ]; then | |||
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" | |||
fi | |||
exit 0 |
@@ -48,6 +48,22 @@ logrotate: | |||
- postrotate | |||
- /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true | |||
- endscript | |||
nginx_high_traf: | |||
path: | |||
- /var/log/nginx_high_traf/*.log | |||
config: | |||
- hourly | |||
- missingok | |||
- rotate {{ 30 * 24 }} # keep 1 month's worth of hourly logs | |||
- compress | |||
- notifempty | |||
- dateext | |||
- dateformat .%Y-%m-%d-%H00 | |||
- olddir /var/log/nginx_high_traf/archive | |||
- sharedscripts | |||
- postrotate | |||
- 'kill -USR1 $(cat /var/run/nginx_high_traf.pid)' | |||
- endscript | |||
nginx: | |||
contents: | | |||
/var/log/nginx/*.log{ |
@@ -43,12 +43,10 @@ end | |||
control 'logrotate.service.running' do | |||
title 'The service should be installed, enabled and running' | |||
only_if('Disabled on Arch Linux') do | |||
!%w[arch].include?(platform[:name]) | |||
end | |||
service = | |||
case platform[:family] | |||
case system.platform[:family] | |||
when 'arch' | |||
'cronie' | |||
when 'redhat', 'fedora' | |||
'crond' | |||
else |
@@ -69,3 +69,22 @@ describe file('/etc/logrotate.d/nginx') do | |||
its('content') { should include 'postrotate' } | |||
its('content') { should include ' invoke-rc.d nginx rotate >/dev/null 2>&1' } | |||
end | |||
describe file('/etc/logrotate.hourly.d/nginx_high_traf') do | |||
it { should be_file } | |||
it { should be_owned_by 'root' } | |||
it { should be_grouped_into 'root' } | |||
its('mode') { should cmp '0644' } | |||
its('content') { should include '/var/log/nginx_high_traf/*.log' } | |||
its('content') { should include 'hourly' } | |||
its('content') { should include 'missingok' } | |||
its('content') { should include 'rotate 720' } | |||
its('content') { should include 'compress' } | |||
its('content') { should include 'notifempty' } | |||
its('content') { should include 'dateext' } | |||
its('content') { should include 'dateformat .%Y-%m-%d-%H00' } | |||
its('content') { should include 'olddir /var/log/nginx_high_traf/archive' } | |||
its('content') { should include 'sharedscripts' } | |||
its('content') { should include 'postrotate' } | |||
its('content') { should include 'kill -USR1 $(cat /var/run/nginx_high_traf.pid)' } | |||
end |
@@ -1,4 +0,0 @@ | |||
cron_package: | |||
pkg.installed: | |||
- name: cron |