Merge "Salt Engine for graph data processing"
diff --git a/README.rst b/README.rst
index 364e59a..90d62ef 100644
--- a/README.rst
+++ b/README.rst
@@ -145,6 +145,32 @@
               host: 127.0.0.1
               port: 9999
 
+
+Salt engine definition for saltgraph metadata collector
+
+.. code-block:: yaml
+
+    salt:
+      master:
+        engine:
+          graph_metadata:
+            engine: saltgraph
+            host: 127.0.0.1
+            port: 5432
+            user: salt
+            password: salt
+            database: salt
+
+Salt engine definition for sending events from docker events
+
+.. code-block:: yaml
+
+    salt:
+      master:
+        engine:
+          docker_events:
+            docker_url: unix://var/run/docker.sock
+
 Salt master peer setup for remote certificate signing
 
 .. code-block:: yaml
diff --git a/salt/files/_engine.conf b/salt/files/_engine.conf
new file mode 100644
index 0000000..ac0d328
--- /dev/null
+++ b/salt/files/_engine.conf
@@ -0,0 +1,6 @@
+{% from "salt/map.jinja" import master with context %}
+
+engines:
+{%- for engine_name, engine in master.engine.items() %}
+- {{ engine.get('engine', engine_name) }}: {{ engine|yaml }}
+{%- endfor %}
diff --git a/salt/master/env.sls b/salt/master/env.sls
index a61d249..4568e20 100644
--- a/salt/master/env.sls
+++ b/salt/master/env.sls
@@ -13,6 +13,7 @@
     - /srv/salt/env/{{ master.system.environment }}/_modules
     - /srv/salt/env/{{ master.system.environment }}/_states
     - /srv/salt/env/{{ master.system.environment }}/_grains
+    - /srv/salt/env/{{ master.system.environment }}/_engines
     - /srv/salt/env/{{ master.system.environment }}
   - makedirs: True
 
@@ -329,6 +330,17 @@
 
 {%- endfor %}
 
+{%- for engine_name, engine in formula.get('engine', {}).iteritems() %}
+
+salt_master_{{ environment_name }}_{{ engine_name }}_state:
+  file.symlink:
+  - name: /srv/salt/env/{{ environment_name }}/_engines/{{ engine_name }}
+  - target: /srv/salt/env/{{ environment_name }}/_formulas/{{ formula_name }}/_engines/{{ engine_name }}
+  - force: True
+  - makedirs: True
+
+{%- endfor %}
+
 {%- endif %}
 
 {%- endif %}
diff --git a/salt/master/service.sls b/salt/master/service.sls
index 85f7eb5..4c0c69b 100644
--- a/salt/master/service.sls
+++ b/salt/master/service.sls
@@ -42,6 +42,20 @@
 
 {%- endif %}
 
+{%- if master.engine is defined %}
+
+/etc/salt/master.d/_engine.conf:
+  file.managed:
+  - source: salt://salt/files/_engine.conf
+  - user: root
+  - template: jinja
+  - require:
+    - {{ master.install_state }}
+  - watch_in:
+    - service: salt_master_service
+
+{%- endif %}
+
 {%- if master.peer is defined %}
 
 /etc/salt/master.d/_peer.conf:
diff --git a/salt/master/test.sls b/salt/master/test.sls
new file mode 100644
index 0000000..3f4d376
--- /dev/null
+++ b/salt/master/test.sls
@@ -0,0 +1,18 @@
+{%- from "salt/map.jinja" import master with context %}
+{%- if master.enabled %}
+
+salt_master_test_packages:
+  pkg.latest:
+  - names: {{ master.test_pkgs }}
+
+/etc/salt/roster:
+  file.managed:
+  - source: salt://salt/files/roster
+  - user: root
+  - template: jinja
+  - require:
+    - {{ master.install_state }}
+  - watch_in:
+    - service: salt_master_service
+
+{%- endif %}
\ No newline at end of file