#!/bin/sh ## ## OCF Resource Agent compliant rabbitmq-server resource script. ## ## The contents of this file are subject to the Mozilla Public License ## Version 1.1 (the "License"); you may not use this file except in ## compliance with the License. You may obtain a copy of the License at ## http://www.mozilla.org/MPL/ ## ## Software distributed under the License is distributed on an "AS IS" ## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the ## License for the specific language governing rights and limitations ## under the License. ## ## The Original Code is RabbitMQ. ## ## The Initial Developers of the Original Code are LShift Ltd, ## Cohesive Financial Technologies LLC, and Rabbit Technologies Ltd. ## ## Portions created before 22-Nov-2008 00:00:00 GMT by LShift Ltd, ## Cohesive Financial Technologies LLC, or Rabbit Technologies Ltd ## are Copyright (C) 2007-2008 LShift Ltd, Cohesive Financial ## Technologies LLC, and Rabbit Technologies Ltd. ## ## Portions created by LShift Ltd are Copyright (C) 2007-2010 LShift ## Ltd. Portions created by Cohesive Financial Technologies LLC are ## Copyright (C) 2007-2010 Cohesive Financial Technologies ## LLC. Portions created by Rabbit Technologies Ltd are Copyright ## (C) 2007-2010 Rabbit Technologies Ltd. ## ## All Rights Reserved. ## ## Contributor(s): ______________________________________. ## ## OCF instance parameters ## OCF_RESKEY_multi ## OCF_RESKEY_ctl ## OCF_RESKEY_nodename ## OCF_RESKEY_ip ## OCF_RESKEY_port ## OCF_RESKEY_config_file ## OCF_RESKEY_log_base ## OCF_RESKEY_mnesia_base ## OCF_RESKEY_server_start_args ####################################################################### # Initialization: : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/resource.d/heartbeat} . ${OCF_FUNCTIONS_DIR}/.ocf-shellfuncs ####################################################################### OCF_RESKEY_multi_default="/usr/sbin/rabbitmq-multi" OCF_RESKEY_ctl_default="/usr/sbin/rabbitmqctl" OCF_RESKEY_nodename_default="rabbit@localhost" OCF_RESKEY_log_base_default="/var/log/rabbitmq" : ${OCF_RESKEY_multi=${OCF_RESKEY_multi_default}} : ${OCF_RESKEY_ctl=${OCF_RESKEY_ctl_default}} : ${OCF_RESKEY_nodename=${OCF_RESKEY_nodename_default}} : ${OCF_RESKEY_log_base=${OCF_RESKEY_log_base_default}} meta_data() { cat < 1.0 Resource agent for RabbitMQ-server Resource agent for RabbitMQ-server The path to the rabbitmq-multi script Path to rabbitmq-multi The path to the rabbitmqctl script Path to rabbitmqctl The node name for rabbitmq-server Node name The IP address for rabbitmq-server to listen on IP Address The IP Port for rabbitmq-server to listen on IP Port Location of the config file Config file path Location of the directory under which logs will be created Log base path Location of the directory under which mnesia will store data Mnesia base path Additional arguments provided to the server on startup Server start arguments END } rabbit_usage() { cat < /dev/null 2> /dev/null rc=$? case "$rc" in 0) ocf_log debug "RabbitMQ server is running normally" return $OCF_SUCCESS ;; 2) ocf_log debug "RabbitMQ server is not running" return $OCF_NOT_RUNNING ;; *) ocf_log err "Unexpected return from rabbitmqctl $NODENAME_ARG status: $rc" exit $OCF_ERR_GENERIC esac } rabbit_start() { local rc if rabbit_status; then ocf_log info "Resource already running." return $OCF_SUCCESS fi export_vars $RABBITMQ_MULTI start_all 1 > ${RABBITMQ_LOG_BASE}/startup_log 2> ${RABBITMQ_LOG_BASE}/startup_err & rc=$? if [ "$rc" != 0 ]; then ocf_log err "rabbitmq-server start command failed: $RABBITMQ_MULTI start_all 1, $rc" return $rc fi # Spin waiting for the server to come up. # Let the CRM/LRM time us out if required start_wait=1 while [ $start_wait = 1 ]; do rabbit_status rc=$? if [ "$rc" = $OCF_SUCCESS ]; then start_wait=0 elif [ "$rc" != $OCF_NOT_RUNNING ]; then ocf_log info "rabbitmq-server start failed: $rc" exit $OCF_ERR_GENERIC fi sleep 1 done return $OCF_SUCCESS } rabbit_stop() { local rc if ! rabbit_status; then ocf_log info "Resource not running." return $OCF_SUCCESS fi $RABBITMQ_MULTI stop_all & rc=$? if [ "$rc" != 0 ]; then ocf_log err "rabbitmq-server stop command failed: $RABBITMQ_MULTI stop_all, $rc" return $rc fi # Spin waiting for the server to shut down. # Let the CRM/LRM time us out if required stop_wait=1 while [ $stop_wait = 1 ]; do rabbit_status rc=$? if [ "$rc" = $OCF_NOT_RUNNING ]; then stop_wait=0 break elif [ "$rc" != $OCF_SUCCESS ]; then ocf_log info "rabbitmq-server stop failed: $rc" exit $OCF_ERR_GENERIC fi sleep 1 done return $OCF_SUCCESS } rabbit_monitor() { rabbit_status return $? } case $__OCF_ACTION in meta-data) meta_data exit $OCF_SUCCESS ;; usage|help) rabbit_usage exit $OCF_SUCCESS ;; esac if ocf_is_probe; then rabbit_validate_partial else rabbit_validate_full fi case $__OCF_ACTION in start) rabbit_start ;; stop) rabbit_stop ;; status|monitor) rabbit_monitor ;; validate-all) exit $OCF_SUCCESS ;; *) rabbit_usage exit $OCF_ERR_UNIMPLEMENTED ;; esac exit $?