if { $remote_exec } {
rexec $execSock $args
} else {
+ puts "-- running: $args"
eval exec $args
}
}
puts "l3node.instantiate $eid $node"
set node_id "$eid\.$node"
+# OpenVZ VE ID moze biti samo numericki, dok nas node_id sadrzi
+# delimiter tocku i slovo n, pa te znakove moramo izbaciti
+ set openvz_node_id $eid[string range $node 1 end]
+
+# ovdje bismo mogli napraviti OpenVZ conf file za ovaj node
+# ali pustamo vzctl create da ga sam automatski izgenerira iz
+# vps-basic sample datoteke u /etc/vz/conf/
+
puts " nexec vimage -c $node_id "
+ nexec vzctl create $openvz_node_id --ostemplate imunes-openvz
+
+# Dodjela naseg kratkog node ida njegovom numerickom VE ID-u opcijom --name
+# TODO: ako bude potreban support za vise paralelenih eksperimenata,
+# trebat ce VE name podesiti s prefiksom $eid (i analogno u vimageCleanup)
+ nexec vzctl set $openvz_node_id --name $node --save
+
puts " nexec vimage $node_id hostname [getNodeName $node] "
- puts " nexec vimage $node_id sysctl vfs.morphing_symlinks=1 "
+ nexec vzctl set $node --hostname [getNodeName $node] --save
+
+# feature FreeBSD-a only (expandanje @ u symlinkovima kao node id)
+# puts " nexec vimage $node_id sysctl vfs.morphing_symlinks=1 "
+
+ nexec vzctl start $node
foreach ifc [ifcList $node] {
switch -exact [string range $ifc 0 2] {
puts { nexec vimage -m $node_id cpuweight $cpuweight }
}
- puts "
- nexec vimage $node_id sysctl net.inet.icmp.bmcastecho=1
- nexec vimage $node_id sysctl net.inet.icmp.icmplim=0
- nexec vimage $node_id ifconfig lo0 inet localhost
- nexec vimage $node_id route add 224.0.0.0/4 localhost
- "
+# FreeBSD-only
+# puts "
+# nexec vimage $node_id sysctl net.inet.icmp.bmcastecho=1
+# nexec vimage $node_id sysctl net.inet.icmp.icmplim=0
+# nexec vimage $node_id ifconfig lo0 inet localhost
+# nexec vimage $node_id route add 224.0.0.0/4 localhost
+# "
}
puts "l3node.start $eid $node"
set node_id "$eid\.$node"
- set node_dir "/tmp/$eid/$node"
- puts " recreating $node_dir"
- nexec rm -fr $node_dir
- nexec mkdir $node_dir
- nexec chmod 1777 $node_dir
+# na FreeBSD-u vimagei imaju shared filesystem
+# na Linuxu VEovi to nemaju
+# set node_dir "/tmp/$eid/$node"
+
+ puts " would recreate node_dir (/tmp/$eid/$node)"
+# nexec rm -fr $node_dir
+# nexec mkdir $node_dir
+# nexec chmod 1777 $node_dir
foreach ifc [ifcList $node] {
set mtu [getIfcMTU $node $ifc]
puts " nexec vimage $node_id ifconfig $ifc mtu $mtu "
set ipsecCfg ""
if { [getIpsecEnabled $node] == true } {
- set setkeycfg [ipsecCfggen $node]
- set setkeyFileId [open $node_dir/setkey.conf w+]
- foreach line $setkeycfg {
- puts $setkeyFileId $line
- }
- close $setkeyFileId
+ puts " would do the ipsecenabled stuff"
+#
+# set setkeycfg [ipsecCfggen $node]
+# set setkeyFileId [open $node_dir/setkey.conf w+]
+# foreach line $setkeycfg {
+# puts $setkeyFileId $line
+# }
+# close $setkeyFileId
- set errorstr ""
- puts " doing the set error setkeyError"
+# set errorstr ""
# set error [catch "nexec vimage $node_id setkey -f \
# $node_dir/setkey.conf" errorstr]
# if { $error == "1" } {
}
puts " imamo typemodel=[typemodel $node] bootcfg=$bootcfg i bootcmd=$bootcmd"
if { ! $remote_exec } {
- set fileId [open $node_dir/boot.conf w]
- foreach line $bootcfg {
- puts $fileId $line
- }
- close $fileId
+ puts " would write node_dir/boot.conf"
+# set fileId [open $node_dir/boot.conf w]
+# foreach line $bootcfg {
+# puts $fileId $line
+# }
+# close $fileId
} else {
nexec create_conf_file $node_dir/boot.conf
foreach line $bootcfg {
nexec close_conf_file
}
- puts " catch nexec vimage $node_id $bootcmd $node_dir/boot.conf >& $node_dir/out.log &"
+ puts " would execute bootcmd boot.conf in $node_id"
+# catch nexec vimage $node_id $bootcmd $node_dir/boot.conf >& $node_dir/out.log &"
}
#****f* exec.tcl/l3node.shutdown
proc l3node.destroy { eid node } {
set node_id $node
foreach ifc [ifcList $node] {
- puts { nexec vimage $eid ngctl msg $ifc@$node_id: shutdown }
+ puts " nexec vimage $eid ngctl msg $ifc@$node_id: shutdown "
+
set ifnum [string range $ifc 3 end]
set ifname [string range $ifc 0 2]
if { $ifname == "ser" } {
- puts { nexec vimage $eid ngctl msg hdlc$ifnum@$node_id: shutdown }
+ puts " nexec vimage $eid ngctl msg hdlc$ifnum@$node_id: shutdown "
}
}
- puts {nexec vimage -d $node_id}
- set node_dir "/tmp/$eid/$node"
- nexec rm -fr $node_dir
+ puts "nexec vimage -d $node_id"
+ nexec vzctl stop $node
+ nexec vzctl destroy $node
+
+# FreeBSD only node_dir:
+# set node_dir "/tmp/$eid/$node"
+# nexec rm -fr $node_dir
}
# network peeringe izmedju nodeova
# na Linuxu to necemo napraviti jer ne mozemo dirati network linkove
# jednog VEa iz drugog, pa ce to sve biti na parent hostu
- puts " nexec vimage -c $eid "
- puts " nexec rm -fr /tmp/$eid "
- puts " nexec mkdir /tmp/$eid "
+# puts " nexec vimage -c $eid "
+# puts " nexec rm -fr /tmp/$eid "
+# puts " nexec mkdir /tmp/$eid "
# puts { nexec kldload ng_ether }
# puts { nexec kldload ng_iface }
# puts { nexec kldload ng_socket }
foreach node $node_list {
+ # OpenVZ VE name format su brojke (bez tocaka)
set node_id "$eid\.$node"
set type [nodeType $node]
set name [getNodeName $node]
puts "vimageCleanup $eid"
set t_start [clock seconds]
- if { [catch {nexec vimage $eid vimage -lr | fgrep -v " " | cut -d: -f 1} res] != 0 } {
- return
- }
- set vimages [join $res]
- set defindex [lsearch $vimages .]
- set vimages [lreplace $vimages $defindex $defindex]
- # Wait for TIME_WAIT timeout in all vimages
- set vrti 1
- set sec 60
+## FreeBSD-only bug workaround:
+# puts " would check vimage $eid vimage -lr \| fgrep -v \" \" \| cut -d: -f 1"
+# if { [ catch {nexec vimage $eid vimage -lr | fgrep -v " " | cut -d: -f 1} res] != 0 } {
+# return
+# }
+# set vimages [join $res]
+# set defindex [lsearch $vimages .]
+# set vimages [lreplace $vimages $defindex $defindex]
+
+# # Wait for TIME_WAIT timeout in all vimages
+# set vrti 1
+# set sec 60
+
+# if { $execMode == "batch" } {
+# puts "\nDue to the known bug we must wait for TIME_WAIT expiration on virtual nodes (up to 60 sec). "
+# puts "Please don't try killing the process."
+# } else {
+# # wm title $wi "Please wait ..."
+# set w .timewait
+# puts {destroy $w}
+# toplevel $w -takefocus 1
+# wm geometry $w +150+150
+# wm title $w "Please wait ..."
+# message $w.msg -justify left -aspect 1200 \
+# -text "\nDue to the known bug we must wait for TIME_WAIT expiration on virtual nodes (up to 60 sec).
+#Please don't try killing the process.
+#(countdown on status line)\n"
+# pack $w.msg
+# update
+# grab $w
+# }
+# while { $vrti == 1 } {
+# set vrti 0
+# foreach vimage $vimages {
+# puts "vimage $vimage...\n"
+# puts "checking netstat -an -f inet | fgrep WAIT..."
+# while { [catch {nexec vimage $eid.$vimage netstat -an -f inet | fgrep "WAIT"} odg] == 0} {
+# set vrti 1
+# # puts "vimage $vimage: \n$odg\n"
+# after 2000
+# set sec [expr $sec - 2]
+# if { $execMode == "batch" } {
+# puts -nonewline "."
+# flush stdout
+# } else {
+# statline "~ $sec sec ..."
+# pack $w.msg
+# update
+# }
+# }
+# }
+# }
+# if { $execMode == "batch" } {
+# puts ""
+# } else {
+# destroy .timewait
+# }
+
+# FreeBSD vimage only
+# # Kill all processes in all vimages
+# foreach vimage $vimages {
+# set stattxt "Terminating processes in vimage $vimage"
+# statline $stattxt
+# puts "nexec vimage $eid.$vimage kill -9 -1 2> /dev/null"
+# }
+
+# FreeBSD netgraph only
+# # Detach / destroy / reassign interfaces pipe, eiface, iface, bridge
+# puts "running vimage $eid ngctl l | tail -n +3"
+# set ngnodes [split [nexec vimage $eid ngctl l | tail -n +3] "
+#"]
+# foreach ngline $ngnodes {
+# set node [lindex [eval list $ngline] 1]
+# statline "Shutting down netgraph node $node"
+# puts "nexec vimage $eid ngctl msg $node: shutdown"
+# }
- if { $execMode == "batch" } {
- puts "\nDue to the known bug we must wait for TIME_WAIT expiration on virtual nodes (up to 60 sec). "
- puts "Please don't try killing the process."
- } else {
- # wm title $wi "Please wait ..."
- set w .timewait
- puts {destroy $w}
- toplevel $w -takefocus 1
- wm geometry $w +150+150
- wm title $w "Please wait ..."
- message $w.msg -justify left -aspect 1200 \
- -text "\nDue to the known bug we must wait for TIME_WAIT expiration on virtual nodes (up to 60 sec).
-Please don't try killing the process.
-(countdown on status line)\n"
- pack $w.msg
- update
- grab $w
- }
- while { $vrti == 1 } {
- set vrti 0
- foreach vimage $vimages {
- # puts "vimage $vimage...\n"
- while { [catch {nexec vimage $eid.$vimage netstat -an -f inet | fgrep "WAIT"} odg] == 0} {
- set vrti 1
- # puts "vimage $vimage: \n$odg\n"
- after 2000
- set sec [expr $sec - 2]
- if { $execMode == "batch" } {
- puts -nonewline "."
- flush stdout
- } else {
- statline "~ $sec sec ..."
- pack $w.msg
- update
- }
- }
- }
- }
- if { $execMode == "batch" } {
- puts ""
- } else {
- destroy .timewait
- }
- # Kill all processes in all vimages
- foreach vimage $vimages {
- set stattxt "Terminating processes in vimage $vimage"
+ # Shut down all vimages
+
+ # OpenVZ - samo nam treba popis nodeova za pogasiti
+ upvar 0 ::cf::[set ::curcfg]::node_list node_list
+ foreach node $node_list {
+ set stattxt "Stopping VE $node"
statline $stattxt
- puts {nexec vimage $eid.$vimage kill -9 -1 2> /dev/null}
+ nexec vzctl stop $node
+ set stattxt "Destroying VE $node"
+ statline $stattxt
+ nexec vzctl destroy $node
}
- # Detach / destroy / reassign interfaces pipe, eiface, iface, bridge
- set ngnodes [split [nexec vimage $eid ngctl l | tail -n +3] "
-"]
- foreach ngline $ngnodes {
- set node [lindex [eval list $ngline] 1]
- statline "Shutting down netgraph node $node"
- puts "nexec vimage $eid ngctl msg $node: shutdown"
- }
+ puts "*** missing bridge cleanup in main host"
+
+# FreeBSD metoda:
+# foreach vimage $vimages {
+# set stattxt "Shutting down vimage $vimage"
+# statline $stattxt
+# puts "nexec vimage $eid.$vimage kill -9 -1 2> /dev/null"
+# while { [catch {nexec vimage -d $eid.$vimage}] } {
+# set stattxt $stattxt.
+# statline $stattxt
+# puts "nexec vimage $eid.$vimage kill -9 -1 2> /dev/null"
+# }
+# }
+# puts " nexec vimage -d $eid "
- # Shut down all vimages
- foreach vimage $vimages {
- set stattxt "Shutting down vimage $vimage"
- statline $stattxt
- puts {nexec vimage $eid.$vimage kill -9 -1 2> /dev/null}
- while { [catch {nexec vimage -d $eid.$vimage}] } {
- set stattxt $stattxt.
- statline $stattxt
- puts {nexec vimage $eid.$vimage kill -9 -1 2> /dev/null}
- }
- }
- puts { nexec vimage -d $eid }
- puts { nexec rm -f /usr/local/etc/quagga/Quagga.conf }
- nexec rm -fr "/tmp/$eid"
+# puts " nexec rm -f /usr/local/etc/quagga/Quagga.conf "
+
+# FreeBSD-only ciscenje eid tmp dira
+# nexec rm -fr "/tmp/$eid"
statline "Cleanup completed in [expr [clock seconds] - $t_start] seconds."
}