|  | #!/bin/bash -x | 
|  | exec > >(tee -i /tmp/"$(basename "$0" .sh)"_"$(date '+%Y-%m-%d_%H-%M-%S')".log) 2>&1 | 
|  |  | 
|  | # 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 | 
|  | salt "*" mine.flush | 
|  | salt "*" file.remove /etc/salt/grains.d/collectd | 
|  | salt "*" file.remove /etc/salt/grains.d/grafana | 
|  | salt "*" file.remove /etc/salt/grains.d/heka | 
|  | salt "*" file.remove /etc/salt/grains | 
|  |  | 
|  | # Install collectd and heka services on the nodes, this will also generate the | 
|  | # metadata that goes into the grains and eventually into Salt Mine | 
|  | salt "*" state.sls collectd | 
|  | salt "*" state.sls heka | 
|  |  | 
|  | # Gather the Grafana metadata as grains | 
|  | salt -C 'I@grafana:collector' state.sls grafana.collector | 
|  |  | 
|  | # Update Salt Mine | 
|  | salt "*" state.sls salt.minion.grains | 
|  | salt "*" saltutil.refresh_modules | 
|  | salt "*" mine.update | 
|  |  | 
|  | sleep 5 | 
|  |  | 
|  | # Update Heka | 
|  | salt -C 'I@heka:aggregator:enabled:True or I@heka:remote_collector:enabled:True' state.sls heka | 
|  |  | 
|  | # Update collectd | 
|  | salt -C 'I@collectd:remote_client:enabled:True' state.sls collectd | 
|  |  | 
|  | # Update Nagios | 
|  | salt -C 'I@nagios:server' state.sls nagios | 
|  | # 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 -C 'I@nagios:server' service.stop nagios3 | 
|  |  | 
|  | # Finalize the configuration of Grafana (add the dashboards...) | 
|  | salt -C 'I@grafana:client' state.sls grafana.client.service | 
|  | salt -C 'I@grafana:client' --async service.restart salt-minion; sleep 10 | 
|  | salt -C 'I@grafana:client' state.sls grafana.client | 
|  |  | 
|  | # Get the StackLight monitoring VIP addres | 
|  | vip=$(salt-call pillar.data _param:stacklight_monitor_address --out key|grep _param: |awk '{print $2}') | 
|  | vip=${vip:=172.16.10.253} | 
|  |  | 
|  | # (re)Start manually the services that are bound to the monitoring VIP | 
|  | salt -G "ipv4:$vip" service.restart remote_collectd | 
|  | salt -G "ipv4:$vip" service.restart remote_collector | 
|  | salt -G "ipv4:$vip" service.restart aggregator | 
|  | salt -G "ipv4:$vip" service.restart nagios3 |