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