add install stacklight phase

Change-Id: I8fdc5d119c1282e9b3aa4d1d7a7b77e39e99265d
diff --git a/lab-pipeline.groovy b/lab-pipeline.groovy
index c0b58a9..8ebca89 100644
--- a/lab-pipeline.groovy
+++ b/lab-pipeline.groovy
@@ -392,6 +392,101 @@
                     salt.runSaltProcessStep(saltMaster, 'I@nova:compute', 'system.reboot', [], null, true)
                     sleep(10)
                 }
+
+
+                stage('Install StackLight') {
+                    // infra install
+                    // Install the StackLight backends
+                    salt.enforceState(saltMaster, '*01* and  I@elasticsearch:server', 'elasticsearch.server', true)
+                    salt.enforceState(saltMaster, 'I@elasticsearch:server', 'elasticsearch.server', true)
+
+                    salt.enforceState(saltMaster, '*01* and I@influxdb:server', 'influxdb', true)
+                    salt.enforceState(saltMaster, 'I@influxdb:server', 'influxdb', true)
+
+                    salt.enforceState(saltMaster, '*01* and I@kibana:server', 'kibana.server', true)
+                    salt.enforceState(saltMaster, 'I@kibana:server', 'kibana.server', true)
+
+                    salt.enforceState(saltMaster, '*01* and I@grafana:server','grafana.server', true)
+                    salt.enforceState(saltMaster, 'I@grafana:server','grafana.server', true)
+
+                    salt.enforceState(saltMaster, 'I@nagios:server', 'nagios.server', true)
+                    salt.enforceState(saltMaster, 'I@elasticsearch:client', 'elasticsearch.client.service', true)
+                    salt.enforceState(saltMaster, 'I@kibana:client', 'kibana.client.service', true)
+                    // nw salt.enforceState('I@kibana:client or I@elasticsearch:client' --async service.restart salt-minion
+
+                    sleep(10)
+                    salt.enforceState(saltMaster, 'I@redis:cluster:role:master', 'redis', true)
+                    salt.enforceState(saltMaster, 'I@redis:cluster:role:slave', 'redis', true)
+
+                    salt.enforceState(saltMaster, '*01 and I@sensu:server', 'sensu', true)
+                    salt.enforceState(saltMaster, 'I@sensu:server', 'sensu', true)
+
+                    salt.enforceState(saltMaster, 'I@elasticsearch:client', 'elasticsearch.client', true)
+                    salt.enforceState(saltMaster, 'I@kibana:client', 'kibana.client', true)
+
+                    // install monitor
+                    // Restart salt-minion to make sure that it uses the latest Jinja library
+                    // no way: salt '*' --async service.restart salt-minion; sleep 15
+
+                    // Start by flusing Salt Mine to make sure it is clean
+                    // Also clean-up the grains files to make sure that we start from a clean state
+                    // nw salt "*" mine.flush
+                    // nw salt "*" file.remove /etc/salt/grains.d/collectd
+                    // nw salt "*" file.remove /etc/salt/grains.d/grafana
+                    // nw salt "*" file.remove /etc/salt/grains.d/heka
+                    // nw salt "*" file.remove /etc/salt/grains.d/sensu
+                    // nw salt "*" file.remove /etc/salt/grains
+
+                    // Install collectd, heka and sensu services on the nodes, this will also
+                    // generate the metadata that goes into the grains and eventually into Salt Mine
+                    salt.enforceState(saltMaster, '*', 'collectd, true)
+                    salt.enforceState(saltMaster, '*', 'heka', true)
+                    salt.enforceState(saltMaster, 'I@sensu:client', 'sensu', true)
+
+                    // Gather the Grafana metadata as grains
+                    salt.enforceState(saltMaster, 'I@grafana:collector', 'grafana.collector', true)
+
+                    // Update Salt Mine
+                    salt.enforceState(saltMaster, '*', 'salt.minion.grains', true)
+                    salt.runSaltProcessStep(saltMaster, '*', 'saltutil.refresh_modules', [], null, true)
+                    salt.runSaltProcessStep(saltMaster, '*', 'mine.update', [], null, true)
+
+                    sleep(5)
+
+                    // Update Heka
+                    salt.enforceState(saltMaster, 'I@heka:aggregator:enabled:True or I@heka:remote_collector:enabled:True', 'heka', true)
+
+                    // Update collectd
+                    salt.enforceState(saltMaster, 'I@collectd:remote_client:enabled:True', 'collectd', true)
+
+                    // Update Nagios
+                    salt.enforceState(saltMaster, 'I@nagios:server', 'nagios', true)
+                    // Stop the Nagios service because the package starts it by default and it will
+                    // started later only on the node holding the VIP address
+                    salt.runSaltProcessStep(saltMaster, 'I@nagios:server', 'service.stop', ['nagios3'], null, true)
+
+                    // Update Sensu
+                    salt.enforceState(saltMaster, 'I@sensu:server', 'sensu', true)
+
+                    // Finalize the configuration of Grafana (add the dashboards...)
+                    salt.enforceState(saltMaster, 'I@grafana:client', 'grafana.client.service', true)
+                    // nw salt -C 'I@grafana:client' --async service.restart salt-minion; sleep 10
+                    salt.enforceState(saltMaster, 'I@grafana:client', 'grafana.client', true)
+
+                    // Get the StackLight monitoring VIP addres
+                    // TODO
+                    //vip=$(salt-call pillar.data _param:stacklight_monitor_address --out key|grep _param: |awk '{print $2}')
+                    //vip=${vip:=172.16.10.253}
+                    salt.runSaltProcessStep(saltMaster, cmd.run
+                    def tmp = salt.pillarGet(saltMaster, 'ctl01*', '_param:stacklight_monitor_address')
+                    print(tmp)
+
+                    // (re)Start manually the services that are bound to the monitoring VIP
+                    //salt.runSaltProcessStep(saltMaster, "ipv4:${stacklight_vip}", 'service.restart', ['remote_collectd'], true)
+                    //salt.runSaltProcessStep(saltMaster, "ipv4:${stacklight_vip}", 'service.restart', ['remote_collector'], true)
+                    //salt.runSaltProcessStep(saltMaster, "ipv4:${stacklight_vip}", 'service.restart', ['aggregator'], true)
+                    //salt.runSaltProcessStep(saltMaster, "ipv4:${stacklight_vip}", 'service.restart', ['nagios3'], true), true)
+                }
             }
 
             //