Refactor salt.minion

Issues:
* cmd.wait doesn't work correctly with bg=True
* cmd.wait will be deprecated in next releases [1]
* watch/watch_in work differently than onchanges/onchanges_in as some
* module override mod_watch()

This patch does:
* Replaces cmd.wait to cmd.run with onchanges.
* On any config file changes salt_minion_service_restart will be
  triggered so salt master will get state immediately because of bg=True
* salt_minion_service is used only for service enablement

[1] https://docs.saltstack.com/en/latest/ref/states/all/salt.states.cmd.html

Change-Id: I7b87b3614708b861e1767566426c7a67c337ba01
Signed-off-by: Sergii Golovatiuk <sgolovatiuk@mirantis.com>
diff --git a/salt/minion/service.sls b/salt/minion/service.sls
index cbcec0f..7951b2f 100644
--- a/salt/minion/service.sls
+++ b/salt/minion/service.sls
@@ -26,8 +26,6 @@
   - template: jinja
   - require:
     - {{ minion.install_state }}
-  - watch_in:
-    - service: salt_minion_service
 
 {%- for service_name, service in pillar.items() %}
     {%- set support_fragment_file = service_name+'/meta/salt.yml' %}
@@ -41,17 +39,15 @@
     - name: /etc/salt/minion.d/_{{ name }}.conf
     - contents: |
         {{ conf|yaml(False)|indent(8) }}
-    - watch_in:
-      - cmd: salt_minion_service_restart
     - require:
       - {{ minion.install_state }}
 
 salt_minion_config_{{ service_name }}_{{ name }}_validity_check:
-  cmd.wait:
+  cmd.run:
     - name: python -c "import yaml; stream = file('/etc/salt/minion.d/_{{ name }}.conf', 'r'); yaml.load(stream); stream.close()"
-    - watch:
+    - onchanges:
       - file: salt_minion_config_{{ service_name }}_{{ name }}
-    - require_in:
+    - onchanges_in:
       - cmd: salt_minion_service_restart
       {%- endfor %}
     {%- endif %}
@@ -59,18 +55,21 @@
 
 salt_minion_service:
   service.running:
-  - name: {{ minion.service }}
-  - enable: true
-  {%- if grains.get('noservices') %}
-  - onlyif: /bin/false
-  {%- endif %}
+    - name: {{ minion.service }}
+    - enable: true
+    {%- if grains.get('noservices') %}
+    - onlyif: /bin/false
+    {%- endif %}
 
 {#- Restart salt-minion if needed but after all states are executed #}
 salt_minion_service_restart:
-  cmd.wait:
+  cmd.run:
     - name: 'while true; do salt-call saltutil.running|grep fun: && continue; salt-call --local service.restart {{ minion.service }}; break; done'
     - shell: /bin/bash
     - bg: true
+    - order: last
+    - onchanges:
+      - file: /etc/salt/minion.d/minion.conf
     {%- if grains.get('noservices') %}
     - onlyif: /bin/false
     {%- endif %}
@@ -80,7 +79,7 @@
 salt_minion_sync_all:
   module.run:
     - name: 'saltutil.sync_all'
-    - watch:
+    - onchanges:
       - service: salt_minion_service
 
 {%- endif %}