Adding rsyslog remote server functionality (#6)
* adding server functionality
* Adding rsyslog remote server functionality
* removing hardcoded port values, updating README, adding simple tests
* Update common.sls
diff --git a/README.rst b/README.rst
index 7c014b0..6bff252 100644
--- a/README.rst
+++ b/README.rst
@@ -86,6 +86,34 @@
template: ""%syslogtag:1:32%%msg:::sp-if-no-1st-sp%%msg%\\n""
filter: "if $programname startswith 'your-app' then"
+Remote rsyslog server
+=====================
+
+It is possible to have rsyslog act as remote server, collecting, storing or forwarding logs.
+This functionality is provided via rsyslog input/output modules, rulesets and templates.
+
+.. code-block:: yaml
+
+ rsyslog:
+ server:
+ enabled: true
+ module:
+ imudp: {}
+ template:
+ RemoteFilePath:
+ parameter:
+ type: string
+ string: /var/log/%HOSTNAME%/%programname%.log
+ ruleset:
+ remote10514:
+ description: action(type="omfile" dynaFile="RemoteFilePath")
+ input:
+ imudp:
+ port: 10514
+ ruleset: remote10514
+
+
+
Support metadata
================
diff --git a/metadata/service/server/init.yml b/metadata/service/server/init.yml
new file mode 100644
index 0000000..94c1a50
--- /dev/null
+++ b/metadata/service/server/init.yml
@@ -0,0 +1,24 @@
+applications:
+- rsyslog
+classes:
+- service.rsyslog.support
+parameters:
+ _param:
+ rsyslog_port: 10514
+ rsyslog:
+ server:
+ enabled: true
+ module:
+ imtcp: {}
+ template:
+ RemoteStorage:
+ parameter:
+ type: string
+ string: /var/log/%HOSTNAME%/%programname%.log
+ ruleset:
+ RemoteLogs:
+ description: action(type="omfile" dynaFile="RemoteStorage")
+ input:
+ imtcp:
+ port: ${_param:rsyslog_port}
+ ruleset: RemoteLogs
diff --git a/rsyslog/client.sls b/rsyslog/client.sls
new file mode 100644
index 0000000..d84c826
--- /dev/null
+++ b/rsyslog/client.sls
@@ -0,0 +1,40 @@
+{%- from "rsyslog/map.jinja" import global with context %}
+
+include:
+- rsyslog.common
+
+{%- if global.enabled %}
+
+/etc/rsyslog.conf:
+ file.managed:
+ - source: salt://rsyslog/files/rsyslog.default.conf
+ - template: jinja
+ - mode: 0640
+ - require:
+ - pkg: rsyslog_packages
+ - watch_in:
+ - service: rsyslog_service
+
+
+/etc/rsyslog.d/50-default.conf:
+ file.absent:
+ - require:
+ - pkg: rsyslog_packages
+ - watch_in:
+ - service: rsyslog_service
+
+{% if global.manage_file_perms is defined and global.manage_file_perms == true %}
+{% for output,type in global.output.file.iteritems() %}
+{{ output }}:
+ file.managed:
+ - mode: "{{ type['createmode'] }}"
+ - owner: {{ type['owner'] }}
+ - group: {{ type['group'] }}
+ - watch:
+ - file: /etc/rsyslog.conf
+ - watch_in:
+ - service: rsyslog_service
+{% endfor %}
+{% endif %}
+
+{%- endif %}
diff --git a/rsyslog/common.sls b/rsyslog/common.sls
index bd94f01..a146c35 100644
--- a/rsyslog/common.sls
+++ b/rsyslog/common.sls
@@ -1,43 +1,10 @@
{%- from "rsyslog/map.jinja" import global with context %}
-{%- if global.enabled %}
-
rsyslog_packages:
pkg.latest:
- names: {{ global.pkgs }}
-/etc/rsyslog.conf:
- file.managed:
- - source: salt://rsyslog/files/rsyslog.default.conf
- - template: jinja
- - mode: 0640
- - require:
- - pkg: rsyslog_packages
-
-/etc/rsyslog.d/50-default.conf:
- file.absent:
- - require:
- - pkg: rsyslog_packages
-
rsyslog_service:
service.running:
- enable: true
- name: rsyslog
- - watch:
- - file: /etc/rsyslog.conf
-
-{% if global.manage_file_perms is defined and global.manage_file_perms == true %}
-{% for output,type in global.output.file.iteritems() %}
-{{ output }}:
- file.managed:
- - mode: "{{ type['createmode'] }}"
- - owner: {{ type['owner'] }}
- - group: {{ type['group'] }}
- - watch:
- - file: /etc/rsyslog.conf
- - watch_in:
- - service: rsyslog_service
-{% endfor %}
-{% endif %}
-
-{%- endif %}
diff --git a/rsyslog/files/10-remote.conf b/rsyslog/files/10-remote.conf
new file mode 100644
index 0000000..6c844c2
--- /dev/null
+++ b/rsyslog/files/10-remote.conf
@@ -0,0 +1,26 @@
+{%- from "rsyslog/map.jinja" import server with context -%}
+
+##### Modules Import #####
+
+{%- for mod,parameter in server.get('module', {}).iteritems() %}
+module(load="{{ mod }}"{%- for name,value in parameter.iteritems() %} {{name}}="{{value}}"{%- endfor -%})
+{%- endfor %}
+
+
+##### Template Descriptions #####
+{%- for name,template in server.get('template', {}).iteritems() %}
+template(name="{{ name }}" {%- for name,value in template.parameter.iteritems() %} {{name}}="{{value}}"{%- endfor -%})
+{%- if template.description is defined -%}{ {{ template.description }} } {%- endif -%}
+{%- endfor %}
+
+##### Ruleset Descriptions #####
+{%- for name,ruleset in server.get('ruleset', {}).iteritems() %}
+ruleset(name="{{ name }}"){
+{{ ruleset.description }}
+}
+{%- endfor %}
+
+##### Input Descriptions #####
+{%- for type,parameter in server.get('input', {}).iteritems() %}
+input(type="{{ type }}"{%- for name,value in parameter.iteritems() %} {{name}}="{{value}}"{%- endfor -%})
+{%- endfor %}
diff --git a/rsyslog/init.sls b/rsyslog/init.sls
index a155153..3f58072 100644
--- a/rsyslog/init.sls
+++ b/rsyslog/init.sls
@@ -1,9 +1,10 @@
{%- if pillar.rsyslog is defined %}
include:
{%- if pillar.rsyslog.server is defined %}
-- rsyslog.common
+- rsyslog.server
{%- endif %}
{%- if pillar.rsyslog.client is defined %}
-- rsyslog.common
+- rsyslog.client
{%- endif %}
{%- endif %}
+
diff --git a/rsyslog/map.jinja b/rsyslog/map.jinja
index 7078ebc..cdcce0a 100644
--- a/rsyslog/map.jinja
+++ b/rsyslog/map.jinja
@@ -152,3 +152,4 @@
enabled: true
{%- endload %}
{%- set global = salt['grains.filter_by'](base_defaults, merge=salt['pillar.get']('rsyslog:client')) %}
+{%- set server = salt['pillar.get']('rsyslog:server', {}) %}
diff --git a/rsyslog/server.sls b/rsyslog/server.sls
new file mode 100644
index 0000000..584fe0d
--- /dev/null
+++ b/rsyslog/server.sls
@@ -0,0 +1,13 @@
+{%- from "rsyslog/map.jinja" import server with context %}
+
+include:
+- rsyslog.common
+
+/etc/rsyslog.d/10-remote.conf:
+ file.managed:
+ - source: salt://rsyslog/files/10-remote.conf
+ - template: jinja
+ - mode: 0640
+ - watch_in:
+ - service: rsyslog_service
+
diff --git a/tests/pillar/server.sls b/tests/pillar/server.sls
new file mode 100644
index 0000000..fd838ff
--- /dev/null
+++ b/tests/pillar/server.sls
@@ -0,0 +1,17 @@
+ rsyslog:
+ server:
+ enabled: true
+ module:
+ imudp: {}
+ template:
+ RemoteFilePath:
+ parameter:
+ type: string
+ string: /var/log/%HOSTNAME%/%programname%.log
+ ruleset:
+ remote10514:
+ description: action(type="omfile" dynaFile="RemoteFilePath")
+ input:
+ imudp:
+ port: 10514
+ ruleset: remote10514