summaryrefslogtreecommitdiffstats
path: root/rgmanager/src/resources/apache.sh.in
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--rgmanager/src/resources/apache.sh.in298
1 files changed, 298 insertions, 0 deletions
diff --git a/rgmanager/src/resources/apache.sh.in b/rgmanager/src/resources/apache.sh.in
new file mode 100644
index 0000000..6c02183
--- /dev/null
+++ b/rgmanager/src/resources/apache.sh.in
@@ -0,0 +1,298 @@
+#!@BASH_SHELL@
+
+#
+# Copyright (C) 1997-2003 Sistina Software, Inc. All rights reserved.
+# Copyright (C) 2004-2011 Red Hat, Inc. All rights reserved.
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+
+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
+
+APACHE_HTTPD=$OCF_RESKEY_httpd
+if [ -z "$APACHE_HTTPD" ]; then
+ if [ -x /usr/sbin/httpd ]; then
+ declare APACHE_HTTPD=/usr/sbin/httpd
+ elif [ -x /usr/sbin/apache2 ]; then
+ declare APACHE_HTTPD=/usr/sbin/apache2
+ fi
+fi
+declare APACHE_serverConfigFile
+declare APACHE_pid_file="`generate_name_for_pid_file`"
+declare APACHE_conf_dir="`generate_name_for_conf_dir`"
+declare APACHE_genConfig="$APACHE_conf_dir/httpd.conf"
+
+declare APACHE_parseConfig=$(dirname $0)/utils/httpd-parse-config.pl
+
+apache_serverConfigFile()
+{
+ if $(echo $OCF_RESKEY_config_file | grep -q "^/"); then
+ APACHE_serverConfigFile="$OCF_RESKEY_config_file"
+ else
+ APACHE_serverConfigFile="$OCF_RESKEY_server_root/$OCF_RESKEY_config_file"
+ fi
+
+ return;
+}
+
+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 [ -n "$OCF_RESKEY_httpd" ] && ! [ -e $OCF_RESKEY_httpd ]; then
+ clog_service_verify $CLOG_FAILED "Invalid httpd binary, $OCF_RESKEY_http does not exist"
+ 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_server_root" ]; then
+ clog_service_verify $CLOG_FAILED "Invalid ServerRoot"
+ return $OCF_ERR_ARGS
+ fi
+
+ if [ ! -d "$OCF_RESKEY_server_root" ]; then
+ clog_service_verify $CLOG_FAILED "ServerRoot Directory Is Missing"
+ return $OCF_ERR_ARGS
+ fi
+
+ if [ -z "$OCF_RESKEY_config_file" ]; then
+ clog_check_file_exist $CLOG_FAILED_INVALID "$OCF_RESKEY_config_file"
+ return $OCF_ERR_ARGS
+ fi
+
+ if [ ! -r "$APACHE_serverConfigFile" ]; then
+ clog_check_file_exist $CLOG_FAILED_NOT_READABLE "$APACHE_serverConfigFile"
+ return $OCF_ERR_ARGS
+ fi
+
+ if [ -z "$APACHE_pid_file" ]; then
+ clog_service_verify $CLOG_FAILED "Invalid name of PID file"
+ return $OCF_ERR_ARGS
+ fi
+
+ clog_check_syntax $CLOG_INIT "$APACHE_serverConfigFile"
+
+ "$APACHE_HTTPD" -t \
+ -D"$OCF_RESKEY_name" \
+ -d "$OCF_RESKEY_server_root" \
+ -f "$APACHE_serverConfigFile" \
+ $OCF_RESKEY_httpd_options &> /dev/null
+
+ if [ $? -ne 0 ]; then
+ clog_check_syntax $CLOG_FAILED "$APACHE_serverConfigFile"
+ return $OCF_ERR_GENERIC
+ fi
+
+ clog_check_syntax $CLOG_SUCCEED "$APACHE_serverConfigFile"
+
+ return 0
+}
+
+generate_configFile()
+{
+ declare originalConfigFile=$1;
+ declare generatedConfigFile=$2;
+ declare ip_addresses=$3;
+
+ if [ -f "$generatedConfigFile" ]; then
+ sha1_verify "$generatedConfigFile"
+ if [ $? -ne 0 ]; then
+ clog_check_sha1 $CLOG_FAILED
+ return 0
+ fi
+ fi
+
+ clog_generate_config $CLOG_INIT "$originalConfigFile" "$generatedConfigFile"
+
+ generate_configTemplate "$generatedConfigFile" "$1"
+ cat >> "$generatedConfigFile" << EOT
+# From a cluster perspective, the key fields are:
+# Listen - must be set to service floating IP address.
+# ServerRoot - path to the ServerRoot (initial value is set in service conf)
+#
+
+EOT
+
+ IFS_old="$IFS"
+ IFS=$'\n'
+ for i in `"$APACHE_parseConfig" -D"$OCF_RESKEY_name" < "$originalConfigFile" | grep -P '(^Listen)|(^Port)' `; do
+ port=`echo $i | sed 's/^Listen \(.*\)/\1/;s/^Port \(.*\)/\1/'`;
+ testcond=`echo $port|grep :`
+ if [ $testcond ]; then
+ port=`echo $port|awk -F : '{print $2}'`
+ fi
+ IFS=$' ';
+ for z in $ip_addresses; do
+ if [ "${z//:/}" != "$z" ]; then
+ echo "Listen [$z]:$port" >> "$generatedConfigFile";
+ else
+ echo "Listen $z:$port" >> "$generatedConfigFile";
+ fi
+ done
+ IFS=$'\n';
+ done;
+ IFS="$IFS_old"
+
+ echo "PidFile \"$APACHE_pid_file\"" >> "$generatedConfigFile";
+ echo >> "$generatedConfigFile"
+
+ cat "$originalConfigFile" | sed 's/^Listen/### Listen/;s/^Port/### Port/;s/^PidFile/### PidFile/' | \
+ "$APACHE_parseConfig" -D"$OCF_RESKEY_name" >> "$generatedConfigFile"
+
+ sha1_addToFile "$generatedConfigFile"
+ clog_generate_config $CLOG_SUCCEED "$originalConfigFile" "$generatedConfigFile"
+}
+
+start()
+{
+ if status; then
+ ocf_log info "Starting Service $OCF_RESOURCE_INSTANCE > Already running"
+ return $OCF_SUCCESS
+ fi
+
+ declare ip_addresses
+
+ clog_service_start $CLOG_INIT
+
+ create_pid_directory
+ create_conf_directory "$APACHE_conf_dir"
+ check_pid_file "$APACHE_pid_file"
+
+ if [ $? -ne 0 ]; then
+ clog_check_pid $CLOG_FAILED "$APACHE_pid_file"
+ clog_service_start $CLOG_FAILED
+ return $OCF_ERR_GENERIC
+ fi
+
+ clog_looking_for $CLOG_INIT "IP Addresses"
+
+ get_service_ip_keys "$OCF_RESKEY_service_name"
+ ip_addresses=`build_ip_list`
+
+ 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"
+
+ generate_configFile "$APACHE_serverConfigFile" "$APACHE_genConfig" "$ip_addresses"
+
+ "$APACHE_HTTPD" \
+ "-D$OCF_RESKEY_name" \
+ -d "$OCF_RESKEY_server_root" \
+ -f "$APACHE_genConfig" \
+ $OCF_RESKEY_httpd_options \
+ -k start
+
+ if [ $? -ne 0 ]; then
+ clog_service_start $CLOG_FAILED
+ return $OCF_ERR_GENERIC
+ else
+ clog_service_start $CLOG_SUCCEED
+ fi
+
+ return 0;
+}
+
+stop()
+{
+ clog_service_stop $CLOG_INIT
+
+ stop_generic "$APACHE_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 "$APACHE_pid_file"
+ case $? in
+ $OCF_NOT_RUNNING)
+ clog_service_status $CLOG_FAILED "$APACHE_pid_file"
+ return $OCF_NOT_RUNNING
+ ;;
+ 0)
+ clog_service_status $CLOG_SUCCEED
+ exit 0
+ ;;
+ *)
+ clog_service_status $CLOG_FAILED "$APACHE_pid_file"
+ return $OCF_ERR_GENERIC
+ ;;
+ esac
+}
+
+if [ "$1" != "meta-data" ]; then
+ apache_serverConfigFile
+fi;
+
+case $1 in
+ meta-data)
+ cat `echo $0 | sed 's/^\(.*\)\.sh$/\1.metadata/'`
+ exit 0
+ ;;
+ validate-all|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|validate-all}"
+ exit $OCF_ERR_UNIMPLEMENTED
+ ;;
+esac