#!/usr/bin/ksh93
#  ALTRAN_PROLOG_BEGIN_TAG                                                    
#  This is an automatically generated prolog.                                  
#                                                                              
#  Copyright (C) Altran ACT S.A.S. 2018,2021.  All rights reserved.  
#                                                                              
#  ALTRAN_PROLOG_END_TAG                                                      
#                                                                              
# IBM_PROLOG_BEGIN_TAG 
# This is an automatically generated prolog. 
#  
# 61haes_r714 src/43haes/usr/sbin/cluster/sa/dns/sbin/cl_dns_query.sh 1.1 
#  
# Licensed Materials - Property of IBM 
#  
# COPYRIGHT International Business Machines Corp. 2010,2011 
# 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
# @(#)  7d4c34b 43haes/usr/sbin/cluster/sa/dns/sbin/cl_dns_query.sh, 726, 2147A_aha726, Feb 05 2021 09:50 PM
############################################################################
#
# Name:		cl_dns_query
#
# Description:	Performs application discovery query on the local node
#
# Arguments:	N/A
#
# Returns:		N/A
#
#############################################################################

. /usr/es/lib/ksh93/func_include

############################################################################
#
# Name:		isPrimaryNode
#
# Description: 	Finds out the Node is primary or not
#
# Arguments:	N/A
#
# Returns:	0: If named daemon active
#		1: If named daemon not active
#
#############################################################################
function isPrimaryNode
{
	[[ "VERBOSE_LOGGING" == "high" ]] && set -x

	LC_ALL=C /usr/bin/lssrc -s named | grep -iw active > /dev/null 2>&1
	(( $? == 0 )) && return 0

	return 1
}

############################################################################
#
# Name:		dns_discover
#
# Description:	Performs DNS discovery query on the local node
#
# Arguments:	N/A
#
# Returns:	N/A
#
#############################################################################
function dns_discover
{
	[[ "VERBOSE_LOGGING" == "high" ]] && set -x

	typeset -i installed=1

	#
	: For DNS, the required fileset is
	: bos.net.tcp.server
	#
	/usr/bin/lslpp -l bos.net.tcp.server > /dev/null 2>&1
	(( $? != 0 )) && {
		installed=0
	}

	print -n $(dspmsg -s 1 dnssa.cat 1 "DNS Smart Assist")
	print -n ":DNS:"
	print -n $(dspmsg -s 1 dnssa.cat 2 "DNS")
	print -n ":DNS:"
	echo "$installed"
}

#############################################################################
# Global Variables:
#############################################################################

FPATH=/usr/es/lib/ksh93/aix:/usr/es/lib/ksh93/hacmp/:/usr/es/lib/ksh93/util/:/usr/es/lib/ksh93/util/list
PATH=$PATH:/usr/es/sbin/cluster/sa/sbin/:/usr/es/sbin/cluster/utilities/

LOCALNODENAME=$(get_local_nodename 2>/dev/null)

#############################################################################
# Main:
#############################################################################

typeset option nodes ACTION COMPONENT
while getopts q:PDdn: option
do
	case $option in
		n)
			#
			: List of input nodes
			#
			nodes=$OPTARG
			nodes=${nodes//:/ }
			nodes=${nodes//,/ }
			;;
		q)	#
			: Perform a query for a modify screen
			#
			application_id=$OPTARG
			ACTION=query
			;;
		D)
			#
			: Run discovery
			#
			ACTION=discover
			;;
		P)
			#
			: Check the primary node
			#
			typeset ret_val
			isPrimaryNode
			ret_val=$?
			exit $ret_val
			;;
		d)
			#
			: configuration assist discovery
			#
			dns_discover
			exit 0
			;;
		*)
			;;
	esac
done


[[ "$ACTION" == "discover" ]] && {
	echo "#primary:takeover:application_name"
	
	#
	: Check the primary node
	#
	typeset primary_node
	for node in $nodes; do
		if [[ "$node" == "$LOCALNODENAME" ]]; then
			isPrimaryNode
		else
			cl_rsh $node "/usr/es/sbin/cluster/sa/dns/sbin/cl_dns_query -P" 2>/dev/null
		fi
		[[ $? == 0 ]] && {
			primary_node=$node
			break
		}
	done

	echo "$primary_node::DNS_Application_High_Availability"
	exit 0
}

[[ "$ACTION" == "query" ]] && {
	echo "#primary:takeover:dns_config_file:service_ip:netmask_prefix_len:network"
	RESOURCE_GROUP=$(clodmget -q sa_key=$application_id -f group -d "=" HACMPgroup)

	#
	: remove quotes
	#
	RESOURCE_GROUP=${RESOURCE_GROUP//\"/}

	[[ -z $RESOURCE_GROUP ]] && exit 1

	set -a
	eval $(LC_ALL=C clvt query resource_group $RESOURCE_GROUP | grep SERVICE_LABEL)
	eval $(LC_ALL=C clquerysaapp -a $application_id | grep DNS_CONFIG_FILE)
	set +a

	[[ -n $RESOURCE_GROUP ]] && {
		NODES=$(clvt query resource_group $RESOURCE_GROUP | grep -w NODES | awk -F'=' '{ print $2 }')
		NODES=${NODES//\"/}
		echo $NODES | read PRIMARY TAKEOVER
	}

	PREFIX_LEN=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 13)
	NETWORK=$(cl_harvestIP_scripts -u $SERVICE_LABEL | tail -1 | cut -d ":" -f 3)

	echo $PRIMARY:$TAKEOVER:$DNS_CONFIG_FILE:$SERVICE_LABEL:$PREFIX_LEN:$NETWORK
	exit 0
}
