#!/bin/bash
# ganeti master role OCF resource
# See http://linux-ha.org/wiki/OCF_Resource_Agents

set -e -u

@SHELL_ENV_INIT@

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin

SCRIPTNAME="@LIBDIR@/ocf/resource.d/ganeti/ganeti-master-role"

# Master candidates list file
MCFILE="$DATA_DIR/ssconf_master_candidates"

# We'll need the hostname in a few places, so we'll get it once, now.
MYHOSTNAME=$(hostname --fqdn)

is_master() {
  local -r master=$(gnt-cluster getmaster)
  [[ "$MYHOSTNAME" == "$master" ]]
}

is_candidate() {
  grep -Fx $MYHOSTNAME $MCFILE
}

start_action() {
  if is_master; then
    exit 0
  elif is_candidate; then
    gnt-cluster master-failover || exit 1 # OCF_ERR_GENERIC
  else
    exit 5 # OCF_ERR_INSTALLED (vital component missing)
  fi
}

stop_action() {
  # We can't really "stop" being a master.
  # TODO: investigate whether a fake approach will do.
  exit 1 # OCF_ERR_GENERIC
}

recover_action() {
  if is_master; then
    gnt-cluster redist-conf || exit 1 # OCF_ERR_GENERIC
  elif is_candidate; then
    gnt-cluster master-failover || exit 1 # OCF_ERR_GENERIC
  else
    exit 5 # OCF_ERR_INSTALLED (vital component missing)
  fi
}

monitor_action() {
  # monitor should exit:
  #    7 if the resource is not running
  #    1 if it failed
  #    0 if it's running
  if is_master; then
    exit 0
  elif is_candidate; then
    exit 7 # OCF_NOT_RUNNING
  else
    exit 5 # OCF_ERR_INSTALLED (vital component missing)
  fi
}

return_meta() {
cat <<END
<?xml version="1.0"?>
<!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
<resource-agent name="ganeti-master-role" version="0.1">
<version>0.1</version>
<longdesc lang="en">
OCF script to manage the ganeti master role in a cluster.

Can be used to failover the ganeti master between master candidate nodes.
</longdesc>
<shortdesc lang="en">Manages the ganeti cluster master</shortdesc>

<parameters/>
<actions>
<action name="start" timeout="300s" />
<action name="stop" timeout="50s" />
<action name="monitor" depth="0" timeout="10s" interval="30s" />
<action name="meta-data" timeout="5s" />
<action name="recover" timeout="20s" />
<action name="reload" timeout="5s" />
</actions>
</resource-agent>
END
exit 0
}

case "$1" in
  # Mandatory OCF commands
  start)
    start_action
    ;;
  stop)
    stop_action
    ;;
  monitor)
    monitor_action
    ;;
  meta-data)
    return_meta
    ;;
  # Optional OCF commands
  recover)
    recover_action
    ;;
  reload)
    # The ganeti master role has no "configuration" that is reloadable on
    # the pacemaker side. We declare the operation anyway to make sure
    # pacemaker doesn't decide to stop and start the service needlessly.
    exit 0
    ;;
  promote|demote|migrate_to|migrate_from|validate-all)
    # Not implemented (nor declared by meta-data)
    exit 3 # OCF_ERR_UNIMPLEMENTED
    ;;
  *)
    log_success_msg "Usage: $SCRIPTNAME {start|stop|monitor|meta-data|recover|reload}"
    exit 1
    ;;
esac

exit 0
