#!/bin/sh
#Function:select checklist server
#Writer:liutiansi
#Mail:lliutiansi@gmail.com
#Date:2007-11-03 23:57
source config
source checkonline

list_server_do_tempfile=`list_server_do_tempfile 2>/dev/null` || list_server_do_tempfile=/tmp/server$main_pid
trap "rm -f $list_server_do_tempfile /tmp/add_firewall$main_pid /tmp/add_agent$main_pid /tmp/add_app$main_pid" 0 1 2 5 15
#过滤服务器列表
case $main_value in
	9)
		sqltj=" and TOLOG='N'"
		;;
	16)
		sqltj=" and TOFIREWALL='N'"
		;;			
esac
list_server_do_result=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVER,SERVERIP,SERVERNAME,TOLOG,TOLD,TOFIREWALL from sysadmin.ty_server where SERVERCLASS='$server_class_value'$sqltj order by SERVER;" | awk 'NR>1 {print NR,$0}'|awk '{print $2" "$3"　日志["$5"]　终端["$6"]　防火墙["$7"] "$4}'`
list_server_do_result1=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select SERVICENAME from sysadmin.ty_system_service where ID='$main_value';" | awk 'NR>1 {print NR,$0}'|awk '{print $2}'`"->"
returncode=0
while test $returncode != 1 && test $returncode != 250
do
	exec 3>&1
	dialog --clear --colors --backtitle "$copyright_info" --title "$system_info" \
	--checklist "\n\n$list_server_do_result1选择服务器：" 25 70 14 \
	$list_server_do_result \
	2>$list_server_do_tempfile 

	returncode=$?
	
	#对returncode值进行选择分支;
	case $returncode in
	#0为点击[OK]按钮；
	0)
		server_value=`cat $list_server_do_tempfile`
		export server_value
		#对功能ID进行选择
		
		counter=`echo "$server_value"|awk '{print NF}'`
		Gap=`expr 100 / $counter`
		num=0
		case $main_value in
		
		###########################################安全扫描########################################
		3)
				PCT=$Gap
				(
				while test $PCT -le 100
				do
					num=`expr $num + 1`
					vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'`
					vlist=`echo "$vlist"|awk -F "\"" '{print $2}'`
					
					#通过nmap扫描服务器端口；
					result=`nmap -p $scan_port $vlist|awk 'NR==5,NR==12{print $1"状态："$2}' 2>&1`
					
					#将扫描结果入库；
					result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set SCANPORT='$result' where SERVER='$vlist';" 2>&1`
					if [ -z "$result_up" ]; then
       					result_up_str="[√]ok:$vlist扫描结果$result已成功入库！"
					else
								result_up_str="[×]error:$vlist扫描结果$result入库失败！"
					fi
					echo "XXX"
					echo $PCT
					echo "\n正在扫描$vlist...\n-------------------------------------------------\n$result"
					echo "XXX"
					PCT=`expr $PCT + $Gap`

					#写运行结果到日志；
					logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
					RecordLog
				done
				) |dialog --title "$system_info" --gauge "\n\n\n\n\n　　　　　　　　　　　　　开始扫描......" 18 70 0
				exit
				;;

		##########################################部署代理########################################
		4)
				#调用代理选择对话框；
				add_agent
				
				#取选择代理的标志；
				agent_value=`cat /tmp/add_agent$main_pid`
				#无选择与取消处理；
				if  [ "$agent_value" != "" ]; then
					if [ "$agent_value" == "0" ]; then
						exit
					fi
				else
					exit
				fi
				
				#进度表显示运行状态；
				PCT=$Gap
				(
				while test $PCT -le 100
				do
					num=`expr $num + 1`
					
					#取第num列以空格分隔的字符(服务器)；
					vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'`
					
					#取第2列"号分隔字符串
					vlist=`echo "$vlist"|awk -F "\"" '{print $2}'`					
					
					#循环代理个数；
					for agentkey in $agent_value
 					do
						#取第2列"号分隔字符串
						agentkey=`echo "$agentkey"|awk -F "\"" '{print $2}'`
						
						#获取代理crontab类型；
						AGENTCRONTAB=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "select AGENTCRONTAB from sysadmin.ty_server_agent where AGENTNAME='$agentkey';" | awk 'NR>1 {print NR,$0}'|cut -b 3-100`
						#创建代理目录；
						sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent" 2>&1
						result_check_conn=$?
						
						if [ $result_check_conn -eq 0 ]; then
								
								#传输代理文件到客户端服务器；
								scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyagent/$agentkey root@$vlist:/home/tyagent 1>&3					
								result_do=$?
								if [ $result_do -eq 0 ]; then
										
										#非crontab运行；
										if [ "$AGENTCRONTAB" == "1" ]; then
												sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local | grep $agentkey;  then echo '0'; else echo \"/home/tyagent/$agentkey\" >> /etc/rc.local;fi;" 2>&1
										else								
												sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " crontab -l > /home/tyagent/cron.tmp;if sed -n '1,100p' /home/tyagent/cron.tmp | grep $agentkey;  then echo '0'; else echo \"$AGENTCRONTAB\" >> /home/tyagent/cron.tmp;fi;crontab /home/tyagent/cron.tmp" 2>&1
										fi
										
										#更新服务器字段代理标志；
										result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TO$agentkey='Y' where SERVER='$vlist';" 2>&1`
					  				if [ -z "$result_up" ]; then
          							result_up_str="[√]ok:$vlist部署代理$agentkey成功！"
										else
												result_up_str="[×]error:$vlist部署代理$agentkey成功，但更新数据库失败！($result_up)"
										fi
										
								else
										result_up_str="[×]error:连接远程主机$vlist失败！"	
								fi
								
								echo "XXX"
								echo $PCT
								echo "\n正在$vlist主机部署$agentkey代理。"
								echo "XXX"
						else
								result_up_str="[×]error:$vlist部署代理：$agentkey失败，连接服务器出现问题。"
						fi
						PCT=`expr $PCT + $Gap`	
						sleep 1					
						#写运行结果到日志；
						logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
						RecordLog
						done;
						#循环结束；
					done
				) |dialog --title "$system_info" --gauge "\n\n\n\n\n　　　　　　　　　　　　　准备部署......" 18 70 0
				exit
				;;

		##########################################远程终端########################################
		7)
				PCT=$Gap
				(
				while test $PCT -le 100
				do
					num=`expr $num + 1`
					vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'`
					vlist=`echo "$vlist"|awk -F "\"" '{print $2}'`
					
					#检查远程服务器/etc/iptables.sh有无包含192.168.100.0/24 22关键字来判断是否开通远程ssh；
					result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "if sed -ne '/192.168.100.0/{/22/p}' /etc/iptables.sh|grep 192.168.100.0|grep 22; then echo 1; fi; " 2>&1`
					if [ $? -eq 0 ]; then
					
						if [ -n "$result" ]; then
							TOLD="N"
							TOLDstr="关闭"
							resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "sed -i '/192.168.100.0/{/22/d}' /etc/iptables.sh;/etc/iptables.sh" 2>&1`
						else
							TOLD="Y"
							TOLDstr="打开"
							resultdo=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo \"iptables -A INPUT -s 192.168.100.0/24 -p tcp --dport 22 -j ACCEPT\" >> /etc/iptables.sh;/etc/iptables.sh" 2>&1`
						fi
									
						#更新服务器标志；
						result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLD='$TOLD' where SERVER='$vlist';" 2>&1`
			  		if [ -z "$result_up" ]; then
							result_up_str="[√]ok:$vlist服务器已$TOLDstr远程终端！"
						else
							result_up_str="[×]error:$vlist开/关远程终端，更新数据库失败！"
						fi

						echo "XXX"
						echo $PCT
						echo "\n正在部署$vlist...\n\n$result_up_str"
						echo "XXX"						
					else
						result_up_str="[×]error:$vlist开/关远程终端失败，连接服务器出现问题。"
					fi
					PCT=`expr $PCT + $Gap`
					sleep 1
					
					#写运行结果到日志；
					logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
					RecordLog						
				done
				) |dialog --title "$system_info" --gauge "\n\n\n\n\n　　　　　　　　　　　　　准备部署......" 18 70 0
				exit
				;;
								
		##########################################部署日志########################################
		9)
				PCT=$Gap
				(
				while test $PCT -le 100
				do
					num=`expr $num + 1`
					vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'`
					vlist=`echo "$vlist"|awk -F "\"" '{print $2}'`
					
					#写客户端服务器/etc/syslog.conf文件；
					result=`sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist "echo \"*.notice;cron.none;authpriv.* @syslog.com.cn\" >> /etc/syslog.conf;/etc/init.d/syslog restart" 2>&1`
					result_do=$?
					if [ $result_do -eq 0 ]; then
						#更新服务器标志；
						result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOLOG='Y' where SERVER='$vlist';" 2>&1`
					  if [ -z "$result_up" ]; then
          					result_up_str="[√]ok:$vlist部署日志客户端成功！"
						else
							result_up_str="[×]error:$vlist部署日志客户端成功，但更新数据库失败！"			
						fi
					else
						result_up_str="[×]error:$vlist部署日志客户端失败，连接服务器出现问题。"
					fi
					echo "XXX"
					echo $PCT
					echo "\n正在部署$vlist...\n\n$result_up_str"
					echo "XXX"
					PCT=`expr $PCT + $Gap`
					sleep 1
					
					#写运行结果到日志；
					logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
					RecordLog	
				done
				) |dialog --title "$system_info" --gauge "\n\n\n\n\n　　　　　　　　　　　　　准备部署......" 18 70 0
				exit
				;;

##########################################部署应用########################################
		10)
				#调用应用选择对话框；
				add_app
				
				#取选择firewall的标志；
				app_value=`cat /tmp/add_app$main_pid`
				
				#无选择与取消处理；
				if  [ "$app_value" != "" ]; then
					if [ "$app_value" == "0" ]; then
						exit
					fi
				else
					exit
				fi
				PCT=$Gap
				#进度表显示运行状态；
				while [ $PCT -le 100 ]
				do
					num=`expr $num + 1`
					
					#取第num列以空格分隔的字符(服务器)；
					vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'`
					
					#取第2列"号分隔字符串
					vlist=`echo "$vlist"|awk -F "\"" '{print $2}'`
					#创建应用目录；
					sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " mkdir -p /home/tyagent/$app_value" 2>&1
					result_check_conn=$?
					if [ $result_check_conn -eq 0 ]; then
						scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/tyapp/$app_value root@$vlist:/home/tyagent/$app_value/$app_value 1>&3					
						sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " /home/tyagent/$app_value/$app_value "
					 	if [ $? -eq 0 ]; then
          			result_up_str="[√]ok:$vlist部署应用：$app_value成功！"
						else
								result_up_str="[×]error:$vlist部署应用：$app_value失败！"			
						fi
						#echo "XXX"
						echo "$result_up_str..................................................................[$PCT%]"
						#echo "XXX"
					else
						result_up_str="[×]error:$vlist部署应用：$app_value失败，连接服务器出现问题。"
					fi
					PCT=`expr $PCT + $Gap`
					sleep 1
					
					#写运行结果到日志；
					logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
					RecordLog
				done
				#) |dialog --title "$system_info" --gauge "\n\n\n\n\n　　　　　　　　　　　　　准备部署......" 18 70 0
				exit
				;;				
	
		##########################################部署防火墙########################################
		11)
				#调用firewall选择对话框；
				add_firewall
				
				#取选择firewall的标志；
				firewall_value=`cat /tmp/add_firewall$main_pid`
				
				#无选择与取消处理；
				if  [ "$firewall_value" != "" ]; then
					if [ "$firewall_value" == "0" ]; then
						exit
					fi
				else
					exit
				fi
				
				#进度表显示运行状态；
				PCT=$Gap
				(
				while test $PCT -le 100
				do
					num=`expr $num + 1`
					
					#取第num列以空格分隔的字符(服务器)；
					vlist=`echo "$server_value"|awk -F " " '{print $'$num'}'`
					
					#取第2列"号分隔字符串
					vlist=`echo "$vlist"|awk -F "\"" '{print $2}'`
					scp -S sshto -oConnectTimeout=$ConnectTimeout -i $sysadmin_path/identity $sysadmin_path/firewall/$firewall_value root@$vlist:/etc/iptables.sh 1>&3
					
					result_do=$?
					if [ $result_do -eq 0 ]; then
						sshto -i $sysadmin_path/identity -oConnectTimeout=$ConnectTimeout root@$vlist " if sed -n '1,100p' /etc/rc.local | grep iptables.sh;  then echo '0'; else echo \"/etc/iptables.sh\" >> /etc/rc.local;fi;chmod u+x /etc/iptables.sh;/etc/iptables.sh" 2>&1
						result_up=`$mysql_bin -h $mysql_host -u$mysql_user -p$mysql_passwd -e "update sysadmin.ty_server set TOFIREWALL='Y' where SERVER='$vlist';" 2>&1`
					  if [ -z "$result_up" ]; then
          					result_up_str="[√]ok:$vlist部署Firewall成功！"
						else
							result_up_str="[×]error:$vlist部署Firewall成功，但更新数据库失败！"			
						fi
					else
						result_up_str="[×]error:$vlist部署Firewall失败，连接服务器出现问题。"
					fi
					echo "XXX"
					echo $PCT
					echo "\n正在部署$vlist...\n\n$result_up_str"
					echo "XXX"i
					PCT=`expr $PCT + $Gap`
					sleep 1
					
					#写运行结果到日志；
					logs="[$(date +'%Y-%m-%d %H:%M:%S')]$result_up_str"
					RecordLog
				done
				) |dialog --title "$system_info" --gauge "\n\n\n\n\n　　　　　　　　　　　　　准备部署......" 18 70 0
				exit
				;;
				
		esac
		;;
	#*为点击[Cancel]按钮或其它中断。
	*)
		dialog \
     		--clear \
     		--title "$system_info" \
     		--yesno "\n\n确定要取消操作吗？" 10 30
     		case $? in
     		0)
           	break
          	 ;;
     		1)
           	returncode=99
          	 ;;
		esac
	;;
	esac
done
