summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteffen Zieger <me@saz.sh>2014-03-14 14:43:42 +0100
committerSteffen Zieger <me@saz.sh>2014-03-14 14:43:42 +0100
commit2d98676439e77a137618f1fb3a7580290554cd3c (patch)
treefad5afdb8757cf63827b0193be3e6a36ba1fc5a0
parent4d51a536a444ae629743a2c25673b0db1d1d1ef9 (diff)
parent7a61281c4e2e10214483776f42daddb04993f3aa (diff)
Merge pull request #60 from Aethylred/template_strings
Template strings and other things
-rw-r--r--README.md20
-rw-r--r--manifests/client.pp2
-rw-r--r--manifests/snippet.pp2
-rw-r--r--spec/defines/rsyslog_snippet_spec.rb140
-rw-r--r--templates/client.conf.erb50
-rw-r--r--tests/log_templates.pp9
6 files changed, 131 insertions, 92 deletions
diff --git a/README.md b/README.md
index ea2c834..79997bf 100644
--- a/README.md
+++ b/README.md
@@ -39,6 +39,23 @@ for read from file
```
+#### Defining custom logging templates
+
+The `log_templates` parameter can be used to set up custom logging templates, which can be used for local and/or remote logging. More detail on template formats can be found in the [rsyslog documentation](http://www.rsyslog.com/doc/rsyslog_conf_templates.html).
+
+The following examples sets up a custom logging template as per [RFC3164fmt](https://www.ietf.org/rfc/rfc3164.txt):
+
+```puppet
+class{'rsyslog::client':
+ log_templates => [
+ {
+ name => 'RFC3164fmt',
+ template => '<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%',
+ },
+ ]
+}
+```
+
#### Logging to multiple remote servers
The `remote_servers` parameter can be used to set up logging to multiple remote servers which are supplied as a list of key value pairs for each remote. There is an example configuration provided in `./test/multiple_hosts.pp`
@@ -128,7 +145,6 @@ The following lists all the class parameters this module accepts.
server_dir STRING Folder where logs will be stored on the server. Defaults to '/srv/log/'
custom_config STRING Specify your own template to use for server config. Defaults to undef. Example usage: custom_config => 'rsyslog/my_config.erb'
high_precision_timestamps true,false Whether or not to use high precision timestamps.
- actionfiletemplate STRING If set this defines the `ActionFileDefaultTemplate` which sets the default logging format for remote and local logging..
remote_servers HASH Provides a hash of multiple remote logging servers. Check documentation.
RSYSLOG::CLIENT CLASS PARAMETERS VALUES DESCRIPTION
@@ -140,6 +156,8 @@ The following lists all the class parameters this module accepts.
custom_config STRING Specify your own template to use for client config. Defaults to undef. Example usage: custom_config => 'rsyslog/my_config.erb
server STRING Rsyslog server to log to. Will be used in the client configuration file.
preserve_fqdn true,false Whether or not to preserve the fully qualified domain name when logging.
+ log_templates HASH Provides a has defining custom logging templates using the `$template` configuration parameter.
+ actionfiletemplate STRING If set this defines the `ActionFileDefaultTemplate` which sets the default logging format for remote and local logging.
RSYSLOG::DATABASE CLASS PARAMETERS VALUES DESCRIPTION
-------------------------------------------------------------------
diff --git a/manifests/client.pp b/manifests/client.pp
index dfc28e0..3cccff3 100644
--- a/manifests/client.pp
+++ b/manifests/client.pp
@@ -16,6 +16,7 @@
# [*port*]
# [*remote_servers*]
# [*ssl_ca*]
+# [*log_templates*]
# [*actionfiletemplate*]
#
# === Variables
@@ -36,6 +37,7 @@ class rsyslog::client (
$port = '514',
$remote_servers = false,
$ssl_ca = undef,
+ $log_templates = false,
$actionfiletemplate = false,
$preserve_fqdn = false
) inherits rsyslog {
diff --git a/manifests/snippet.pp b/manifests/snippet.pp
index bb0468e..9edf179 100644
--- a/manifests/snippet.pp
+++ b/manifests/snippet.pp
@@ -26,7 +26,7 @@ define rsyslog::snippet(
ensure => $ensure,
owner => $rsyslog::run_user,
group => $rsyslog::run_group,
- content => "# file managed by puppet\n${content}\n",
+ content => "# This file is managed by Puppet, changes may be overwritten\n${content}\n",
require => Class['rsyslog::config'],
notify => Class['rsyslog::service'],
}
diff --git a/spec/defines/rsyslog_snippet_spec.rb b/spec/defines/rsyslog_snippet_spec.rb
index a8f2575..4f3d5b8 100644
--- a/spec/defines/rsyslog_snippet_spec.rb
+++ b/spec/defines/rsyslog_snippet_spec.rb
@@ -1,70 +1,70 @@
-require 'spec_helper'
-
-describe 'rsyslog::snippet', :type => :define do
- context "osfamily = RedHat" do
- let :facts do
- {
- :osfamily => 'RedHat',
- :operatingsystemrelease => 6.0,
- }
- end
-
- let (:params) {
- {
- 'content' => 'Random Content',
- }
- }
-
- context "default usage (osfamily = RedHat)" do
- let(:title) { 'rsyslog-snippet-basic' }
-
- it 'should compile' do
- should contain_file('/etc/rsyslog.d/rsyslog-snippet-basic.conf').with_content("# file managed by puppet\nRandom Content\n")
- end
- end
- end
-
- context "osfamily = Debian" do
- let :facts do
- {
- :osfamily => 'Debian',
- }
- end
-
- let (:params) {
- {
- 'content' => 'Random Content',
- }
- }
-
- context "default usage (osfamily = Debian)" do
- let(:title) { 'rsyslog-snippet-basic' }
-
- it 'should compile' do
- should contain_file('/etc/rsyslog.d/rsyslog-snippet-basic.conf').with_content("# file managed by puppet\nRandom Content\n")
- end
- end
- end
-
- context "osfamily = FreeBSD" do
- let :facts do
- {
- :osfamily => 'freebsd',
- }
- end
-
- let (:params) {
- {
- 'content' => 'Random Content',
- }
- }
-
- context "default usage (osfamily = Debian)" do
- let(:title) { 'rsyslog-snippet-basic' }
-
- it 'should compile' do
- should contain_file('/etc/syslog.d/rsyslog-snippet-basic.conf').with_content("# file managed by puppet\nRandom Content\n")
- end
- end
- end
-end
+require 'spec_helper'
+
+describe 'rsyslog::snippet', :type => :define do
+ context "osfamily = RedHat" do
+ let :facts do
+ {
+ :osfamily => 'RedHat',
+ :operatingsystemrelease => 6.0,
+ }
+ end
+
+ let (:params) {
+ {
+ 'content' => 'Random Content',
+ }
+ }
+
+ context "default usage (osfamily = RedHat)" do
+ let(:title) { 'rsyslog-snippet-basic' }
+
+ it 'should compile' do
+ should contain_file('/etc/rsyslog.d/rsyslog-snippet-basic.conf').with_content("# This file is managed by Puppet, changes may be overwritten\nRandom Content\n")
+ end
+ end
+ end
+
+ context "osfamily = Debian" do
+ let :facts do
+ {
+ :osfamily => 'Debian',
+ }
+ end
+
+ let (:params) {
+ {
+ 'content' => 'Random Content',
+ }
+ }
+
+ context "default usage (osfamily = Debian)" do
+ let(:title) { 'rsyslog-snippet-basic' }
+
+ it 'should compile' do
+ should contain_file('/etc/rsyslog.d/rsyslog-snippet-basic.conf').with_content("# This file is managed by Puppet, changes may be overwritten\nRandom Content\n")
+ end
+ end
+ end
+
+ context "osfamily = FreeBSD" do
+ let :facts do
+ {
+ :osfamily => 'freebsd',
+ }
+ end
+
+ let (:params) {
+ {
+ 'content' => 'Random Content',
+ }
+ }
+
+ context "default usage (osfamily = Debian)" do
+ let(:title) { 'rsyslog-snippet-basic' }
+
+ it 'should compile' do
+ should contain_file('/etc/syslog.d/rsyslog-snippet-basic.conf').with_content("# This file is managed by Puppet, changes may be overwritten\nRandom Content\n")
+ end
+ end
+ end
+end
diff --git a/templates/client.conf.erb b/templates/client.conf.erb
index 42dbccc..3ed4f32 100644
--- a/templates/client.conf.erb
+++ b/templates/client.conf.erb
@@ -1,4 +1,3 @@
-# file is managed by puppet
# An "In-Memory Queue" is created for remote logging.
$WorkDirectory <%= scope.lookupvar('rsyslog::spool_dir') -%> # where to place spool files
@@ -7,14 +6,40 @@ $ActionQueueMaxDiskSpace <%= scope.lookupvar('rsyslog::client::spool_size') -%>
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList # run asynchronously
$ActionResumeRetryCount -1 # infinety retries if host is down
+<% if scope.lookupvar('rsyslog::client::log_templates') and ! scope.lookupvar('rsyslog::client::log_templates').empty?-%>
+
+# Define custom logging templates
+<% scope.lookupvar('rsyslog::client::log_templates').flatten.compact.each do |log_template| -%>
+$template <%= log_template['name'] %>,"<%= log_template['template'] %>"
+<% end -%>
+<% end -%>
<% if scope.lookupvar('rsyslog::client::actionfiletemplate') -%>
-# Using specified format for default logging fromat:
+
+# Using specified format for default logging format:
$ActionFileDefaultTemplate <%= scope.lookupvar('rsyslog::client::actionfiletemplate') %>
<% else -%>
-#Using default format for default logging fromat:
+
+#Using default format for default logging format:
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
<% end -%>
-<% if scope.lookupvar('rsyslog::client::remote_servers') and ! scope.lookupvar('rsyslog::client::remote_servers').empty? -%>
+<% if scope.lookupvar('rsyslog::client::ssl') -%>
+
+# Setup SSL connection.
+# CA/Cert
+$DefaultNetStreamDriverCAFile <%= scope.lookupvar('rsyslog::client::ssl_ca') %>
+
+# Connection settings.
+$DefaultNetstreamDriver gtls
+$ActionSendStreamDriverMode 1
+$ActionSendStreamDriverAuthMode anon
+<% end -%>
+<% if scope.lookupvar('rsyslog::client::preserve_fqdn') -%>
+
+# Tell rsyslog to use FQDN and not short server names
+$PreserveFQDN on
+<% end -%>
+<% if scope.lookupvar('rsyslog::client::remote_servers') -%>
+
<% scope.lookupvar('rsyslog::client::remote_servers').flatten.compact.each do |server| -%>
<% if server['pattern'] and server['pattern'] != ''-%>
<% pattern = server['pattern'] -%>
@@ -49,6 +74,7 @@ $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
<%= pattern %> <%= protocol %><%= host %>:<%= port %><%= format %>
<% end -%>
<% elsif scope.lookupvar('rsyslog::client::log_remote') -%>
+
# Log to remote syslog server using <%= scope.lookupvar('rsyslog::client::remote_type') %>
<% if scope.lookupvar('rsyslog::client::remote_type') == 'tcp' -%>
*.* @@<%= scope.lookupvar('rsyslog::client::server') -%>:<%= scope.lookupvar('rsyslog::client::port') -%>;RSYSLOG_ForwardFormat
@@ -57,16 +83,6 @@ $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
<% end -%>
<% end -%>
<% if scope.lookupvar('rsyslog::client::log_auth_local') or scope.lookupvar('rsyslog::client::log_local') -%>
-<% if scope.lookupvar('rsyslog::client::ssl') -%>
-# Setup SSL connection.
-# CA/Cert
-$DefaultNetStreamDriverCAFile <%= scope.lookupvar('rsyslog::client::ssl_ca') %>
-
-# Connection settings.
-$DefaultNetstreamDriver gtls
-$ActionSendStreamDriverMode 1
-$ActionSendStreamDriverAuthMode anon
-<% end -%>
# Logging locally.
@@ -78,12 +94,6 @@ auth,authpriv.* /var/log/auth.log
auth,authpriv.* /var/log/secure
<% end -%>
<% end -%>
-
-<% if scope.lookupvar('rsyslog::client::preserve_fqdn') -%>
-# Tell rsyslog to use FQDN and not short server names
-$PreserveFQDN on
-<% end -%>
-
<% if scope.lookupvar('rsyslog::client::log_local') -%>
<% if scope.lookupvar('rsyslog::log_style') == 'debian' -%>
# First some standard log files. Log by facility.
diff --git a/tests/log_templates.pp b/tests/log_templates.pp
new file mode 100644
index 0000000..79f1e8f
--- /dev/null
+++ b/tests/log_templates.pp
@@ -0,0 +1,9 @@
+class{'rsyslog::client':
+ log_templates => [
+ {
+ name => 'RFC3164fmt',
+ template => '<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%msg%',
+ },
+ ],
+ actionfiletemplate => 'RFC3164fmt',
+} \ No newline at end of file