Restart salt-minion on config change

Change-Id: Ie1f1397817b47f299107e4f44dfb4c5ffe1c010c
diff --git a/salt/minion/service.sls b/salt/minion/service.sls
index 0cb5215..ca40863 100644
--- a/salt/minion/service.sls
+++ b/salt/minion/service.sls
@@ -43,6 +43,10 @@
     - name: /etc/salt/minion.d/_{{ name }}.conf
     - contents: |
         {{ conf|yaml(False)|indent(8) }}
+    {%- if not grains.get('noservices', False) %}
+    - watch_in:
+      - cmd: salt_minion_service_restart
+    {%- endif %}
     - require:
       - {{ minion.install_state }}
 
@@ -52,8 +56,8 @@
     - watch:
       - file: salt_minion_config_{{ service_name }}_{{ name }}
         {%- if not grains.get('noservices', False) %}
-    - watch_in:
-      - service: salt_minion_service
+    - require_in:
+      - cmd: salt_minion_service_restart
         {%- endif %}
       {%- endfor %}
     {%- endif %}
@@ -64,6 +68,15 @@
   service.running:
   - name: {{ minion.service }}
   - enable: true
+
+{#- Restart salt-minion if needed but after all states are executed #}
+salt_minion_service_restart:
+  cmd.wait:
+    - name: 'while true; do salt-call saltutil.running|grep fun: && continue; salt-call --local service.restart {{ minion.service }}; done'
+    - shell: /bin/bash
+    - bg: true
+    - require:
+      - service: salt_minion_service
 {%- endif %}
 
 salt_minion_sync_all: