--- loncom/Attic/lonManage 2003/08/19 10:26:24 1.13 +++ loncom/Attic/lonManage 2003/10/21 09:44:04 1.16 @@ -3,9 +3,9 @@ # # lonManage supports remote management of nodes in a LonCAPA cluster. # -# $Id: lonManage,v 1.13 2003/08/19 10:26:24 foxr Exp $ +# $Id: lonManage,v 1.16 2003/10/21 09:44:04 foxr Exp $ # -# $Id: lonManage,v 1.13 2003/08/19 10:26:24 foxr Exp $ +# $Id: lonManage,v 1.16 2003/10/21 09:44:04 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,23 +33,38 @@ # it is a command line tool. The following command line syntax (usage) # is supported: # -# lonManage -push newfile host +# lonManage -push newfile [host] # Push to the lonTabs directory. Note that # must be one of: -# hosts (hosts.tab) +# host (hosts.tab) # domain (domain.tab) # -# lonManage -reinit lonc host +# lonManage -reinit lonc [host] # Sends a HUP signal to the remote systems's lond. # -# lonmanage -reinit lond host +# lonmanage -reinit lond [host] # Requests the remote system's lond perform the same action as if # it had received a HUP signal. # # In the above syntax, the host above is the hosts.tab name of a host, -# not the IP address of the host. +# not the IP address of the host +# +# If [host] is not supplied, every host in the client's hosts.tab +# table is iterated through and procesed.. # # $Log: lonManage,v $ +# Revision 1.16 2003/10/21 09:44:04 foxr +# Add ability to manage entire cluster in hosts table. +# +# Revision 1.15 2003/09/16 09:49:54 foxr +# Adjust the usage message to reflect what actually will happen on +# --reinit={lond|lonc} +# +# Revision 1.14 2003/09/08 09:45:20 foxr +# Remove BUGBUG about comment about authentication as we'll be doing +# host based authentication initially (no need for lonManage to do anything), +# and certificate based later (need at that time). +# # Revision 1.13 2003/08/19 10:26:24 foxr # Initial working version... tested against an unmodified lond this # produces an unknown_cmd response which is about what I'd expect. @@ -97,8 +112,7 @@ # # -# >>>>BUGBUG<<<< require authentication with lond of some sort. -# domain admin login eg. + # Modules required: @@ -119,21 +133,28 @@ my %hostshash; # Host table as a host sub Usage { print "Usage:"; print < newfile host + lonManage --push= newfile [host] Push to the lonTabs directory. Note that must be one of: - hosts (hosts.tab) + host (hosts.tab) domain (domain.tab) - lonManage --reinit=lonc host - Sends a HUP signal to the remote systems's lond. - - lonManage --reinit=lond host - Requests the remote system's lond perform the same action as if - it had received a HUP signal. + lonManage --reinit=lonc [host] + Causes lonc in the remote system to reread hosts.tab and + adjust the set of clients that are being maintained to match + the new file. + + + lonManage --reinit=lond [host] + Causes lond in the remote system to reread the hosts.tab file + and adjust the set of servers to match changes in that file. In the above syntax, the host above is the hosts.tab name of a host, not the IP address of the host. + + If [host] is omitted, all hosts in the hosts.tab file are iterated + over. + USAGE @@ -203,9 +224,9 @@ sub ParseArgs { if($pushing ne '') { - # --push takes in addition a table, and a host: + # --push takes in addition a table, and an optional host: # - if($paramcount != 2) { + if(($paramcount != 2) && ($paramcount != 1)) { return (); # Invalid parameter count. } if($command ne '') { @@ -219,9 +240,9 @@ sub ParseArgs { if ($reinitting ne '') { - # --reinit takes in addition just a host name + # --reinit takes in addition just an optional host name - if($paramcount != 1) { + if($paramcount > 1) { return (); } if($command ne '') { @@ -267,7 +288,6 @@ sub ReadConfig { sub ValidHost { my $host = shift; - ReadConfig; return defined $hostshash{$host}; @@ -363,6 +383,7 @@ sub PushFile { if( ($tablename eq "host") || ($tablename eq "domain")) { + print("Pushing $tablename to $host\n"); Transact($host, "pushfile:$tablename",\@table); } else { die "EINVAL - Invalid parameter. tablename: $tablename must be host or domain"; @@ -396,6 +417,7 @@ sub ReinitProcess { if(($process eq "lonc") || ($process eq "lond")) { + print("Reinitializing $process in $host\n"); Transact($host, "reinit:$process"); } else { die "EINVAL -Invalid parameter. Process $process must be lonc or lond"; @@ -403,6 +425,9 @@ sub ReinitProcess { } #--------------------------- Entry point: -------------------------- +ReadConfig; # Read the configuration info (incl.hosts). + + # Parse the parameters # If command parsing failed, then print usage: @@ -429,13 +454,25 @@ if($operation eq "push") { # push table my $tablename = shift @params; my $tablefile = shift @params; my $host = shift @params; - PushFile($tablename, $tablefile, $host); + if($host) { + PushFile($tablename, $tablefile, $host); + } else { # Push to whole cluster. + foreach my $host (keys %hostshash) { + PushFile($tablename, $tablefile, $host); + } + } } elsif($operation eq "reinit") { # reinit processname host. my $process = shift @params; my $host = shift @params; - ReinitProcess($process, $host); -} + if ($host) { + ReinitProcess($process, $host); + } else { # Reinit whole cluster. + foreach my $host (keys %hostshash) { + ReinitProcess($process,$host); + } + } +} else { Usage; }