diff --git a/rgmanager/src/resources/apache.metadata b/rgmanager/src/resources/apache.metadata index 93d5fd834..e747d1667 100644 --- a/rgmanager/src/resources/apache.metadata +++ b/rgmanager/src/resources/apache.metadata @@ -1,96 +1,106 @@ 1.0 This defines an instance of Apache web server Defines an Apache web server Define a name for use in <IfDefine name> directive. Name + + + Define the full path to the httpd binary. + + + httpd binary + + + + Define an alternate initial ServerRoot Initial ServerRoot Define an alternate ServerConfigFile Initial ServerConfigFile Other command-line options for httpd Other command-line options for httpd Wait X seconds for correct end of service shutdown Wait X seconds for correct end of service shutdown Inherit the service name. We need to know the service name in order to determine file systems and IPs for this service. Inherit the service name. diff --git a/rgmanager/src/resources/apache.sh b/rgmanager/src/resources/apache.sh index a42878054..2230ca8a3 100755 --- a/rgmanager/src/resources/apache.sh +++ b/rgmanager/src/resources/apache.sh @@ -1,290 +1,298 @@ #!/bin/bash # # 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 -if [ -x /usr/sbin/httpd ]; then - declare APACHE_HTTPD=/usr/sbin/httpd -elif [ -x /usr/sbin/apache2 ]; then - declare APACHE_HTTPD=/usr/sbin/apache2 +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