Hi Stephane,

On Tue, Jun 16, 2009 at 06:53:17PM +0200, Stephane Neveu wrote:
> 
> Hi all,
> 
> Here is a "first shot" script for postfix. Tell me if not it's correct
> or if something is missing.

Many thanks. Can you please also check the archives. Sometimes in
May, I think, Raoul has contributed one. It hasn't been yet
applied, because there were some issues not yet fixed.

Cheers,

Dejan

> Regards,
> 
> Stephane Neveu

> #!/bin/sh 
> #
> # Description:  Manages Postfix Service provided by NTT OSSC as an 
> #               OCF High-Availability resource under Heartbeat/LinuxHA control
> #
> # This program is free software; you can redistribute it and/or
> # modify it under the terms of the GNU General Public License
> # as published by the Free Software Foundation; either version 2
> # of the License, or (at your option) any later version.
> #
> # This program is distributed in the hope that it will be useful,
> # but WITHOUT ANY WARRANTY; without even the implied warranty of
> # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> # GNU General Public License for more details.
> #
> # You should have received a copy of the GNU General Public License
> # along with this program; if not, write to the Free Software
> # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
> # 02110-1301, USA.
> #
> #mailto : [email protected]
> #
> #######################################################################
> # OCF parameters:
> #   OCF_RESKEY_postfix_bin    : Executable file
> #   OCF_RESKEY_postfix_pidfile: Process id file
> #   OCF_RESKEY_postfix_port   : Port number
> #   OCF_RESKEY_postfix_user    : postfix user 
> #
> #   OCF_RESKEY_postfix_bin, OCF_RESKEY_postfix_conf, 
> OCF_RESKEY_postfix_pidfile
> #   OCF_RESKEY_postfix_port OCF_RESKEY_postfix_user must be specified. 
> ###############################################################################
> 
> . ${OCF_ROOT}/resource.d/heartbeat/.ocf-shellfuncs
> 
> #########INITIALIZATION 
> HERE###################################################
> POSTFIX_BIN="${OCF_RESKEY_postfix_bin-/usr/sbin/postfix}"
> POSTFIX_PIDFILE="${OCF_RESKEY_postfix_pidfile-/var/spool/postfix/pid/master.pid}"
> POSTFIX_CONFFILE="${OCF_RESKEY_postfix_conffile-/etc/postfix/main.cf}"
> POSTFIX_PORT="${OCF_RESKEY_postfix_port-25}"
> POSTFIX_USER="${OCF_RESKEY_postfix_user-root}"
> POSTFIX_NAME="${OCF_RESKEY_postfix_opts-postfix}"
> ##############################################################################
> 
> 
> usage() 
> {
>       cat <<-!
> usage: $0 action
> 
> action:
>         start       : start a new POSTFIX instance
> 
>         stop        : stop the running POSTFIX instance
> 
>         status      : return the status of POSTFIX, run or down
> 
>         monitor     : return TRUE if POSTFIX appears to be working.
> 
>         meta-data   : show meta data message
> 
>         validate-all : validate the instance parameters
> !
>       return $OCF_ERR_ARGS
> }
> 
> metadata_postfix() {
>     cat <<END
> <?xml version="1.0"?>
> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
> <resource-agent name="postfix">
> <version>1.0</version>
> <longdesc lang="en">The OCF resource agent for  postfix</longdesc>
> <shortdesc lang="en">The RA for postfix</shortdesc>
> 
> <parameters>
> 
> <parameter name="postfix_bin" required="1" unique="0">
> <longdesc lang="en">
> This is a required parameter. This parameter specifies postfix's
> bin file
> </longdesc>
> <shortdesc>Binary</shortdesc>
> <content type="string" default=""/>
> </parameter>
> 
> <parameter name="postfix_pidfile" required="1" unique="1">
> <longdesc lang="en">
> This is a required parameter. This parameter specifies a process id file
> for a postfix instance managed by this RA.
> </longdesc>
> <shortdesc>Pidfile</shortdesc>
> <content type="string" default=""/>
> </parameter>
> 
> <parameter name="postfix_port" required="1" unique="1">
> <longdesc lang="en">
> This is a required parameter. This parameter specifies a port number
> for a postfix instance managed by this RA. If plural ports are used,
> you must specifiy the only one of them.
> </longdesc>
> <shortdesc>Port number</shortdesc>
> <content type="integer" default=""/>
> </parameter>
> 
> <parameter name="postfix_user" required="1" unique="1">
> <longdesc lang="en">
> This is a required parameter. This parameter specifies a user
> to start the postfix instance managed by this RA. 
> </longdesc>
> <shortdesc>User</shortdesc>
> <content type="string" default=""/>
> </parameter>
> 
> </parameters>
> 
> <actions>
> <action name="start" timeout="20s" />
> <action name="stop" timeout="20s" />
> <action name="status" timeout="30" />
> <action name="monitor" depth="0" timeout="30s" interval="20s" 
> start-delay="10s" />
> <action name="meta-data" timeout="20s" />
> <action name="validate-all" timeout="20" />
> </actions>
> </resource-agent>
> END
>       exit $OCF_SUCCESS
> }
> 
> get_pid()
> {
>         POSTFIX_PID=$(netstat -laputen   | awk  
> '/.*[0-9]+\.[0-9]+\.+[0-9]+\.[0-9]+:'$POSTFIX_PORT'[^0-9].*LISTEN/ {print 
> $9}' | cut -d '/' -f 1)
> }
> 
> is_pid_found()
> {
>       get_pid
>         if [ -n "${POSTFIX_PID}" ] ; then
>                 return $OCF_SUCCESS
>         else
>                 return 1
>         fi
> }
> 
> is_postfix_dead()
> {
>       get_pid
>       if [[ -z "${POSTFIX_PID}" ]] && [[ -f "${POSTFIX_PIDFILE}" ]]; then     
>                 return $OCF_SUCCESS
>       elif [[ -n "${POSTFIX_PID}" ]] && [[ ! -f "${POSTFIX_PIDFILE}" ]]; then
>                 return $OCF_NOT_RUNNING
>         else
>                 return 1
>         fi
> 
> }
> 
> monitor_postfix()
> {
>               get_pid
>               if is_postfix_dead; then
>                       return $OCF_ERR_GENERIC
>               elif is_pid_found; then
>                       return $OCF_SUCCESS
>               else
>                       return $OCF_NOT_RUNNING
>               fi
> }
> 
> start_postfix()
> {
>       typeset status
> 
>       monitor_postfix
>       status=$?
>       if [[ $status != $OCF_NOT_RUNNING ]]; then
>           return $status
>       fi
>         /usr/bin/newaliases >/dev/null 2>&1   
>       ocf_run $POSTFIX_BIN start
>       status=$?
>       sleep 1
>       if [[ $status != $OCF_SUCCESS ]]; then
>               return $status
>       fi
> 
>       while true; do
>               get_pid
>               if is_pid_found; then
>                       return $OCF_SUCCESS
>               else
>                       ocf_log info "$POSTFIX_BIN:No pid found after start"
>               fi
>       done
> 
>       return $OCF_ERR_GENERIC
> }
> 
> stop_postfix()
> {
>               monitor_postfix
>               ocf_run $POSTFIX_BIN stop       
>               while true; do
>                       sleep 1 
>                       get_pid
>                       if [ is_postfix_dead != "1" ]; then
>                               rm -f ${POSTFIX_PIDFILE}
>                               return $OCF_SUCCESS
>                       fi
>                       ocf_log info "POSTFIX stopped"
>               done
>       
> }
> 
> status_postfix()
> {
>       monitor_postfix
>       return $?
> }
> 
> 
> validate_all_postfix()
> {
>       return $OCF_SUCCESS
> }
> 
> 
> if [ -z "$POSTFIX_BIN" ]; then
>         ocf_log err "POSTFIX_BIN is not defined"
>         exit $OCF_ERR_CONFIGURED
> fi
> if [ ! -x "$POSTFIX_BIN" ]; then
>         ocf_log err "$POSTFIX_BIN is not found"
>         exit $OCF_ERR_CONFIGURED
> fi
> 
> if [ -z "$POSTFIX_PIDFILE" ]; then
>         ocf_log err "POSTFIX_PIDFILE is not defined"
>         exit $OCF_ERR_CONFIGURED
> fi
> 
> if [ -z "$POSTFIX_PORT" ]; then
>         ocf_log err "POSTFIX_PORT is not defined"
>         exit $OCF_ERR_CONFIGURED
> fi
> 
> if [ -z "$POSTFIX_USER" ]; then
>         ocf_log err "POSTFIX_USER is not defined"
>         exit $OCF_ERR_CONFIGURED
> fi
> 
> 
> COMMAND=$1
> 
> case "$COMMAND" in
>       start)
>               start_postfix
>               status=$?
>               exit $status
>               ;;
>       stop)
>               stop_postfix
>               status=$?
>               exit $status
>               ;;
>       status)
>               status_postfix
>               status=$?
>               if status; then
>                       ocf_log info "postfix is running"
>               elif [status -eq 7]; then
>                       ocf_log info "postfix is stopped"
>               else
>                       ocf_log info "postfix is dead"
>               fi      
>               ;;
>       monitor)
>               monitor_postfix
>               status=$?
>               exit $status
>               ;;
>       meta-data) 
>                metadata_postfix
>                 ;;
>       validate-all)
>               validate_all_postfix
>               exit $?
>               ;;
>       *)
>               usage
>               ;;
> esac
> 
> 

> _______________________________________________
> Linux-HA mailing list
> [email protected]
> http://lists.linux-ha.org/mailman/listinfo/linux-ha
> See also: http://linux-ha.org/ReportingProblems
_______________________________________________
Linux-HA mailing list
[email protected]
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems

Reply via email to