#!/usr/bin/ksh93
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
# 61haes_r714 src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_was_AE_CE_lsserver.sh 1.1 
#  
# Licensed Materials - Property of IBM 
#  
# COPYRIGHT International Business Machines Corp. 2010 
# All Rights Reserved 
#  
# US Government Users Restricted Rights - Use, duplication or 
# disclosure restricted by GSA ADP Schedule Contract with IBM Corp. 
#  
# IBM_PROLOG_END_TAG 
# @(#)19	1.1  src/43haes/usr/sbin/cluster/sa/filenet/sbin/cl_filenet_was_AE_CE_lsserver.sh, hacmp, 61haes_r714 11/28/11 15:26:32
#############################################################################
##
## Name:    cl_filenet_was_AE_CE_lsserver
##
## Description:    Discovers and Lists the WebSphere Application Servers 
##                 or Deployment Managers that may be available to 
##                 Application Discovery 
##
## Arguments:
##        -i       Node list to search
##        -n       Return Application Servers
##        -d       Return Deployment Managers
##
## Output:         Appropriate SMIT output for select panel and creates 
##                 temporary discovery file for later use.
##
#############################################################################





#############################################################################
##
## Name:    configure_CE_AE_resources
##
## Description:    Modify Content Engine RG after updating Application
##		   Engine resources and vice versa, if Application
##		   Engine and Content Engine are deployed under same
##		   app server.
##
##		   Remove Application Engine start-after Process Engine
##                 dependency, if any, as CE and AE are under single RG.
##
## Arguments:
##                 component ID
##
## Output:
##                 Info message of one RG for both AE and CE.
##
#############################################################################

function configure_CE_AE_resources
{
	[[ "$VERBOSE_LOGGING" == "high" ]] && set -x

	typeset RESOURCE_GROUP
	typeset NAME
	typeset VG=""
	typeset VG_LIST=""
	typeset APP_ID
	typeset CONFIG_COMPONENT_ID=$1

	[[ "$CONFIG_COMPONENT_ID" == "FILENET_CONTENT_ENGINE" ]] && {
		NAME=CONTENT_ENGINE_RESOURCE_GROUP
	}

	[[ "$CONFIG_COMPONENT_ID" == "FILENET_APPLICATION_ENGINE" ]] && {
		NAME=APPLICATION_ENGINE_RESOURCE_GROUP
	}

	[[ "$COMP_ID" == "FILENET_APPLICATION_ENGINE" ]] && {
                [[ -n "$AE_INSTALL_PATH" ]] && {
                        VG=$(KLIB_AIX_get_vg_by_path $AE_INSTALL_PATH)
                }
        }

        [[ "$COMP_ID" == "FILENET_CONTENT_ENGINE" ]] && {
                [[ -n "$CE_INSTALL_PATH" ]] && {
                        VG=$(KLIB_AIX_get_vg_by_path $CE_INSTALL_PATH)
                }
        }

	APP_ID=$(KLIB_AIX_ODM_get_odm_fields "name=COMPONENT_ID and value=$CONFIG_COMPONENT_ID" HACMPsa_metadata application_id)
	RESOURCE_GROUP=$(KLIB_AIX_ODM_get_odm_fields "application_id=$APP_ID and name=$NAME" HACMPsa_metadata value)

	#
        # Update the resources to the resource group
        #
        [[ -n "$VG" ]] && {
                set -a
                eval $(clvt query resource_group $RESOURCE_GROUP)
                set +a

                [[ -n "$VG" ]] && {
                        KLIB_UTIL_LIST_unique_key_list VG_LIST "$VOLUME_GROUP $VG"
                }

                clvt modify resource_group $RESOURCE_GROUP \
                VOLUME_GROUP="$VG_LIST" APPLICATIONS="$APPLICATIONS" \
                SERVICE_LABEL="$SERVICE_LABEL" FORCED_VARYON='false' \
                VG_AUTO_IMPORT='true' FSCHECK_TOOL='fsck' \
                RECOVERY_METHOD='parallel' FS_BEFORE_IPADDR='false' || {
                        dspmsg -s $IMPORT_MSGSET $WASSACAT 200 "ERROR: Failed \
updating HACMP Resource Group $RESOURCE_GROUP.\n" $RESOURCE_GROUP
                        exit 1
                }
        }

	#
	# Modify the HACMPsa_metadata to reflect AE and CE are under
	# one RG
	#
	KLIB_SA_delete_metadata $APP_ID $NAME
	claddsaapp -a $APP_ID FILENET_AE_CE_RESOURCE_GROUP=$RESOURCE_GROUP
	#
	# Remove the dependency; application engine RG start after process engine
	# RG, if any, as AE and CE are under single RG.
	#
	[[ "$CONFIG_COMPONENT_ID" == "FILENET_APPLICATION_ENGINE" ]] && {
		PE_RG=$(clodmget -q "name=PROCESS_ENGINE_RESOURCE_GROUP" -f value -d "=" HACMPsa_metadata)
		PE_RG=${PE_RG//\"/}
		[[ -n "$PE_RG" ]] && {
			clrgdependency -t 'START_AFTER' -d -p "$PE_RG" -c "$RESOURCE_GROUP"
			clrgdependency -t 'START_AFTER' -a -p "$RESOURCE_GROUP" -c "$PE_RG"
		}
	}
}


# Load the common functions, logmsg, dbgmsg, errmsg, abort
. /usr/es/lib/ksh93/common_functions.ksh93
PROGNAME=$(basename ${0})
PATH="$($(dirname ${0})/../../../utilities/cl_get_path all)"
PATH=$PATH:/usr/bin:/etc:/usr/sbin:/usr/ucb:/sbin:/usr/es/sbin/cluster/sa/sbin
FPATH_BASE=/usr/es/lib/ksh93
FPATH=$FPATH_BASE/hacmp:$FPATH_BASE/sa:$FPATH_BASE/aix:$FPATH_BASE/aix/odm:$FPATH_BASE/util/list
export PATH FPATH

umask -S u=rw,g=,o=

[[ "$VERBOSE_LOGGING" == "high" ]] && set -x

WASSA_HOME="/usr/es/sbin/cluster/sa/was"
WASSA_ETC_PATH="$WASSA_HOME/etc"
WASSA_SBIN_DIR="$WASSA_HOME/sbin"
WASSA_DISC_FILE="$WASSA_ETC_PATH/was.disc"

WAS_MIN_VERSION="6.0"
WAS_MAX_VERSION="6.1"

KLIB_MSGCATALOG="wassa.cat"
KLIB_MSGSET=7

TYPE=""


# Get the arguments.
if set -- $(getopt i:C:nd $* 2>&1); then
    while [ $# != 0 ]; do
        case "$1" in
            -i)
                NODES=$2
                shift
                ;;

            -d)
                # lists only  Websphere Application Server node managed by HACMP
                TYPE="DEPLOYMENT_MANAGER"
                ;;

            -n)
                # lists only Websphere Application Server node not managed by HACMP
                TYPE="APPLICATION_SERVER"
                ;;

            -C)
		# component id
		COMP_ID=$2
		shift
		;;

            --)
                shift
                break
                ;;
        esac
    shift
    done
fi

if [[ -z $TYPE ]] ; then
    exit 0
fi

header="TRUE"

# Check that the WebSphere Smart Assist etc directory exists.
if [[ ! -d "$WASSA_ETC_PATH" ]] ; then
    mkdir -p "$WASSA_ETC_PATH"
fi

# Remove old discovery file
rm -f $WASSA_DISC_FILE

DATE=$(date +"%m/%d/%y %H:%M:%S")

echo "#" >> $WASSA_DISC_FILE
echo "# This ksh93 source file was generated on $DATE" >> $WASSA_DISC_FILE
echo "# Do NOT alter the content of this file" >> $WASSA_DISC_FILE
echo "#" >> $WASSA_DISC_FILE
echo "" >> $WASSA_DISC_FILE

# display only components not managed by HACMP
if [[ -n $NODES ]]; then
    NODES=$(echo "$NODES" | tr ',' ' ')
    for node in $NODES ; do
        cl_rsh $node $WASSA_SBIN_DIR/cl_wasdiscserver -q 2>/dev/null | while read line; do
            echo $line | IFS=: read component install_count install_path version install_vgs install_pvids profile_count profile_name profile_path ismanaged wascell wasnode servername typename endpoint_host

            # Make sure values were returned.  Sometimes with bad installs, these values can be missing.
            if [[ -z $version || -z $profile_count || -z $profile_name || -z $profile_path || -z $typename ]] ; then
                continue
            fi
    
            # Check for version
            if (( $version < $WAS_MIN_VERSION || $version > $WAS_MAX_VERSION )) ; then
                continue
            fi

            # Check for multiple profiles
            if (( $profile_count > 1 )); then
                continue
            fi

            # Check for volume groups
            if [[ -z $install_vgs ]] ; then
                continue
            fi

            KLIB_HACMP_are_pvids_shared $install_pvids
            if (( $? != 0 )); then
                continue
            fi

            if [[ $TYPE == "APPLICATION_SERVER" ]] ; then
                # Check for federated
                if (( $ismanaged != 0 )); then
                    continue
                fi

                # Check for APPLICATION_SERVER
                if [[ $typename != "APPLICATION_SERVER" ]] ; then
                    continue
                fi
                
		APPLICATION_NAME=$(clodmget -q "name=WAS_CELL_NAME \
and value=$wascell" -f application_id -d "=" HACMPsa_metadata)
		APPLICATION_NAME=${APPLICATION_NAME//\"/}

		CONFIG_COMP_ID=""
		[[ -n "$APPLICATION_NAME" ]] && {
                        # Look for already configured instances
                        CONFIG_COMP_ID=$(clodmget -q \
"application_id=$APPLICATION_NAME and name=COMPONENT_ID" -f value -d "=" HACMPsa_metadata)
			CONFIG_COMP_ID=${CONFIG_COMP_ID//\"/}
                }

		[[ -z "$APPLICATION_NAME" ]] && {
                        APPLICATION_NAME="WAS_NODE_${wascell}_${wasnode}"
                }

		[[ -n "$CONFIG_COMP_ID" ]] && {
			if [[ $CONFIG_COMP_ID == $COMP_ID ]]; then
				continue;
			else
				#
				# Check whether the WAS (app server) has been configured
				# using WAS smart assist.
				# RG entry would be added to HACMPsa_metadata with
				# "name = RESOURCE_GROUP"
				#
				RG=$(clodmget -q "application_id=$APPLICATION_NAME \
and name=RESOURCE_GROUP" -f value -d "=" HACMPsa_metadata)
				RG=${RG//\"/}
				[[ -n "$RG" ]] && {
					continue
				}
				#
				# Check whether the existing RG have resources for both
				# application engine and content engine
				# If it has then RG entry would be added to HACMPsa_metadata with
				# "name = FILENET_AE_CE_RESOURCE_GROUP"
				#
				RG=$(clodmget -q "application_id=$APPLICATION_NAME \
and name=FILENET_AE_CE_RESOURCE_GROUP" -f value -d "=" HACMPsa_metadata)
				RG=${RG//\"/}
				[[ -z "$RG" ]] && {
					configure_CE_AE_resources $CONFIG_COMP_ID
				}
				continue
			fi
		}

                if [[ "$header" == "TRUE" ]]; then
                    printf "#Cell                                  Node\n"
                    printf "#---------------------------------------------------------------------\n"
                   #printf "         1         2         3         4         5         6         7\n"
                   #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n"
                    header="FALSE"
                fi
                
                printf "%-38s %s\n" ${wascell} ${wasnode}
            fi

            if [[ $TYPE == "DEPLOYMENT_MANAGER" ]] ; then
                # Check for DEPLOYMENT_MANAGER
                if [[ $typename != "DEPLOYMENT_MANAGER" ]] ; then
                    continue
                fi
                
                APPLICATION_NAME="WAS_DM_${wascell}"

                # Look for already configured instances
                clquerysaapp -a $APPLICATION_NAME INSTALL_NODE_NAME > /dev/null 2>&1
                if (( $? == 0 )) ; then
                    continue;
                fi
                
                if [[ "$header" == "TRUE" ]]; then
                    printf "#Cell                                  Server Name\n"
                    printf "#---------------------------------------------------------------------\n"
                   #printf "         1         2         3         4         5         6         7\n"
                   #printf "1234567890123456789012345678901234567890123456789012345678901234567890\n"
                    header="FALSE"
                fi
                
                printf "%-38s %s\n" ${wascell} ${servername}
            fi
            
            echo "unset $APPLICATION_NAME" >> $WASSA_DISC_FILE
            echo "typeset -A $APPLICATION_NAME" >> $WASSA_DISC_FILE
            echo "$APPLICATION_NAME=( \\" >> $WASSA_DISC_FILE
            echo "\t[WAS_CELL_NAME]=\"${wascell}\"" >> $WASSA_DISC_FILE
            echo "\t[WAS_NODE_NAME]=\"${wasnode}\"" >> $WASSA_DISC_FILE
            echo "\t[WAS_SERVER_NAME]=\"${servername}\"" >> $WASSA_DISC_FILE
            echo "\t[WAS_TYPE]=\"${TYPE}\"" >> $WASSA_DISC_FILE
            echo "\t[INSTALL_NODE_NAME]=\"${node}\"" >> $WASSA_DISC_FILE
            echo "\t[PROFILE_NAME]=\"${profile_name}\"" >> $WASSA_DISC_FILE
            echo "\t[INSTALL_PATH]=\"${install_path}\"" >> $WASSA_DISC_FILE
            echo "\t[INSTALL_VGS]=\"${install_vgs}\"" >> $WASSA_DISC_FILE
            echo "\t[VG_PVIDS]=\"${install_pvids}\"" >> $WASSA_DISC_FILE
            echo "\t[ENDPOINT_HOST]=\"${endpoint_host}\"" >> $WASSA_DISC_FILE
            echo "\t[VERSION]=\"${version}\"" >> $WASSA_DISC_FILE
            echo ")" >> $WASSA_DISC_FILE
            echo ""  >> $WASSA_DISC_FILE
        done
    done
    
    echo "" >> $WASSA_DISC_FILE
    
    exit 0
else
    dspmsg -s $KLIB_MSGSET $KLIB_MSGCATALOG 20 "ERROR: There is no %1\$s information in the discovery file.\n" "WebSphere Application Server"
    exit 1  
fi

