Skip to content

Commit

Permalink
Bug #213524. Resource agent for named + patch for stopping applications
Browse files Browse the repository at this point in the history
  • Loading branch information
marxsk committed Nov 6, 2006
1 parent 9612f08 commit 5668b8c
Show file tree
Hide file tree
Showing 4 changed files with 355 additions and 2 deletions.
104 changes: 104 additions & 0 deletions rgmanager/src/resources/named.metadata
@@ -0,0 +1,104 @@
<?xml version="1.0"?>
<resource-agent version="rgmanager 2.0" name="named">
<version>1.0</version>

<longdesc lang="en">
This defines an instance of DNS named server
</longdesc>
<shortdesc lang="en">
Defines an instance of named server
</shortdesc>

<parameters>
<parameter name="name" primary="1">
<longdesc lang="en">
Specifies a service name for logging and other purposes
</longdesc>
<shortdesc lang="en">
Name
</shortdesc>
<content type="string"/>
</parameter>

<parameter name="config_file">
<longdesc lang="en">
Define absolute path to configuration file
</longdesc>
<shortdesc lang="en">
Config File
</shortdesc>
<content type="string" default="/etc/named.conf"/>
</parameter>

<parameter name="named_sdb">
<longdesc lang="en">
Simplified Database Backend
</longdesc>
<shortdesc lang="en">
Simplified Database Backend
</shortdesc>
<content type="boolean" default="0"/>
</parameter>

<parameter name="named_working_dir">
<longdesc lang="en">
Other command-line options for named
</longdesc>
<shortdesc lang="en">
Other command-line options for named
</shortdesc>
<content type="string" default="/var/named" />
</parameter>

<parameter name="named_options">
<longdesc lang="en">
Other command-line options for named
</longdesc>
<shortdesc lang="en">
Other command-line options for named
</shortdesc>
<content type="string" />
</parameter>

<parameter name="shutdown_wait">
<longdesc lang="en">
Wait X seconds for correct end of service shutdown
</longdesc>
<shortdesc lang="en">
Wait X seconds for correct end of service shutdown
</shortdesc>
<content type="number" default="5" />
</parameter>

<parameter name="service_name" inherit="service%name">
<longdesc lang="en">
Inherit the service name. We need to know
the service name in order to determine file
systems and IPs for this service.
</longdesc>
<shortdesc lang="en">
Inherit the service name.
</shortdesc>
<content type="string"/>
</parameter>
</parameters>

<actions>
<action name="start" timeout="0"/>
<action name="stop" timeout="0"/>

<!-- Checks to see if it''s mounted in the right place -->
<action name="status" interval="1m" timeout="10"/>
<action name="monitor" interval="1m" timeout="10"/>

<!-- Checks to see if we can read from the mountpoint -->
<action name="status" depth="10" timeout="30" interval="5m"/>
<action name="monitor" depth="10" timeout="30" interval="5m"/>

<action name="meta-data" timeout="0"/>
<action name="verify-all" timeout="0"/>
</actions>

<special tag="rgmanager">
</special>
</resource-agent>
223 changes: 223 additions & 0 deletions rgmanager/src/resources/named.sh
@@ -0,0 +1,223 @@
#!/bin/bash

#
# Copyright Red Hat, Inc. 2006
#
# 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, 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; see the file COPYING. If not, write to the
# Free Software Foundation, Inc., 675 Mass Ave, Cambridge,
# MA 02139, USA.
#
#
# Author(s):
# Marek Grac (mgrac at redhat.com)
#

export LC_ALL=C
export LANG=C
export PATH=/bin:/sbin:/usr/bin:/usr/sbin

. $(dirname $0)/ocf-shellfuncs
. $(dirname $0)/utils/config-utils.sh
. $(dirname $0)/utils/messages.sh
. $(dirname $0)/utils/ra-skelet.sh

declare NAMED_NAMED=/usr/sbin/named
declare NAMED_pid_file="`generate_name_for_pid_file`"
declare NAMED_conf_dir="`generate_name_for_conf_dir`"
declare NAMED_gen_config_file="$NAMED_conf_dir/named.conf"
declare NAMED_url_list
declare NAMED_parse_config=$(dirname $0)/utils/named-parse-config.pl

verify_all()
{
clog_service_verify $CLOG_INIT

if [ -z "$OCF_RESKEY_name" ]; then
clog_service_verify $CLOG_FAILED "Invalid Name Of Service"
return $OCF_ERR_ARGS
fi

if [ -z "$OCF_RESKEY_service_name" ]; then
clog_service_verify $CLOG_FAILED_NOT_CHILD
return $OCF_ERR_ARGS
fi

if [ -z "$OCF_RESKEY_config_file" ]; then
clog_check_file_exist $CLOG_FAILED_INVALID "$OCF_RESKEY_config_file"
clog_service_verify $CLOG_FAILED
return $OCF_ERR_ARGS
fi

if [ ! -r "$OCF_RESKEY_config_file" ]; then
clog_check_file_exist $CLOG_FAILED_NOT_READABLE $OCF_RESKEY_config_file
clog_service_verify $CLOG_FAILED
return $OCF_ERR_ARGS
fi

clog_service_verify $CLOG_SUCCEED

return 0
}

generate_config_file()
{
declare original_file="$1"
declare generated_file="$2"
declare ip_address="$3"

if [ -f "$generated_file" ]; then
sha1_verify "$generated_file"
if [ $? -ne 0 ]; then
clog_check_sha1 $CLOG_FAILED
return 0
fi
fi

clog_generate_config $CLOG_INIT "$original_file" "$generated_file"

generate_configTemplate "$generated_file" "$1"
cat $original_file | grep -v "^[[:space:]]*listen-on" | \
grep -v "^[[:space:]]*pid-file" | \
grep -v "^[[:space:]]*directory" >> $generated_file

declare tmp_file=`mktemp -t cluster.XXXXXXXXXX`
mv "$generated_file" "$tmp_file"

"$NAMED_parse_config" "$OCF_RESKEY_named_working_dir" "$NAMED_pid_file" "$ip_address" \
< "$tmp_file" > "$generated_file"

rm "$tmp_file"
sha1_addToFile "$generated_file"
clog_generate_config $CLOG_SUCCEED "$original_file" "$generated_file"

return 0;
}

start()
{
declare ccs_fd;
declare ip_list;

clog_service_start $CLOG_INIT

create_pid_directory
create_conf_directory "$NAMED_conf_dir"
check_pid_file "$NAMED_pid_file"

if [ $? -ne 0 ]; then
clog_check_pid $CLOG_FAILED "$NAMED_pid_file"
clog_service_start $CLOG_FAILED
return $OCF_ERR_GENERIC
fi
clog_looking_for $CLOG_INIT "IP Addresses"

ccs_fd=$(ccs_connect);
if [ $? -ne 0 ]; then
clog_looking_for $CLOG_FAILED_CCS
return $OCF_ERR_GENERIC
fi

get_service_ip_keys "$ccs_fd" "$OCF_RESKEY_service_name"
ip_addresses=`build_ip_list "$ccs_fd"`

if [ -z "$ip_addresses" ]; then
clog_looking_for $CLOG_FAILED_NOT_FOUND "IP Addresses"
return $OCF_ERR_GENERIC
fi

clog_looking_for $CLOG_SUCCEED "IP Addresses"

ip_list=`echo $ip_addresses | sed 's/ /;/;s/\([[:digit:]]\)$/\1;/' `

if [ -z "$ip_list" ]; then
clog_looking_for $CLOG_FAILED_NOT_FOUND "IP Addresses"
return $OCF_ERR_GENERIC
fi

generate_config_file "$OCF_RESKEY_config_file" "$NAMED_gen_config_file" "$ip_list"

$NAMED_NAMED -c "$NAMED_gen_config_file" $OCF_RESKEY_named_options

if [ $? -ne 0 ]; then
clog_service_start $CLOG_FAILED
return $OCF_ERR_GENERIC
fi

clog_service_start $CLOG_SUCCEED

return 0;
}

stop()
{
clog_service_stop $CLOG_INIT

stop_generic "$NAMED_pid_file" "$OCF_RESKEY_shutdown_wait"

if [ $? -ne 0 ]; then
clog_service_stop $CLOG_FAILED
return $OCF_ERR_GENERIC
fi

clog_service_stop $CLOG_SUCCEED
return 0;
}

status()
{
clog_service_status $CLOG_INIT

status_check_pid "$NAMED_pid_file"
if [ $? -ne 0 ]; then
clog_service_status $CLOG_FAILED "$NAMED_pid_file"
return $OCF_ERR_GENERIC
fi

clog_service_status $CLOG_SUCCEED
return 0
}

case $1 in
meta-data)
cat `echo $0 | sed 's/^\(.*\)\.sh$/\1.metadata/'`
exit 0
;;
verify-all)
verify_all
exit $?
;;
start)
verify_all && start
exit $?
;;
stop)
verify_all && stop
exit $?
;;
status|monitor)
verify_all
status
exit $?
;;
restart)
verify_all
stop
start
exit $?
;;
*)
echo "Usage: $0 {start|stop|status|monitor|restart|meta-data|verify-all}"
exit $OCF_ERR_GENERIC
;;
esac
26 changes: 26 additions & 0 deletions rgmanager/src/resources/utils/named-parse-config.pl
@@ -0,0 +1,26 @@
#!/usr/bin/perl -w

##
## Parse named.conf (from STDIN) and add options from cluster.conf
##
## ./named-parse-config.pl "directory" "pid-file" "listen-on"
##
use strict;

if ($#ARGV < 2) {
die ("Not enough arguments");
}

while (my $line = <STDIN>) {
chomp($line);
$line =~ s/(.*?)\s*$/$1/;
if ($line =~ /^\s*options\s+\{/) {
print $line, "\n";
print "\tdirectory \"$ARGV[0]\";\n";
print "\tpid-file \"$ARGV[1]\";\n";
print "\tlisten-on { $ARGV[2] };\n";
} else {
print $line, "\n";
}
}

4 changes: 2 additions & 2 deletions rgmanager/src/resources/utils/ra-skelet.sh
Expand Up @@ -62,10 +62,10 @@ stop_generic()
read pid < "$pid_file"

# @todo: PID is not running -> error?
if [ ! -d "/proc/$pid_file" ]; then
if [ ! -d "/proc/$pid" ]; then
return 0;
fi

kill -TERM "$pid"

if [ $? -ne 0 ]; then
Expand Down

0 comments on commit 5668b8c

Please sign in to comment.