#!/bin/bash

if [ -z "$1" ]; then
  echo "The name of the plugin is empty"
  exit 1
fi

if [ -z "$2" ]; then
  echo "The version of the plugin is empty"
  exit 1
fi

PLUGIN_NAME=$1
PLUGIN_VERSION=$2
PLUGIN_MAJOR=$(echo "$PLUGIN_VERSION" | cut -d. -f1)
PLUGIN_MINOR=$(echo "$PLUGIN_VERSION" | cut -d. -f2)

MANIFEST=nagios.pp
CONFIG_DIR=/etc/nagios3/conf.d
PREFIX_FILENAMES=lma_
EXTENSION_FILENAMES=.cfg
PUPPET=$(which puppet)
PLUGIN_PUPPET_DIR=$(ls -d /etc/fuel/plugins/"$PLUGIN_NAME-$PLUGIN_MAJOR.$PLUGIN_MINOR"/puppet)
LAST_CHECK=/var/cache/lma_last_astute_yaml.md5sum
LAST_CHECK_NODES=/var/cache/lma_last_nodes_yaml.md5sum
CURRENT_CHECK=/var/cache/lma_current_astute_yaml.md5sum
CURRENT_CHECK_NODES=/var/cache/lma_current_nodes_yaml.md5sum
ASTUTE=/etc/hiera/astute.yaml

if [ -f /etc/hiera/deleted_nodes.yaml ]; then
  # MOS-9
  NODES=/etc/hiera/deleted_nodes.yaml
else
  # MOS-8
  NODES=/etc/hiera/nodes.yaml
fi

if [[ -z "$PLUGIN_NAME" ]]; then
  cat << EOT
  Usage: $0 <PLUGIN_NAME>

  If $ASTUTE or $NODES have changed since the last run, re-apply nagios manifest.
  Before puppet apply, the script removes the StackLight nagios configuration files.
EOT
  exit 1
fi

if [[ ! -f "$ASTUTE"  || ! -f "$NODES" ]]; then
    echo "Both files $ASTUTE and $NODES are missing !"
    exit 1
fi

if [[ ! -f $LAST_CHECK || ! -f $LAST_CHECK_NODES ]]; then
    # First run
    md5sum $ASTUTE 2>/dev/null > $LAST_CHECK
    md5sum $NODES 2>/dev/null > $LAST_CHECK_NODES
    exit 0
fi

md5sum $ASTUTE > $CURRENT_CHECK
md5sum $NODES > $CURRENT_CHECK_NODES

md5sum --status -c $LAST_CHECK
result_astute=$?
md5sum --status -c $LAST_CHECK_NODES
result_nodes=$?

if [[ $result_astute -ne 0 || $result_nodes -ne 0 ]]; then
  if [ -d "$CONFIG_DIR" ]; then
    rm -f "$CONFIG_DIR"/"$PREFIX_FILENAMES"*"$EXTENSION_FILENAMES"
  fi
  set -e
  $PUPPET apply --modulepath="$PLUGIN_PUPPET_DIR/modules/:/etc/puppet/modules" "$PLUGIN_PUPPET_DIR/manifests/$MANIFEST"
  set +e

  md5sum --status  -c $LAST_CHECK
  result_astute=$?
  md5sum --status  -c $LAST_CHECK_NODES
  result_nodes=$?
  if [[ $result_astute -ne 0 || $result_nodes -ne 0 ]]; then
    # OK, the hiera data hasn't been modified during the puppet run
    md5sum $ASTUTE > $LAST_CHECK
    md5sum $NODES > $LAST_CHECK_NODES
  fi
fi
