Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Linux-HA: Users

OCF Script for postfix

 

 

Linux-HA users RSS feed   Index | Next | Previous | View Threaded


stephane.neveu at thalesgroup

Jun 16, 2009, 9:53 AM

Post #1 of 4 (406 views)
Permalink
OCF Script for postfix

Hi all,

Here is a "first shot" script for postfix. Tell me if not it's correct
or if something is missing.
Regards,

Stephane Neveu
Attachments: postfix (6.82 KB)


Darren.Mansell at opengi

Jun 17, 2009, 1:35 AM

Post #2 of 4 (369 views)
Permalink
Re: OCF Script for postfix [In reply to]

>
> Hi all,
>
> Here is a "first shot" script for postfix. Tell me if not it's correct
or
> if something is missing.
> Regards,
>
> Stephane Neveu


Awesome thank you, I've been wanting one of these :)

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


dejanmm at fastmail

Jun 17, 2009, 3:53 AM

Post #3 of 4 (366 views)
Permalink
Re: OCF Script for postfix [In reply to]

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 : stephane.neveu[at]thalesgroup.com
> #
> #######################################################################
> # 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
> Linux-HA[at]lists.linux-ha.org
> http://lists.linux-ha.org/mailman/listinfo/linux-ha
> See also: http://linux-ha.org/ReportingProblems
_______________________________________________
Linux-HA mailing list
Linux-HA[at]lists.linux-ha.org
http://lists.linux-ha.org/mailman/listinfo/linux-ha
See also: http://linux-ha.org/ReportingProblems


Darren.Mansell at opengi

Jun 30, 2009, 7:15 AM

Post #4 of 4 (259 views)
Permalink
Re: OCF Script for postfix [In reply to]

Just got round to testing this. It works fine apart from one minor
problem - it's got Windows line breaks in and when pacemaker tries to
parse the file it kills pacemaker/AIS in such a way that I have to
killall -9 aisexec to be able to restart it.

Taking the line breaks out makes it work fine. Here is the edited
version, it's working as a clone and seems to be migrating around
happily when asked to do so.

Thanks for this, saves me a lot of work.

Darren

> -----Original Message-----
> From: linux-ha-bounces[at]lists.linux-ha.org [mailto:linux-ha-
> bounces[at]lists.linux-ha.org] On Behalf Of Stephane Neveu
> Sent: 16 June 2009 17:53
> To: General Linux-HA mailing list
> Subject: [Linux-HA] OCF Script for postfix
>
>
> Hi all,
>
> Here is a "first shot" script for postfix. Tell me if not it's correct
or
> if something is missing.
> Regards,
>
> Stephane Neveu
Attachments: postfix (12.3 KB)

Linux-HA users RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact lists@gossamer-threads.com
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.