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

Mailing List Archive: Linux-HA: Dev

OCF RA for named

 

 

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


sergeyfd at gmail

Jul 12, 2011, 2:50 PM

Post #1 of 12 (1260 views)
Permalink
OCF RA for named

Hello -

I've created an OCF RA for named (BIND) server. There is an existing one in
redhat directory but I don't like how it does monitoring and I doubt that it
can work with pacemaker. So please review the attached RA and see if it can
be included into the project.


--
Serge Dubrouski.
Attachments: named (11.0 KB)


sergeyfd at gmail

Aug 5, 2011, 7:19 AM

Post #2 of 12 (1184 views)
Permalink
Re: OCF RA for named [In reply to]

No interest?

On Tue, Jul 12, 2011 at 3:50 PM, Serge Dubrouski <sergeyfd [at] gmail> wrote:

> Hello -
>
> I've created an OCF RA for named (BIND) server. There is an existing one in
> redhat directory but I don't like how it does monitoring and I doubt that it
> can work with pacemaker. So please review the attached RA and see if it can
> be included into the project.
>
>
> --
> Serge Dubrouski.
>



--
Serge Dubrouski.


r.bhatia at ipax

Aug 8, 2011, 1:58 AM

Post #3 of 12 (1160 views)
Permalink
Re: OCF RA for named [In reply to]

On 08/05/2011 04:19 PM, Serge Dubrouski wrote:
> No interest?
>
> On Tue, Jul 12, 2011 at 3:50 PM, Serge Dubrouski <sergeyfd [at] gmail
> <mailto:sergeyfd [at] gmail>> wrote:
>
> Hello -
>
> I've created an OCF RA for named (BIND) server. There is an existing
> one in redhat directory but I don't like how it does monitoring and
> I doubt that it can work with pacemaker. So please review the
> attached RA and see if it can be included into the project.

hi!

could you possibly set up a github repository for that ra?
i would be interested to take a look!

thanks,
raoul

_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev [at] lists
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/


dejan at suse

Aug 16, 2011, 7:44 AM

Post #4 of 12 (1130 views)
Permalink
Re: OCF RA for named [In reply to]

Hi Serge,

On Fri, Aug 05, 2011 at 08:19:52AM -0600, Serge Dubrouski wrote:
> No interest?

Probably not true :) It's just that recently I've been away for
a while and in between really swamped with my daily work. I'm
trying to catch up now, but it may take a while.

In the meantime, I'd like to ask you about the motivation. DNS
already has a sort of redundancy built in through its
primary/secondary servers.

Cheers,

Dejan

> On Tue, Jul 12, 2011 at 3:50 PM, Serge Dubrouski <sergeyfd [at] gmail> wrote:
>
> > Hello -
> >
> > I've created an OCF RA for named (BIND) server. There is an existing one in
> > redhat directory but I don't like how it does monitoring and I doubt that it
> > can work with pacemaker. So please review the attached RA and see if it can
> > be included into the project.
> >
> >
> > --
> > Serge Dubrouski.
> >
>
>
>
> --
> Serge Dubrouski.

> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev [at] lists
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/

_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev [at] lists
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/


sergeyfd at gmail

Aug 16, 2011, 7:51 AM

Post #5 of 12 (1126 views)
Permalink
Re: OCF RA for named [In reply to]

On Tue, Aug 16, 2011 at 8:44 AM, Dejan Muhamedagic <dejan [at] suse> wrote:

> Hi Serge,
>
> On Fri, Aug 05, 2011 at 08:19:52AM -0600, Serge Dubrouski wrote:
> > No interest?
>
> Probably not true :) It's just that recently I've been away for
> a while and in between really swamped with my daily work. I'm
> trying to catch up now, but it may take a while.
>
> In the meantime, I'd like to ask you about the motivation. DNS
> already has a sort of redundancy built in through its
> primary/secondary servers.
>

That redundancy doesn't work quite well. Yes you can have primary and
secondary servers configured in resolv.conf but if primary is down resolver
waits till request times out for the primary server till it sends a request
to the secondary one. The dealy can be up to 30 seconds and impacts some
applications pretty badly, This is standard behaviour for Linux, Solaris for
example works differently and isn't impacted by this issue. Works around are
having caching DNS server working locally or having primary DNS server
highly available with using Pacemaker :-)

Here is what man page for resolv.conf says:

nameserver Name server IP address
Internet address (in dot notation) of a name server that
the
resolver should query. Up to MAXNS (currently 3,
see
<resolv.h>) name servers may be listed, one per keyword.
If
there are multiple servers, the resolver library queries them
in
the order listed. If no nameserver entries are present,
the
default is to use the name server on the local machine. *(The
algorithm used is to try a name server, and if the query
times
out, try the next, until out of name servers, then repeat
trying
all the name servers until a maximum number of retries
are
made.)*


> Cheers,
>
> Dejan
>
> > On Tue, Jul 12, 2011 at 3:50 PM, Serge Dubrouski <sergeyfd [at] gmail>
> wrote:
> >
> > > Hello -
> > >
> > > I've created an OCF RA for named (BIND) server. There is an existing
> one in
> > > redhat directory but I don't like how it does monitoring and I doubt
> that it
> > > can work with pacemaker. So please review the attached RA and see if it
> can
> > > be included into the project.
> > >
> > >
> > > --
> > > Serge Dubrouski.
> > >
> >
> >
> >
> > --
> > Serge Dubrouski.
>
> > _______________________________________________________
> > Linux-HA-Dev: Linux-HA-Dev [at] lists
> > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> > Home Page: http://linux-ha.org/
>
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev [at] lists
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
>



--
Serge Dubrouski.


lars.ellenberg at linbit

Aug 17, 2011, 11:39 AM

Post #6 of 12 (1120 views)
Permalink
Re: OCF RA for named [In reply to]

On Tue, Aug 16, 2011 at 08:51:04AM -0600, Serge Dubrouski wrote:
> On Tue, Aug 16, 2011 at 8:44 AM, Dejan Muhamedagic <dejan [at] suse> wrote:
>
> > Hi Serge,
> >
> > On Fri, Aug 05, 2011 at 08:19:52AM -0600, Serge Dubrouski wrote:
> > > No interest?
> >
> > Probably not true :) It's just that recently I've been away for
> > a while and in between really swamped with my daily work. I'm
> > trying to catch up now, but it may take a while.
> >
> > In the meantime, I'd like to ask you about the motivation. DNS
> > already has a sort of redundancy built in through its
> > primary/secondary servers.
> >
>
> That redundancy doesn't work quite well. Yes you can have primary and
> secondary servers configured in resolv.conf but if primary is down resolver
> waits till request times out for the primary server till it sends a request
> to the secondary one. The dealy can be up to 30 seconds and impacts some
> applications pretty badly, This is standard behaviour for Linux, Solaris for
> example works differently and isn't impacted by this issue. Works around are
> having caching DNS server working locally or having primary DNS server
> highly available with using Pacemaker :-)
>
> Here is what man page for resolv.conf says:
>
> nameserver Name server IP address
> Internet address (in dot notation) of a name server that the
> resolver should query. Up to MAXNS (currently 3, see
> <resolv.h>) name servers may be listed, one per keyword. If
> there are multiple servers, the resolver library queries them in
> the order listed. If no nameserver entries are present, the
> default is to use the name server on the local machine. *(The
> algorithm used is to try a name server, and if the query times
> out, try the next, until out of name servers, then repeat trying
> all the name servers until a maximum number of retries are
> made.)*

options timeout:2 attempts:5 rotate

but yes, it is still a valid use case to have a clustered primary name server,
and possibly multiple backups.

--
: Lars Ellenberg
: LINBIT | Your Way to High Availability
: DRBD/HA support and consulting http://www.linbit.com

DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev [at] lists
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/


sergeyfd at gmail

Aug 18, 2011, 5:35 AM

Post #7 of 12 (1118 views)
Permalink
Re: OCF RA for named [In reply to]

On Wed, Aug 17, 2011 at 12:39 PM, Lars Ellenberg
<lars.ellenberg [at] linbit>wrote:

> On Tue, Aug 16, 2011 at 08:51:04AM -0600, Serge Dubrouski wrote:
> > On Tue, Aug 16, 2011 at 8:44 AM, Dejan Muhamedagic <dejan [at] suse>
> wrote:
> >
> > > Hi Serge,
> > >
> > > On Fri, Aug 05, 2011 at 08:19:52AM -0600, Serge Dubrouski wrote:
> > > > No interest?
> > >
> > > Probably not true :) It's just that recently I've been away for
> > > a while and in between really swamped with my daily work. I'm
> > > trying to catch up now, but it may take a while.
> > >
> > > In the meantime, I'd like to ask you about the motivation. DNS
> > > already has a sort of redundancy built in through its
> > > primary/secondary servers.
> > >
> >
> > That redundancy doesn't work quite well. Yes you can have primary and
> > secondary servers configured in resolv.conf but if primary is down
> resolver
> > waits till request times out for the primary server till it sends a
> request
> > to the secondary one. The dealy can be up to 30 seconds and impacts some
> > applications pretty badly, This is standard behaviour for Linux, Solaris
> for
> > example works differently and isn't impacted by this issue. Works around
> are
> > having caching DNS server working locally or having primary DNS server
> > highly available with using Pacemaker :-)
> >
> > Here is what man page for resolv.conf says:
> >
> > nameserver Name server IP address
> > Internet address (in dot notation) of a name server that the
> > resolver should query. Up to MAXNS (currently 3, see
> > <resolv.h>) name servers may be listed, one per keyword. If
> > there are multiple servers, the resolver library queries them in
> > the order listed. If no nameserver entries are present, the
> > default is to use the name server on the local machine. *(The
> > algorithm used is to try a name server, and if the query times
> > out, try the next, until out of name servers, then repeat trying
> > all the name servers until a maximum number of retries are
> > made.)*
>
> options timeout:2 attempts:5 rotate
>

Right, once can do this. But even with this it would take additional 10
seconds for requests sent to the server that's down before they timeout. In
production environment that's absolutely unacceptable.

>
> but yes, it is still a valid use case to have a clustered primary name
> server,
> and possibly multiple backups.
>

And that's why I cerated this RA :-)


>
> --
> : Lars Ellenberg
> : LINBIT | Your Way to High Availability
> : DRBD/HA support and consulting http://www.linbit.com
>
> DRBD® and LINBIT® are registered trademarks of LINBIT, Austria.
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev [at] lists
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
>



--
Serge Dubrouski.


dejan at suse

Sep 1, 2011, 5:28 AM

Post #8 of 12 (1103 views)
Permalink
Re: OCF RA for named [In reply to]

Hi Serge,

On Tue, Jul 12, 2011 at 03:50:36PM -0600, Serge Dubrouski wrote:
> Hello -
>
> I've created an OCF RA for named (BIND) server. There is an existing one in
> redhat directory but I don't like how it does monitoring and I doubt that it
> can work with pacemaker. So please review the attached RA and see if it can
> be included into the project.

Sorry for the delay. The RA looks quite good, some comments
below.

Cheers,

Dejan

> #!/bin/sh
> #
> # Description: Manages a named (Bind) server as an OCF High-Availability
> # resource
> #
> # Authors: Serge Dubrouski (sergeyfd [at] gmail)
> #
> # Copyright: 2011 Serge Dubrouski <sergeyfd [at] gmail>
> #
> # License: GNU General Public License (GPL)
> #
> ###############################################################################
> # Initialization:
>
> : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
> . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
>
> # Used binaries
> RNDC="/usr/sbin/rndc"
> HOST="/usr/bin/host"
> PIDOF="/sbin/pidof"

How about relying on PATH? The RA should have a sane environment
and these are all standard locations. Packagers may have
different ideas which may lead to problems.

> #Defaults
> OCF_RESKEY_named_default="/usr/sbin/named"
> OCF_RESKEY_named_user_default=named
> OCF_RESKEY_named_config_default="/etc/named.conf"
> OCF_RESKEY_named_pidfile_default="/var/run/named/named.pid"
> OCF_RESKEY_named_rootdir_default=""
> OCF_RESKEY_named_options_default=""
> OCF_RESKEY_named_keytab_file_default=""
> OCF_RESKEY_named_stop_timeout_default=25
> OCF_RESKEY_monitor_request_default="localhost"
> OCF_RESKEY_monitor_response_default="127.0.0.1"
> OCF_RESKEY_monitor_ip_default="127.0.0.1"
>
> : ${OCF_RESKEY_named=${OCF_RESKEY_named_default}}
> : ${OCF_RESKEY_named_user=${OCF_RESKEY_named_user_default}}
> : ${OCF_RESKEY_named_config=${OCF_RESKEY_named_config_default}}
> : ${OCF_RESKEY_named_pidfile=${OCF_RESKEY_named_pidfile_default}}
> : ${OCF_RESKEY_named_rootdir=${OCF_RESKEY_named_rootdir_default}}
> : ${OCF_RESKEY_named_options=${OCF_RESKEY_named_options_default}}
> : ${OCF_RESKEY_named_keytab_file=${OCF_RESKEY_named_keytab_file_default}}
> : ${OCF_RESKEY_named_stop_timeout=${OCF_RESKEY_named_stop_timeout_default}}
> : ${OCF_RESKEY_monitor_request=${OCF_RESKEY_monitor_request_default}}
> : ${OCF_RESKEY_monitor_response=${OCF_RESKEY_monitor_response_default}}
> : ${OCF_RESKEY_monitor_ip=${OCF_RESKEY_monitor_ip_default}}
>
> usage() {
> cat <<EOF
> usage: $0 start|stop|reload|status|monitor|meta-data|validate-all|methods
>
> $0 manages named (Bind) server as an HA resource.
>
> The 'start' operation starts named server.
> The 'stop' operation stops named server.
> The 'reload' operation reload named configuration.
> The 'status' operation reports whether named is up.
> The 'monitor' operation reports whether named is running.
> The 'validate-all' operation reports whether parameters are valid.
> The 'methods' operation reports on the methods $0 supports.
> EOF
> return $OCF_ERR_ARGS
> }
>
> named_meta_data() {
> cat <<EOF
> <?xml version="1.0"?>
> <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
> <resource-agent name="named">
> <version>1.0</version>
>
> <longdesc lang="en">
> Resource script for named (Bind) server. It manages named as an HA resource.
> </longdesc>
> <shortdesc lang="en">Manages a named server</shortdesc>
>
> <parameters>
> <parameter name="named" unique="0" required="0">
> <longdesc lang="en">
> Path to the named command.
> </longdesc>
> <shortdesc lang="en">named</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_default}" />
> </parameter>
>
> <parameter name="named_user" unique="0" required="0">
> <longdesc lang="en">
> User that should own named process.
> </longdesc>
> <shortdesc lang="en">named_user</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_user_default}" />
> </parameter>
>
> <parameter name="named_config" unique="0" required="0">
> <longdesc lang="en">
> Configuration file for named.
> </longdesc>
> <shortdesc lang="en">named_config</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_config_default}" />
> </parameter>

This one should be unique.

> <parameter name="named_pidfile" unique="0" required="0">
> <longdesc lang="en">
> PIDFILE file for named.
> </longdesc>
> <shortdesc lang="en">named_pidfile</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_pidfile_default}" />
> </parameter>

This one too.

> <parameter name="named_rootdir" unique="0" required="0">
> <longdesc lang="en">
> Directory that named should use for chroot if any.
> </longdesc>
> <shortdesc lang="en">named_rootdir</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_rootdir_default}" />
> </parameter>

This one also? Or do different instances share chroot?

> <parameter name="named_options" unique="0" required="0">
> <longdesc lang="en">
> Options for named process if any.
> </longdesc>
> <shortdesc lang="en">named_options</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_options_default}" />
> </parameter>
>
> <parameter name="named_keytab_file" unique="0" required="0">
> <longdesc lang="en">
> named service keytab file (for GSS-TSIG).
> </longdesc>
> <shortdesc lang="en">named_keytab_file</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_keytab_file_default}" />
> </parameter>
>
> <parameter name="named_stop_timeout" unique="0" required="0">
> <longdesc lang="en">
> Stop timeout. Named process will be killed if it doesn't stop in a given time.
> </longdesc>
> <shortdesc lang="en">named_stop_timeout</shortdesc>
> <content type="string" default="${OCF_RESKEY_named_stop_timeout_default}" />
> </parameter>

This an overkill? Some RA use 2/3 (or so) of the meta timeout
attribute and then try to kill -9.

> <parameter name="monitor_request" unique="0" required="0">
> <longdesc lang="en">
> Request that shall be sent to named for monitoring. Usually an A record in DNS.
> </longdesc>
> <shortdesc lang="en">monitor_request</shortdesc>
> <content type="string" default="${OCF_RESKEY_monitor_request_default}" />
> </parameter>
>
> <parameter name="monitor_response" unique="0" required="0">
> <longdesc lang="en">
> Expected response from named server.
> </longdesc>
> <shortdesc lang="en">monitor_response</shortdesc>
> <content type="string" default="${OCF_RESKEY_monitor_response_default}" />
> </parameter>
>
> <parameter name="monitor_ip" unique="0" required="0">
> <longdesc lang="en">
> IP Address where named listens.
> </longdesc>
> <shortdesc lang="en">monitor_ip</shortdesc>
> <content type="string" default="${OCF_RESKEY_monitor_ip_default}" />
> </parameter>
> </parameters>

Why not just use localhost? Could there be an instance which
doesn't listen on the lo interface?

> <actions>
> <action name="start" timeout="60" />
> <action name="stop" timeout="60" />
> <action name="reload" timeout="60" />
> <action name="status" timeout="10" />
> <action name="monitor" depth="0" timeout="30" interval="30"/>
> <action name="meta-data" timeout="5" />
> <action name="validate-all" timeout="5" />
> <action name="methods" timeout="5" />
> </actions>
> </resource-agent>
>
> EOF
> }
>
> #
> # methods: What methods/operations do we support?
> #
>
> named_methods() {
> cat <<EOF
> start
> stop
> status
> monitor
> methods
> meta-data
> validate-all
> EOF
> }
>
> # Validate most critical parameters
> named_validate_all() {
> check_binary $OCF_RESKEY_named
> check_binary $RNDC
> check_binary $HOST
>
> if [ ! -r "$OCF_RESKEY_named_config" ]; then
> if ocf_is_probe; then
> ocf_log info "Configuration file $OCF_RESKEY_named_config not readable during probe."
> else
> ocf_log err "Configuration file $OCF_RESKEY_named_config doesn't exist"
> return $OCF_ERR_INSTALLED
> fi
> fi
>
> getent passwd $OCF_RESKEY_named_user >/dev/null 2>&1
> if [ ! $? -eq 0 ]; then
> ocf_log err "User $OCF_RESKEY_named_user doesn't exist";
> return $OCF_ERR_INSTALLED;
> fi
>
> if [. -z "$OCF_RESKEY_monitor_request" -o \
> -z "$OCF_RESKEY_monitor_response" -o \
> -z "$OCF_RESKEY_monitor_ip" ]; then
> ocf_log err "Neither monitor_request, monitor_response or monitor_ip can be empty"

ocf_log err "Neither monitor_request, monitor_response, nor monitor_ip can be empty"

(I guess, not a native speaker.)

> return $OCF_ERR_CONFIGURED
> fi
>
> return $OCF_SUCCESS
> }
>
> #
> # named_status. Simple check of the status of named process by pidfile.
> #
>
> named_status () {
> ocf_pidfile_status ${OCF_RESKEY_named_pidfile} >/dev/null 2>&1
> return $?

return is superfluous here.

> }
>
> #
> # named_monitor. Send a request to named and check response.
> #
>
> named_monitor() {
> if ! named_status
> then
> ocf_log info "named is down"
> return $OCF_NOT_RUNNING
> fi
>
> if ! $HOST $OCF_RESKEY_monitor_request $OCF_RESKEY_monitor_ip | \
> grep -q '.* has address '"$OCF_RESKEY_monitor_response" ; then
> ocf_log err "named didn't answer properly for $OCF_RESKEY_monitor_request."
> ocf_log err "Expected: $OCF_RESKEY_monitor_response."
> ocf_log err "Got: `$HOST $OCF_RESKEY_monitor_request $OCF_RESKEY_monitor_ip`"

I think that you really need to save the output of the above
command:

local output
output=`$HOST $OCF_RESKEY_monitor_request $OCF_RESKEY_monitor_ip`
if [ $? -ne 0 ] || ! echo $output | grep -q ...; then
...

> return $OCF_ERR_GENERIC
> fi
>
> return $OCF_SUCCESS
> }
>
> #
> # Reload
> #
>
> named_reload() {
> $RNDC reload >/dev/null 2>&1 || return $OCF_ERR_GENERIC

Perhaps to let at least stderr through.

>
> return $OCF_SUCCESS
> }
>
> #
> # Start
> #
>
> named_start() {
> local ROOT_DIR_OPT
> local PID

Usually local variables are lower case, so that global which are
typically upper case stand out.

> ROOT_DIR_OPT=""
> named_status && return $OCF_SUCCESS
>
> # Remove pidfile if exists
> rm -f ${OCF_RESKEY_named_pidfile}
>
> if [ -n "${OCF_RESKEY_named_rootdir}" -a "x${OCF_RESKEY_named_rootdir}" != "x/" ]

Why '/' at the end makes a difference?

> then
> ROOT_DIR_OPT="-t ${OCF_RESKEY_named_rootdir}"
> [ -s /etc/localtime ] && cp -fp /etc/localtime ${OCF_RESKEY_named_rootdir}/etc/localtime
> fi
>
> if ! ${OCF_RESKEY_named} -u ${OCF_RESKEY_named_user} $ROOT_DIR_OPT ${OCF_RESKEY_named_options}
> then
> ocf_log err "named failed to start."
> return $OCF_ERR_GENERIC
> fi
>
>
> PID=`$PIDOF -o %PPID ${OCF_RESKEY_named}`

Hmm, pidof is part of sysvinit-utils (or similar). Is that always
necessarily installed? (I can see that there are two more RA
using it, but still.)

> if [ -n "$PID" ]; then
> if [ ! -e ${OCF_RESKEY_named_pidfile} ]; then
> echo $PID > ${OCF_RESKEY_named_pidfile}
> fi
> else
> ocf_log err "named failed to start. Probably error in configuration."
> return $OCF_ERR_GENERIC
> fi
>
>
> while :
> do
> named_monitor && break
> sleep 1
> ocf_log debug "named hasn't started yet."
> done
> ocf_log debug "named has started."

I guess that you can use the info severity here. Starts don't
happen that often.

> return $OCF_SUCCESS
> }
>
> #
> # Stop
> #
>
> named_stop () {
> local timeout
>
> named_status || return $OCF_SUCCESS
>
> if ! $RNDC stop >/dev/null 2>&1; then

Again, let lrmd log stderr.

> kill `cat ${OCF_RESKEY_named_pidfile}`
> fi
>
> timeout=0
> while named_status ; do
> if [ $timeout -ge ${OCF_RESKEY_named_stop_timeout} ]; then
> break
> else
> sleep 1
> timeout=$((timeout++))
> fi
> done
>
> #If still up
> named_status 2>&1 && (ocf_log err "named is still up! Killing"; \
> kill -9 `cat ${OCF_RESKEY_named_pidfile}`)
>
> rm -f ${OCF_RESKEY_named_pidfile}
> return $OCF_SUCCESS
> }
>
>
> # Main part
>
> [ $# -ne 1 ] && (usage; exit $OCF_ERR_GENERIC)

In bash, () creates a subprocess, so exit (I think so) won't work
here. Better use {}.

>
> case "$1" in
> methods) named_methods
> exit $?;;
>
> meta-data) named_meta_data
> exit $OCF_SUCCESS;;
> esac
>
> named_validate_all
> rc=$?
>
> [ "$1" == "validate-all" ] && exit $rc
>
> if [ $rc -ne 0 ]
> then
> case "$1" in
> stop) exit $OCF_SUCCESS;;
> monitor) exit $OCF_NOT_RUNNING;;
> status) exit $OCF_NOT_RUNNING;;
> *) exit $rc;;
> esac
> fi
>
> [ "$EUID" != "0" ] && (ocf_log err "$0 must be run as root"; \
> exit $OCF_ERR_GENERIC)
>
> case "$1" in
> status) if named_status
> then
> ocf_log info "named is up"
> exit $OCF_SUCCESS
> else
> ocf_log info "named is down"
> exit $OCF_NOT_RUNNING
> fi;;
>
> monitor) named_monitor
> exit $?;;
>
> start) named_start
> exit $?;;
>
> stop) named_stop
> exit $?;;
> reload) named_reload
> exit $?;;
> *)
> exit $OCF_ERR_UNIMPLEMENTED;;
> esac
>
> --
> Serge Dubrouski.


> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev [at] lists
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/

_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev [at] lists
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/


sergeyfd at gmail

Sep 6, 2011, 1:52 PM

Post #9 of 12 (1052 views)
Permalink
Re: OCF RA for named [In reply to]

On Thu, Sep 1, 2011 at 6:28 AM, Dejan Muhamedagic <dejan [at] suse> wrote:

> Hi Serge,
>
> On Tue, Jul 12, 2011 at 03:50:36PM -0600, Serge Dubrouski wrote:
> > Hello -
> >
> > I've created an OCF RA for named (BIND) server. There is an existing one
> in
> > redhat directory but I don't like how it does monitoring and I doubt that
> it
> > can work with pacemaker. So please review the attached RA and see if it
> can
> > be included into the project.
>
> Sorry for the delay. The RA looks quite good, some comments
> below.
>
> Cheers,
>
> Dejan
>
> > #!/bin/sh
> > #
> > # Description: Manages a named (Bind) server as an OCF High-Availability
> > # resource
> > #
> > # Authors: Serge Dubrouski (sergeyfd [at] gmail)
> > #
> > # Copyright: 2011 Serge Dubrouski <sergeyfd [at] gmail>
> > #
> > # License: GNU General Public License (GPL)
> > #
> >
> ###############################################################################
> > # Initialization:
> >
> > : ${OCF_FUNCTIONS_DIR=${OCF_ROOT}/lib/heartbeat}
> > . ${OCF_FUNCTIONS_DIR}/ocf-shellfuncs
> >
> > # Used binaries
> > RNDC="/usr/sbin/rndc"
> > HOST="/usr/bin/host"
> > PIDOF="/sbin/pidof"
>
> How about relying on PATH? The RA should have a sane environment
> and these are all standard locations. Packagers may have
> different ideas which may lead to problems.
>

Done.


>
> > #Defaults
> > OCF_RESKEY_named_default="/usr/sbin/named"
> > OCF_RESKEY_named_user_default=named
> > OCF_RESKEY_named_config_default="/etc/named.conf"
> > OCF_RESKEY_named_pidfile_default="/var/run/named/named.pid"
> > OCF_RESKEY_named_rootdir_default=""
> > OCF_RESKEY_named_options_default=""
> > OCF_RESKEY_named_keytab_file_default=""
> > OCF_RESKEY_named_stop_timeout_default=25
> > OCF_RESKEY_monitor_request_default="localhost"
> > OCF_RESKEY_monitor_response_default="127.0.0.1"
> > OCF_RESKEY_monitor_ip_default="127.0.0.1"
> >
> > : ${OCF_RESKEY_named=${OCF_RESKEY_named_default}}
> > : ${OCF_RESKEY_named_user=${OCF_RESKEY_named_user_default}}
> > : ${OCF_RESKEY_named_config=${OCF_RESKEY_named_config_default}}
> > : ${OCF_RESKEY_named_pidfile=${OCF_RESKEY_named_pidfile_default}}
> > : ${OCF_RESKEY_named_rootdir=${OCF_RESKEY_named_rootdir_default}}
> > : ${OCF_RESKEY_named_options=${OCF_RESKEY_named_options_default}}
> > : ${OCF_RESKEY_named_keytab_file=${OCF_RESKEY_named_keytab_file_default}}
> > :
> ${OCF_RESKEY_named_stop_timeout=${OCF_RESKEY_named_stop_timeout_default}}
> > : ${OCF_RESKEY_monitor_request=${OCF_RESKEY_monitor_request_default}}
> > : ${OCF_RESKEY_monitor_response=${OCF_RESKEY_monitor_response_default}}
> > : ${OCF_RESKEY_monitor_ip=${OCF_RESKEY_monitor_ip_default}}
> >
> > usage() {
> > cat <<EOF
> > usage: $0
> start|stop|reload|status|monitor|meta-data|validate-all|methods
> >
> > $0 manages named (Bind) server as an HA resource.
> >
> > The 'start' operation starts named server.
> > The 'stop' operation stops named server.
> > The 'reload' operation reload named configuration.
> > The 'status' operation reports whether named is up.
> > The 'monitor' operation reports whether named is running.
> > The 'validate-all' operation reports whether parameters are
> valid.
> > The 'methods' operation reports on the methods $0 supports.
> > EOF
> > return $OCF_ERR_ARGS
> > }
> >
> > named_meta_data() {
> > cat <<EOF
> > <?xml version="1.0"?>
> > <!DOCTYPE resource-agent SYSTEM "ra-api-1.dtd">
> > <resource-agent name="named">
> > <version>1.0</version>
> >
> > <longdesc lang="en">
> > Resource script for named (Bind) server. It manages named as an HA
> resource.
> > </longdesc>
> > <shortdesc lang="en">Manages a named server</shortdesc>
> >
> > <parameters>
> > <parameter name="named" unique="0" required="0">
> > <longdesc lang="en">
> > Path to the named command.
> > </longdesc>
> > <shortdesc lang="en">named</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_default}" />
> > </parameter>
> >
> > <parameter name="named_user" unique="0" required="0">
> > <longdesc lang="en">
> > User that should own named process.
> > </longdesc>
> > <shortdesc lang="en">named_user</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_user_default}" />
> > </parameter>
> >
> > <parameter name="named_config" unique="0" required="0">
> > <longdesc lang="en">
> > Configuration file for named.
> > </longdesc>
> > <shortdesc lang="en">named_config</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_config_default}" />
> > </parameter>
>
> This one should be unique.
>

Done.


>
> > <parameter name="named_pidfile" unique="0" required="0">
> > <longdesc lang="en">
> > PIDFILE file for named.
> > </longdesc>
> > <shortdesc lang="en">named_pidfile</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_pidfile_default}" />
> > </parameter>
>
> This one too.
>

Done.


>
> > <parameter name="named_rootdir" unique="0" required="0">
> > <longdesc lang="en">
> > Directory that named should use for chroot if any.
> > </longdesc>
> > <shortdesc lang="en">named_rootdir</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_rootdir_default}" />
> > </parameter>
>
> This one also? Or do different instances share chroot?
>

Made it unique too.

>
> > <parameter name="named_options" unique="0" required="0">
> > <longdesc lang="en">
> > Options for named process if any.
> > </longdesc>
> > <shortdesc lang="en">named_options</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_options_default}" />
> > </parameter>
> >
> > <parameter name="named_keytab_file" unique="0" required="0">
> > <longdesc lang="en">
> > named service keytab file (for GSS-TSIG).
> > </longdesc>
> > <shortdesc lang="en">named_keytab_file</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_keytab_file_default}"
> />
> > </parameter>
> >
> > <parameter name="named_stop_timeout" unique="0" required="0">
> > <longdesc lang="en">
> > Stop timeout. Named process will be killed if it doesn't stop in a given
> time.
> > </longdesc>
> > <shortdesc lang="en">named_stop_timeout</shortdesc>
> > <content type="string" default="${OCF_RESKEY_named_stop_timeout_default}"
> />
> > </parameter>
>
> This an overkill? Some RA use 2/3 (or so) of the meta timeout
> attribute and then try to kill -9.
>

Got rid of the parameter and implemented that 2/3 of met timeout idea.

>
> > <parameter name="monitor_request" unique="0" required="0">
> > <longdesc lang="en">
> > Request that shall be sent to named for monitoring. Usually an A record
> in DNS.
> > </longdesc>
> > <shortdesc lang="en">monitor_request</shortdesc>
> > <content type="string" default="${OCF_RESKEY_monitor_request_default}" />
> > </parameter>
> >
> > <parameter name="monitor_response" unique="0" required="0">
> > <longdesc lang="en">
> > Expected response from named server.
> > </longdesc>
> > <shortdesc lang="en">monitor_response</shortdesc>
> > <content type="string" default="${OCF_RESKEY_monitor_response_default}"
> />
> > </parameter>
> >
> > <parameter name="monitor_ip" unique="0" required="0">
> > <longdesc lang="en">
> > IP Address where named listens.
> > </longdesc>
> > <shortdesc lang="en">monitor_ip</shortdesc>
> > <content type="string" default="${OCF_RESKEY_monitor_ip_default}" />
> > </parameter>
> > </parameters>
>
> Why not just use localhost? Could there be an instance which
> doesn't listen on the lo interface?
>

Disagree. I usually prefer monitor clustered resources through VIPs they
assigned to. Also localhost wouldn't work with the case of several instances
listening on different interfaces.



>
> > <actions>
> > <action name="start" timeout="60" />
> > <action name="stop" timeout="60" />
> > <action name="reload" timeout="60" />
> > <action name="status" timeout="10" />
> > <action name="monitor" depth="0" timeout="30" interval="30"/>
> > <action name="meta-data" timeout="5" />
> > <action name="validate-all" timeout="5" />
> > <action name="methods" timeout="5" />
> > </actions>
> > </resource-agent>
> >
> > EOF
> > }
> >
> > #
> > # methods: What methods/operations do we support?
> > #
> >
> > named_methods() {
> > cat <<EOF
> > start
> > stop
> > status
> > monitor
> > methods
> > meta-data
> > validate-all
> > EOF
> > }
> >
> > # Validate most critical parameters
> > named_validate_all() {
> > check_binary $OCF_RESKEY_named
> > check_binary $RNDC
> > check_binary $HOST
> >
> > if [ ! -r "$OCF_RESKEY_named_config" ]; then
> > if ocf_is_probe; then
> > ocf_log info "Configuration file $OCF_RESKEY_named_config not
> readable during probe."
> > else
> > ocf_log err "Configuration file $OCF_RESKEY_named_config
> doesn't exist"
> > return $OCF_ERR_INSTALLED
> > fi
> > fi
> >
> > getent passwd $OCF_RESKEY_named_user >/dev/null 2>&1
> > if [ ! $? -eq 0 ]; then
> > ocf_log err "User $OCF_RESKEY_named_user doesn't exist";
> > return $OCF_ERR_INSTALLED;
> > fi
> >
> > if [. -z "$OCF_RESKEY_monitor_request" -o \
> > -z "$OCF_RESKEY_monitor_response" -o \
> > -z "$OCF_RESKEY_monitor_ip" ]; then
> > ocf_log err "Neither monitor_request, monitor_response or
> monitor_ip can be empty"
>
> ocf_log err "Neither monitor_request, monitor_response, nor monitor_ip can
> be empty"
>
> (I guess, not a native speaker.)
>

Even after 10 years of living in the US. Next time will check with my
daughter ;-)

>
> > return $OCF_ERR_CONFIGURED
> > fi
> >
> > return $OCF_SUCCESS
> > }
> >
> > #
> > # named_status. Simple check of the status of named process by pidfile.
> > #
> >
> > named_status () {
> > ocf_pidfile_status ${OCF_RESKEY_named_pidfile} >/dev/null 2>&1
> > return $?
>
> return is superfluous here.
>

Deleted.


>
> > }
> >
> > #
> > # named_monitor. Send a request to named and check response.
> > #
> >
> > named_monitor() {
> > if ! named_status
> > then
> > ocf_log info "named is down"
> > return $OCF_NOT_RUNNING
> > fi
> >
> > if ! $HOST $OCF_RESKEY_monitor_request $OCF_RESKEY_monitor_ip | \
> > grep -q '.* has address '"$OCF_RESKEY_monitor_response" ; then
> > ocf_log err "named didn't answer properly for
> $OCF_RESKEY_monitor_request."
> > ocf_log err "Expected: $OCF_RESKEY_monitor_response."
> > ocf_log err "Got: `$HOST $OCF_RESKEY_monitor_request
> $OCF_RESKEY_monitor_ip`"
>
> I think that you really need to save the output of the above
> command:
>
> local output
> output=`$HOST $OCF_RESKEY_monitor_request $OCF_RESKEY_monitor_ip`
> if [ $? -ne 0 ] || ! echo $output | grep -q ...; then
> ...
>

Done.


>
> > return $OCF_ERR_GENERIC
> > fi
> >
> > return $OCF_SUCCESS
> > }
> >
> > #
> > # Reload
> > #
> >
> > named_reload() {
> > $RNDC reload >/dev/null 2>&1 || return $OCF_ERR_GENERIC
>
> Perhaps to let at least stderr through.
>

Done.


>
> >
> > return $OCF_SUCCESS
> > }
> >
> > #
> > # Start
> > #
> >
> > named_start() {
> > local ROOT_DIR_OPT
> > local PID
>
> Usually local variables are lower case, so that global which are
> typically upper case stand out.
>

Done.


>
> > ROOT_DIR_OPT=""
> > named_status && return $OCF_SUCCESS
> >
> > # Remove pidfile if exists
> > rm -f ${OCF_RESKEY_named_pidfile}
> >
> > if [ -n "${OCF_RESKEY_named_rootdir}" -a
> "x${OCF_RESKEY_named_rootdir}" != "x/" ]
>
> Why '/' at the end makes a difference?
>
> > then
> > ROOT_DIR_OPT="-t ${OCF_RESKEY_named_rootdir}"
> > [ -s /etc/localtime ] && cp -fp /etc/localtime
> ${OCF_RESKEY_named_rootdir}/etc/localtime
> > fi
> >
> > if ! ${OCF_RESKEY_named} -u ${OCF_RESKEY_named_user} $ROOT_DIR_OPT
> ${OCF_RESKEY_named_options}
> > then
> > ocf_log err "named failed to start."
> > return $OCF_ERR_GENERIC
> > fi
> >
> >
> > PID=`$PIDOF -o %PPID ${OCF_RESKEY_named}`
>
> Hmm, pidof is part of sysvinit-utils (or similar). Is that always
> necessarily installed? (I can see that there are two more RA
> using it, but still.)
>

Got rid of pidof and added named_getpid, Actually it's even better since now
it can recognize different instances on the same server.


>
> > if [ -n "$PID" ]; then
> > if [ ! -e ${OCF_RESKEY_named_pidfile} ]; then
> > echo $PID > ${OCF_RESKEY_named_pidfile}
> > fi
> > else
> > ocf_log err "named failed to start. Probably error in
> configuration."
> > return $OCF_ERR_GENERIC
> > fi
> >
> >
> > while :
> > do
> > named_monitor && break
> > sleep 1
> > ocf_log debug "named hasn't started yet."
> > done
> > ocf_log debug "named has started."
>
> I guess that you can use the info severity here. Starts don't
> happen that often.
>

Done.


>
> > return $OCF_SUCCESS
> > }
> >
> > #
> > # Stop
> > #
> >
> > named_stop () {
> > local timeout
> >
> > named_status || return $OCF_SUCCESS
> >
> > if ! $RNDC stop >/dev/null 2>&1; then
>
> Again, let lrmd log stderr.
>

Done.


>
> > kill `cat ${OCF_RESKEY_named_pidfile}`
> > fi
> >
> > timeout=0
> > while named_status ; do
> > if [ $timeout -ge ${OCF_RESKEY_named_stop_timeout} ]; then
> > break
> > else
> > sleep 1
> > timeout=$((timeout++))
> > fi
> > done
> >
> > #If still up
> > named_status 2>&1 && (ocf_log err "named is still up! Killing"; \
> > kill -9 `cat ${OCF_RESKEY_named_pidfile}`)
> >
> > rm -f ${OCF_RESKEY_named_pidfile}
> > return $OCF_SUCCESS
> > }
> >
> >
> > # Main part
> >
> > [ $# -ne 1 ] && (usage; exit $OCF_ERR_GENERIC)
>
> In bash, () creates a subprocess, so exit (I think so) won't work
> here. Better use {}.
>

You are right. Replaced it with standard if/then for better readability.


>
> >
> > case "$1" in
> > methods) named_methods
> > exit $?;;
> >
> > meta-data) named_meta_data
> > exit $OCF_SUCCESS;;
> > esac
> >
> > named_validate_all
> > rc=$?
> >
> > [ "$1" == "validate-all" ] && exit $rc
> >
> > if [ $rc -ne 0 ]
> > then
> > case "$1" in
> > stop) exit $OCF_SUCCESS;;
> > monitor) exit $OCF_NOT_RUNNING;;
> > status) exit $OCF_NOT_RUNNING;;
> > *) exit $rc;;
> > esac
> > fi
> >
> > [ "$EUID" != "0" ] && (ocf_log err "$0 must be run as root"; \
> > exit $OCF_ERR_GENERIC)
> >
> > case "$1" in
> > status) if named_status
> > then
> > ocf_log info "named is up"
> > exit $OCF_SUCCESS
> > else
> > ocf_log info "named is down"
> > exit $OCF_NOT_RUNNING
> > fi;;
> >
> > monitor) named_monitor
> > exit $?;;
> >
> > start) named_start
> > exit $?;;
> >
> > stop) named_stop
> > exit $?;;
> > reload) named_reload
> > exit $?;;
> > *)
> > exit $OCF_ERR_UNIMPLEMENTED;;
> > esac
> >
> > --
> > Serge Dubrouski.
>
>
Thanks for reviewing.


> > _______________________________________________________
> > Linux-HA-Dev: Linux-HA-Dev [at] lists
> > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> > Home Page: http://linux-ha.org/
>
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev [at] lists
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
>



--
Serge Dubrouski.
Attachments: named (11.4 KB)


dejan at suse

Sep 19, 2011, 7:10 AM

Post #10 of 12 (1000 views)
Permalink
Re: OCF RA for named [In reply to]

On Tue, Sep 06, 2011 at 02:52:47PM -0600, Serge Dubrouski wrote:
> On Thu, Sep 1, 2011 at 6:28 AM, Dejan Muhamedagic <dejan [at] suse> wrote:
>
[...]
> > > <parameter name="monitor_ip" unique="0" required="0">
> > > <longdesc lang="en">
> > > IP Address where named listens.
> > > </longdesc>
> > > <shortdesc lang="en">monitor_ip</shortdesc>
> > > <content type="string" default="${OCF_RESKEY_monitor_ip_default}" />
> > > </parameter>
> > > </parameters>
> >
> > Why not just use localhost? Could there be an instance which
> > doesn't listen on the lo interface?
> >
>
> Disagree. I usually prefer monitor clustered resources through VIPs they
> assigned to. Also localhost wouldn't work with the case of several instances
> listening on different interfaces.

OK.

[...]
> > > if [. -z "$OCF_RESKEY_monitor_request" -o \
> > > -z "$OCF_RESKEY_monitor_response" -o \
> > > -z "$OCF_RESKEY_monitor_ip" ]; then
> > > ocf_log err "Neither monitor_request, monitor_response or
> > monitor_ip can be empty"
> >
> > ocf_log err "Neither monitor_request, monitor_response, nor monitor_ip can
> > be empty"
> >
> > (I guess, not a native speaker.)
> >
>
> Even after 10 years of living in the US. Next time will check with my
> daughter ;-)

Actually, I was wrong too. "Neither" can be used just for two
things, not three or more. In this case, it should be:

ocf_log err "None of monitor_request, monitor_response, and monitor_ip can
be empty"

I'll fix that before check-in.

Many thanks for the contribution!

Cheers,

Dejan
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev [at] lists
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/


dejan at suse

Sep 19, 2011, 8:33 AM

Post #11 of 12 (998 views)
Permalink
Re: OCF RA for named [In reply to]

On Mon, Sep 19, 2011 at 04:10:50PM +0200, Dejan Muhamedagic wrote:
> On Tue, Sep 06, 2011 at 02:52:47PM -0600, Serge Dubrouski wrote:
> > On Thu, Sep 1, 2011 at 6:28 AM, Dejan Muhamedagic <dejan [at] suse> wrote:
> >
> [...]
> > > > <parameter name="monitor_ip" unique="0" required="0">
> > > > <longdesc lang="en">
> > > > IP Address where named listens.
> > > > </longdesc>
> > > > <shortdesc lang="en">monitor_ip</shortdesc>
> > > > <content type="string" default="${OCF_RESKEY_monitor_ip_default}" />
> > > > </parameter>
> > > > </parameters>
> > >
> > > Why not just use localhost? Could there be an instance which
> > > doesn't listen on the lo interface?
> > >
> >
> > Disagree. I usually prefer monitor clustered resources through VIPs they
> > assigned to. Also localhost wouldn't work with the case of several instances
> > listening on different interfaces.
>
> OK.
>
> [...]
> > > > if [. -z "$OCF_RESKEY_monitor_request" -o \
> > > > -z "$OCF_RESKEY_monitor_response" -o \
> > > > -z "$OCF_RESKEY_monitor_ip" ]; then
> > > > ocf_log err "Neither monitor_request, monitor_response or
> > > monitor_ip can be empty"
> > >
> > > ocf_log err "Neither monitor_request, monitor_response, nor monitor_ip can
> > > be empty"
> > >
> > > (I guess, not a native speaker.)
> > >
> >
> > Even after 10 years of living in the US. Next time will check with my
> > daughter ;-)
>
> Actually, I was wrong too. "Neither" can be used just for two
> things, not three or more. In this case, it should be:
>
> ocf_log err "None of monitor_request, monitor_response, and monitor_ip can
> be empty"
>
> I'll fix that before check-in.

OT:

Well, it turns out that I wasn't so wrong after all, just need
to remove the comma:

ocf_log err "Neither monitor_request, monitor_response nor monitor_ip can be empty"

But the "None" variety still sounds better to me.

Cheers,

Dejan

> Many thanks for the contribution!
>
> Cheers,
>
> Dejan
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev [at] lists
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
_______________________________________________________
Linux-HA-Dev: Linux-HA-Dev [at] lists
http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
Home Page: http://linux-ha.org/


sergeyfd at gmail

Sep 19, 2011, 6:26 PM

Post #12 of 12 (993 views)
Permalink
Re: OCF RA for named [In reply to]

On Mon, Sep 19, 2011 at 9:33 AM, Dejan Muhamedagic <dejan [at] suse> wrote:

> On Mon, Sep 19, 2011 at 04:10:50PM +0200, Dejan Muhamedagic wrote:
> > On Tue, Sep 06, 2011 at 02:52:47PM -0600, Serge Dubrouski wrote:
> > > On Thu, Sep 1, 2011 at 6:28 AM, Dejan Muhamedagic <dejan [at] suse>
> wrote:
> > >
> > [...]
> > > > > <parameter name="monitor_ip" unique="0" required="0">
> > > > > <longdesc lang="en">
> > > > > IP Address where named listens.
> > > > > </longdesc>
> > > > > <shortdesc lang="en">monitor_ip</shortdesc>
> > > > > <content type="string" default="${OCF_RESKEY_monitor_ip_default}"
> />
> > > > > </parameter>
> > > > > </parameters>
> > > >
> > > > Why not just use localhost? Could there be an instance which
> > > > doesn't listen on the lo interface?
> > > >
> > >
> > > Disagree. I usually prefer monitor clustered resources through VIPs
> they
> > > assigned to. Also localhost wouldn't work with the case of several
> instances
> > > listening on different interfaces.
> >
> > OK.
> >
> > [...]
> > > > > if [. -z "$OCF_RESKEY_monitor_request" -o \
> > > > > -z "$OCF_RESKEY_monitor_response" -o \
> > > > > -z "$OCF_RESKEY_monitor_ip" ]; then
> > > > > ocf_log err "Neither monitor_request, monitor_response or
> > > > monitor_ip can be empty"
> > > >
> > > > ocf_log err "Neither monitor_request, monitor_response, nor
> monitor_ip can
> > > > be empty"
> > > >
> > > > (I guess, not a native speaker.)
> > > >
> > >
> > > Even after 10 years of living in the US. Next time will check with my
> > > daughter ;-)
> >
> > Actually, I was wrong too. "Neither" can be used just for two
> > things, not three or more. In this case, it should be:
> >
> > ocf_log err "None of monitor_request, monitor_response, and monitor_ip
> can
> > be empty"
> >
> > I'll fix that before check-in.
>
> OT:
>
> Well, it turns out that I wasn't so wrong after all, just need
> to remove the comma:
>
> ocf_log err "Neither monitor_request, monitor_response nor monitor_ip can
> be empty"
>
> But the "None" variety still sounds better to me.
>
> Cheers,
>

Thanks.


>
> Dejan
>
> > Many thanks for the contribution!
> >
> > Cheers,
> >
> > Dejan
> > _______________________________________________________
> > Linux-HA-Dev: Linux-HA-Dev [at] lists
> > http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> > Home Page: http://linux-ha.org/
> _______________________________________________________
> Linux-HA-Dev: Linux-HA-Dev [at] lists
> http://lists.linux-ha.org/mailman/listinfo/linux-ha-dev
> Home Page: http://linux-ha.org/
>



--
Serge Dubrouski.

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


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.