Orchestrates and reactors

Change-Id: I9e48e113656dd9f1ce644e98650276b36e444009
diff --git a/README.rst b/README.rst
index edd6208..5f528fd 100644
--- a/README.rst
+++ b/README.rst
@@ -163,7 +163,7 @@
       master:
         state_output: changes
 
-Salt Reactor system sample
+Salt synchronise node pillar and modules after start
 
 .. code-block:: yaml
 
@@ -171,9 +171,25 @@
       master:
         reactor:
           salt/minion/*/start:
-          - salt://reactor/minion-started.sls
+          - salt://salt/reactor/node_start.sls
 
-Run any orchestration pipeline from custom event
+Trigger basic node install
+
+.. code-block:: yaml
+
+    salt:
+      master:
+        reactor:
+          salt/minion/install:
+          - salt://salt/reactor/node_install.sls
+
+Sample event to trigger the node installation
+
+.. code-block:: bash
+
+    salt-call event.send 'salt/minion/install'
+
+Run any orchestration pipeline
 
 .. code-block:: yaml
 
@@ -183,13 +199,13 @@
           salt/orchestrate/start:
           - salt://salt/reactor/orchestrate_start.sls
 
-Sample event to trigger the basic orchestration pipeline
+Event to trigger the orchestration pipeline
 
 .. code-block:: bash
 
-    salt-call event.send 'salt/orchestrate/start' "{'orchestrate': 'salt/orchestrate/infra_install.sls'}
+    salt-call event.send 'salt/orchestrate/start' "{'orchestrate': 'salt/orchestrate/infra_install.sls'}"
 
-Classify node from custom event
+Classify node after start
 
 .. code-block:: yaml
 
@@ -199,7 +215,7 @@
           reclass/minion/classify:
           - salt://reclass/reactor/node_register.sls
 
-Sample event to trigger the classification
+Event to trigger the node classification
 
 .. code-block:: bash
 
diff --git a/salt/orchestrate/infra_install.sls b/salt/orchestrate/infra_install.sls
index 94a820f..61fe224 100644
--- a/salt/orchestrate/infra_install.sls
+++ b/salt/orchestrate/infra_install.sls
@@ -1,28 +1,10 @@
 
-salt_state_config_node:
-  salt.state:
-    - tgt: 'salt:master'
-    - tgt_type: pillar
-    - sls: salt.master
-    - queue: True
-
-reclass_state_config_nodes
-  salt.state:
-    - tgt: 'reclass:storage'
-    - tgt_type: pillar
-    - sls: reclass
-    - queue: True
-    - requires:
-      - salt: salt_state_config_node
-
 linux_state_all_nodes:
   salt.state:
     - tgt: 'linux:system'
     - tgt_type: pillar
     - sls: linux
     - queue: True
-    - requires:
-      - salt: reclass_state_config_nodes
 
 salt_state_all_nodes:
   salt.state:
@@ -30,14 +12,23 @@
     - tgt_type: pillar
     - sls: salt.minion
     - queue: True
-    - requires:
+    - require:
       - salt: linux_state_all_nodes
 
-ntp_ssh_state_all_nodes:
+openssh_state_all_nodes:
   salt.state:
-    - tgt: 'salt:minion'
+    - tgt: 'openssh:server'
     - tgt_type: pillar
-    - sls: ntp,openssh
+    - sls: openssh
     - queue: True
-    - requires:
+    - require:
+      - salt: salt_state_all_nodes
+
+ntp_state_all_nodes:
+  salt.state:
+    - tgt: 'ntp:client'
+    - tgt_type: pillar
+    - sls: ntp
+    - queue: True
+    - require:
       - salt: salt_state_all_nodes
diff --git a/salt/orchestrate/master_update.sls b/salt/orchestrate/master_update.sls
new file mode 100644
index 0000000..89876b2
--- /dev/null
+++ b/salt/orchestrate/master_update.sls
@@ -0,0 +1,16 @@
+
+salt_state_config_node:
+  salt.state:
+    - tgt: 'salt:master'
+    - tgt_type: pillar
+    - sls: salt.master
+    - queue: True
+
+reclass_state_config_nodes
+  salt.state:
+    - tgt: 'reclass:storage'
+    - tgt_type: pillar
+    - sls: reclass
+    - queue: True
+    - require:
+      - salt: salt_state_config_node
diff --git a/salt/orchestrate/node_install.sls b/salt/orchestrate/node_install.sls
new file mode 100644
index 0000000..c66b4e2
--- /dev/null
+++ b/salt/orchestrate/node_install.sls
@@ -0,0 +1,23 @@
+{%- set node_name = salt['pillar.get']('event_originator') %}
+
+linux_state:
+  salt.state:
+    - tgt: '{{ node_name }}'
+    - sls: linux
+    - queue: True
+
+salt_state:
+  salt.state:
+    - tgt: '{{ node_name }}'
+    - sls: salt.minion
+    - queue: True
+    - require:
+      - salt: linux_state
+
+misc_states:
+  salt.state:
+    - tgt: '{{ node_name }}'
+    - sls: ntp,openssh
+    - queue: True
+    - require:
+      - salt: salt_state
diff --git a/salt/reactor/infra_install.sls b/salt/reactor/infra_install.sls
new file mode 100644
index 0000000..17e7d9c
--- /dev/null
+++ b/salt/reactor/infra_install.sls
@@ -0,0 +1,5 @@
+
+orchestrate_infra_install:
+  runner.state.orchestrate:
+    - mods: salt://salt/orchestrate/infra_install.sls
+    - queue: True
diff --git a/salt/reactor/node_install.sls b/salt/reactor/node_install.sls
new file mode 100644
index 0000000..96e3c3b
--- /dev/null
+++ b/salt/reactor/node_install.sls
@@ -0,0 +1,7 @@
+
+orchestrate_node_install:
+  runner.state.orchestrate:
+    - mods: salt://salt/orchestrate/node_install.sls
+    - queue: True
+    - pillar:
+        event_originator: {{ data.id }}
diff --git a/salt/reactor/node_start.sls b/salt/reactor/node_start.sls
new file mode 100644
index 0000000..904822c
--- /dev/null
+++ b/salt/reactor/node_start.sls
@@ -0,0 +1,8 @@
+
+node_sync_all:
+  local.saltutil.sync_all:
+  - tgt: {{ data.id }}
+
+node_refresh_pillar:
+  local.saltutil.refresh_pillar:
+  - tgt: {{ data.id }}