;ｖｍマシンを作成
;作成者:金忠傑
;key
include 'vm-common.ttl'
password="NictvN"

ut_ip_mask="255.255.128.0"
vn_ip_mask="255.255.255.128"

vm_master_old=""
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 日時から保存ファイル名を組み立てる

msg2 = "VM_setting"
getdate timestamp "_%Y%m%d_%H%M%S_command.log"
strconcat msg2 timestamp
;strconcat logfile msg2
fileopen flog_handle msg2 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ログの記録開始
/*
logopen logfile 0 0
*/

/*


*/


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;=========================================================================
timeout = 3000

; ファイルオープン
fileopen fhandle 'VM-list.txt' 0
while 1
	call read_setting


	if setting_flag=1 then
		strcompare vm_master_old vm_master
		if result=0 then
			;;;;;;;;;;
		else
			strlen vm_master_old
			if result>0 then
				call exit_vm
			endif
			
			call connect_vm
			vm_master_old=vm_master
			
			filewriteln flog_handle ""
			sprintf  '%s:'  vm_master_old
			filewriteln flog_handle inputstr
		endif

	elseif setting_flag>1 then
		msg=Prefix
		strconcat msg vm_num
		ut_name=msg
		
		sendln
		Wait '#'
		sprintf  'echo "%s 設定-----------------------------"'  ut_name
		sendln inputstr
		Wait '#'
		sendln
		Wait '#'

		sprintf  './create-new-machine-st %s' vm_num
		sendln inputstr
		Wait "Cloning" "error: file exists."
	    
		if result=0 then
			call timeout_
		elseif result=1  then
			Wait '^]'
			sendln
			timeout = 3000
			Wait 'login:'
			call login
			send #29
			Wait vm_master
			Wait '#'
			
			created=1
		else
			sendln
			Wait vm_master
			Wait '#'
			created=0
		endif
		/*
		sprintf  'virsh  dumpxml %s | grep "mac address"' ut_name
		sendln inputstr
		waitrecv "address=" 26 1
		toupper eth0 inputstr
		strremove eth0 1 9
		waitrecv "address=" 26 1
		toupper eth1 inputstr
		strremove eth1 1 9
		waitrecv "address=" 26 1
		toupper eth2 inputstr
		strremove eth2 1 9
		*/
		

		call console
		/*
		; UTを設定する時はconfigure_UT、VNを設定する時は　configure_VN
		if utOrVn=1 then
			call configure_UT
		else
			call configure_VN
		endif

		call configure
		*/
		
		call get_eth0_ip
		
		send #29
		Wait vm_master
		Wait '#'

	else
	endif

endwhile

:fclose
; ファイルクローズ
fileclose fhandle
fileclose flog_handle

strlen vm_master_old
if result>0 then
	call exit_vm
endif
;sendln 'exit'
;Wait '$'
exit


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;login
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
:login

sendln 'root'
Wait 'Password:'
sendln password

Wait Prefix
Wait '#'

sendln

return

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;start console
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
{
:console

sendln
Wait vm_master
Wait '#'
if created=0 then
	sprintf  'if [[ "$(cat vm_list.txt | grep %s)" = "" ]];then echo $aa;else  echo $bb;fi' ut_name
	msg=inputstr

	;プロセス実行されているかを確認

	sendln msg
	Wait  'EXIST' 'NOT'
	if result=0 then
		call timeout_
	elseif result=1  then
		sendln
	else

:start_ut
		;;start ike-ut
		msg = 'virsh start '
		strconcat msg ut_name
		sendln msg
		Wait vm_master
		Wait '起動されました' '起動に失敗しました'
		if result=0 then
			call timeout_
		elseif result=1  then
			sendln
		else
			;;goto 
			goto start_ut

		endif
	endif
endif

msg = 'virsh console '
strconcat msg ut_name
sendln msg
Wait '^]'
Wait 'です'
sendln

strlen Prefix
read_l=result+3

waitrecv Prefix read_l 1
sprintf  '%s ~]#' inputstr
vm_prompt=inputstr
		
sendln

timeout = 20
Wait 'login:'  vm_prompt

if result=0 then
	call timeout_
elseif result=1  then

	call login
else
	sendln
endif

return
}



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;MAC address を設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
{
:configure

sprintf  "sed -i 's/^HOSTNAME=.*$/HOSTNAME=%s/g' /etc/sysconfig/network"  ut_name
sendln inputstr
Wait Prefix
Wait '#'

sprintf  '"%s"' eth0
eth0=inputstr
sprintf  "sed -i 's/^HWADDR=.*$/HWADDR=%s/g' /etc/sysconfig/network-scripts/ifcfg-eth0"  eth0
sendln inputstr
Wait Prefix
Wait '#'

sprintf  '"%s"' eth1
eth1=inputstr
sprintf  "sed -i 's/^HWADDR=.*$/HWADDR=%s/g' /etc/sysconfig/network-scripts/ifcfg-eth1"  eth1
sendln inputstr
Wait Prefix
Wait '#'

sprintf  '"%s"' eth2
eth2=inputstr
sprintf  "sed -i 's/^HWADDR=.*$/HWADDR=%s/g' /etc/sysconfig/network-scripts/ifcfg-eth2"  eth2
sendln inputstr
Wait Prefix
Wait '#'

sendln  'rm /etc/udev/rules.d/70-persistent-net.rules'
Wait '?'
sendln  'y'
Wait Prefix
Wait '#'

sendln  'shutdown -r now'

return
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;UTのIPを設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
{
:configure_UT
strlen ut_ip
if result>0 then
	sendln 'aa="NOT";bb="EXIST"'
	Wait Prefix
	Wait '#'

	sendln 'ip_addr=IPADDR'
	Wait Prefix
	Wait '#'

	sprintf  'sed -i "s/^${ip_addr}=.*$/${ip_addr}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth2'  ut_ip
	sendln inputstr
	Wait Prefix
	Wait '#'

	sendln 'if [[ "$(cat /etc/sysconfig/network-scripts/ifcfg-eth2 | grep ^${ip_addr})" = "" ]];then echo $aa;else  echo $bb;fi'
	
	timeout = 20
	Wait 'EXIST'  'NOT' 
	if result=0 then
		call timeout_
	elseif result=1  then
		sendln
	else
		sprintf  'sed -i "s/^#${ip_addr}=.*$/${ip_addr}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth2'  ut_ip
		sendln inputstr
	endif
	Wait Prefix
	Wait '#'

	sendln 'net_mask=NETMASK'
	Wait Prefix
	Wait '#'

	sprintf  'sed -i "s/^${net_mask}=.*$/${net_mask}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth2'  ut_ip_mask
	sendln inputstr
	Wait Prefix
	Wait '#'
	
	sendln 'if [[ "$(cat /etc/sysconfig/network-scripts/ifcfg-eth2 | grep ^${net_mask})" = "" ]];then echo $aa;else  echo $bb;fi'
	
	timeout = 20
	Wait 'EXIST'  'NOT' 
	if result=0 then
		call timeout_
	elseif result=1  then
		sendln
	else
		sprintf  'sed -i "s/^#${net_mask}=.*$/${net_mask}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth2'  ut_ip_mask
		sendln inputstr
	endif
	Wait Prefix
	Wait '#'

endif


sprintf  '"%s"' 'yes'
onboot=inputstr
sprintf  "sed -i 's/^ONBOOT=.*$/ONBOOT=%s/g' /etc/sysconfig/network-scripts/ifcfg-eth2"  onboot
sendln inputstr
Wait Prefix
Wait '#'

return
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;VNのIPを設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
{
:configure_VN

strlen ut_ip
if result>0 then
	sendln 'aa="NOT";bb="EXIST"'
	Wait Prefix
	Wait '#'

	sendln 'ip_addr=IPADDR'
	Wait Prefix
	Wait '#'

	sprintf  'sed -i "s/^${ip_addr}=.*$/${ip_addr}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth1'  ut_ip
	sendln inputstr
	Wait Prefix
	Wait '#'

	sendln 'if [[ "$(cat /etc/sysconfig/network-scripts/ifcfg-eth1 | grep ^${ip_addr})" = "" ]];then echo $aa;else  echo $bb;fi'
	
	timeout = 20
	Wait 'EXIST'  'NOT' 
	if result=0 then
		call timeout_
	elseif result=1  then
		sendln
	else
		sprintf  'sed -i "s/^#${ip_addr}=.*$/${ip_addr}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth1'  ut_ip
		sendln inputstr
	endif
	Wait Prefix
	Wait '#'

	sendln 'net_mask=NETMASK'
	Wait Prefix
	Wait '#'

	sprintf  'sed -i "s/^${net_mask}=.*$/${net_mask}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth1'  vn_ip_mask
	sendln inputstr
	Wait Prefix
	Wait '#'
	
	sendln 'if [[ "$(cat /etc/sysconfig/network-scripts/ifcfg-eth1 | grep ^${net_mask})" = "" ]];then echo $aa;else  echo $bb;fi'
	
	timeout = 20
	Wait 'EXIST'  'NOT' 
	if result=0 then
		call timeout_
	elseif result=1  then
		sendln
	else
		sprintf  'sed -i "s/^#${net_mask}=.*$/${net_mask}=%s/g" /etc/sysconfig/network-scripts/ifcfg-eth1'  vn_ip_mask
		sendln inputstr
	endif
	Wait Prefix
	Wait '#'

endif

sprintf  '"%s"' 'yes'
onboot=inputstr
sprintf  "sed -i 's/^ONBOOT=.*$/ONBOOT=%s/g' /etc/sysconfig/network-scripts/ifcfg-eth1"  onboot
sendln inputstr
Wait Prefix
Wait '#'

return
}
; ファイルオープン
/*
#UT番号,eth2のIP
ut2-master:
100,172.23.139.100
#101,172.23.139.101
200
201
000,172.23.139.3
001,172.23.139.2
vn2-master:
100,10.0.60.18
200,10.0.60.20
201,10.0.60.27
000,10.0.60.30
*/
;setting_flag:1,2
;1:utX-master:
;2:vm number,ip
{
:read_setting

	filereadln fhandle line
	if result goto fclose
	; 一行読み込み
	strscan line '#'
	if result=1 goto read_setting
	
	strtrim line ' 	'
	strlen line
	if result =0 then
		goto read_setting
	endif

	;messagebox  line '-----line1----'
	call read_line

	strmatch field1 '^(.+):'
	if result >0 then
		;pause 5
		setting_flag=1
		vm_master=groupmatchstr1
		;messagebox  vm_master '---------'
		strmatch vm_master '^(ut.*)-master'
		if result>0 then
			utOrVn=1
		else
			utOrVn=2
		endif
		
		return
	endif
	;messagebox  field1 '---------'
	;pause 5

	call init_vm_num_ip
	vm_num=field1
	ut_ip=field2

	setting_flag=2
return

; ファイルオープン
:init_vm_num_ip
	vm_num=""
	vm_ip=""
return
:read_line

	; 読み込んだ行を表示
	strsplit  line ',' 3
	strtrim groupmatchstr1 ' 	'
	field1=groupmatchstr1
	strtrim groupmatchstr2 ' 	'
	field2=groupmatchstr2
return
}
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;VM接続共通設定
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;-------------------------------
{
:connect_vm
	vm_path='/VM'

	strmatch vm_master '^(.+)-master'
	if result >0 then
		sprintf  '%s-st'  groupmatchstr1
		Prefix=inputstr
	else
		messagebox vm_master 'setting err'
		exit
	endif
	
	call connect_vm_com

	sendln 'virsh list > vm_list.txt'
	Wait vm_master
	Wait '#'
	sendln 'aa="NOT";bb="EXIST"'
	Wait vm_master
	Wait '#'


return

:connect_vm_com

	msg = 'ssh root@'
	strconcat msg vm_master
	sendln msg
	Wait 'password:'
	sendln vm_root_password
	Wait '#'
	sendln 'export LANG=ja_JP.UTF-8'
	Wait '#'

	msg = "cd "
	strconcat msg vm_path
	sendln msg
	Wait vm_master
	Wait '#'
	sendln 'aa="NOT";bb="EXIST"'
	Wait vm_master
	Wait '#'

	return


:exit_vm

	sendln 'exit'
	Wait vm_master_old
	Wait 'closed.'
	Wait '$'
	return
}

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;eth0 のIP 取得
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
{
:get_eth0_ip

	sendln "ifconfig eth0"
	
	waitrecv "inet addr:" 25 1
	eth0_ip=inputstr
	strremove eth0_ip 1 10
	strtrim eth0_ip ' \t'
	
	sprintf  '%s:%s'  ut_name eth0_ip
	filewriteln flog_handle inputstr

return
}
;send #29



