#!/bin/sh
#
# ocf:pacemaker:remote OCF resource agent
#
# Copyright 2013-2023 the Pacemaker project contributors
#
# The version control history for this file may have further details.
#
# This source code is licensed under the GNU General Public License version 2
# (GPLv2) WITHOUT ANY WARRANTY.
#

# This script provides metadata for Pacemaker's internal remote agent.
# Outside of acting as a placeholder so the agent can be indexed, and
# providing metadata, this script should never be invoked. The actual
# functionality behind the remote connection lives within Pacemaker's
# controller daemon.
#

: ${OCF_FUNCTIONS:="${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs"}
. "${OCF_FUNCTIONS}"
: ${__OCF_ACTION:="$1"}

meta_data() {
    cat <<END
<?xml version="1.0"?>
<resource-agent name="remote" version="@VERSION@">
  <version>1.1</version>
  <shortdesc lang="en">Pacemaker Remote connection</shortdesc>
  <parameters>
    <parameter name="server" unique-group="address">
      <longdesc lang="en">
       Server location to connect to (IP address or resolvable host name)
      </longdesc>
      <shortdesc lang="en">Remote hostname</shortdesc>
      <content type="string"/>
    </parameter>
    <parameter name="port" unique-group="address">
      <longdesc lang="en">
       TCP port at which to contact Pacemaker Remote executor
      </longdesc>
      <shortdesc lang="en">Remote port</shortdesc>
      <content type="integer" default="3121"/>
    </parameter>
    <parameter name="reconnect_interval" reloadable="1">
      <longdesc lang="en">
       If this is a positive time interval, the cluster will attempt to
       reconnect to a remote node after an active connection has been
       lost at this interval. Otherwise, the cluster will attempt to
       reconnect immediately (after any fencing needed).
      </longdesc>
      <shortdesc lang="en">reconnect interval</shortdesc>
      <content type="string" default="0"/>
    </parameter>
  </parameters>
  <actions>
    <action name="start"         timeout="60s" />
    <action name="stop"          timeout="60s" />
    <action name="monitor"       timeout="30s" />
    <action name="migrate_to"    timeout="60s" />
    <action name="migrate_from"  timeout="60s" />
    <action name="reload"        timeout="60s" />
    <action name="reload-agent"  timeout="60s" />
    <action name="meta-data"     timeout="5s" />
  </actions>
</resource-agent>
END
    return $OCF_SUCCESS
}

remote_usage() {
    EXITSTATUS="$1"

    cat <<END
Usage: $0 <action>

This conforms to the OCF Resource Agent API version 1.1, and expects
to have OCF-compliant environment variables provided.
END
    return $EXITSTATUS
}

remote_unsupported() {
    ocf_log info "The ocf:pacemaker:remote agent should not be directly invoked except for meta-data action"
    return $OCF_ERR_GENERIC
}

case $__OCF_ACTION in
    meta-data)      meta_data ;;
    start)          remote_unsupported ;;
    stop)           remote_unsupported ;;
    monitor)        remote_unsupported ;;
    migrate_to)     remote_unsupported ;;
    migrate_from)   remote_unsupported ;;
    reload)         remote_unsupported ;;
    reload-agent)   remote_unsupported ;;
    validate-all)   remote_unsupported ;;
    usage|help)     remote_usage $OCF_SUCCESS ;;
    *)              remote_usage $OCF_ERR_UNIMPLEMENTED ;;
esac

rc=$?
ocf_log debug "${OCF_RESOURCE_INSTANCE} $__OCF_ACTION : $rc"
exit $rc

# vim: set filetype=sh expandtab tabstop=4 softtabstop=4 shiftwidth=4 textwidth=80:
