]> git.entuzijast.net Git - imunes.git/commitdiff
dodatni debugging posvuda; uhvaceno jos FreeBSD-specific nexeca; implementiran osnovn...
authornuma <numa@numa-ubuntu-vm.(none)>
Thu, 3 Sep 2009 11:43:38 +0000 (13:43 +0200)
committernuma <numa@numa-ubuntu-vm.(none)>
Thu, 3 Sep 2009 11:43:38 +0000 (13:43 +0200)
exec.tcl

index b6a77e0945397936c48626911185a85aa115472d..4d7442fc4979c7642667a34caaef862b5260d575 100755 (executable)
--- a/exec.tcl
+++ b/exec.tcl
@@ -64,6 +64,7 @@ proc nexec { args } {
     if { $remote_exec } {
        rexec $execSock $args   
     } else {
+       puts "-- running: $args"
        eval exec $args
     }
 }
@@ -262,9 +263,29 @@ proc l3node.instantiate { eid node } {
        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] {
@@ -314,12 +335,13 @@ proc l3node.instantiate { eid node } {
        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
+#                                                              "
 }
 
 
@@ -372,12 +394,15 @@ proc l3node.start { eid node } {
        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    "
@@ -410,15 +435,16 @@ proc l3node.start { eid node } {
 
     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" } {
@@ -432,11 +458,12 @@ proc l3node.start { eid node } {
     }
     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 {
@@ -445,7 +472,8 @@ proc l3node.start { eid node } {
        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 
@@ -491,16 +519,21 @@ proc l3node.shutdown { eid node } {
 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
 }
 
 
@@ -538,9 +571,9 @@ proc deployCfg {} {
 # 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 }
@@ -552,6 +585,7 @@ proc deployCfg {} {
 #    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]
@@ -672,90 +706,116 @@ proc vimageCleanup { eid } {
        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."
 }