Diff for /loncom/Attic/lonManage between versions 1.16 and 1.21

version 1.16, 2003/10/21 09:44:04 version 1.21, 2003/11/03 10:39:24
Line 52 Line 52
 #   If [host] is not supplied, every host in the client's hosts.tab  #   If [host] is not supplied, every host in the client's hosts.tab
 #   table is iterated through and procesed..  #   table is iterated through and procesed..
 #  #
 #  $Log$  
 #  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.  
 #  
 #  Revision 1.12  2003/08/18 11:08:07  foxr  
 #  Debug request building in Transact.  
 #  
 #  Revision 1.11  2003/08/18 10:45:32  foxr  
 #  Felt strongly enough about hoisting ReadConfiguration into a separate sub  
 #  that I did it now before I forgot.  
 #  
 #  Revision 1.10  2003/08/18 10:43:31  foxr  
 #  Code/test ValidHost.  The hosts.tab and the perl variables are read in as  
 #  global hashes as a side effect.  May later want to clean this up by making  
 #  a separate getconfig function and hoisting the config reads into that.  
 #  
 #  Revision 1.9  2003/08/18 10:25:46  foxr  
 #  Write ReinitProcess function in terms of ValidHost and Transact.  
 #  
 #  Revision 1.8  2003/08/18 10:18:21  foxr  
 #  Completed PushFile function in terms of  
 #  - ValidHost - Determines if target host is valid.  
 #  - Transact  - Performs one of the valid transactions with the  
 #                appropriate lonc<-->lond client/server pairs.  
 #  
 #  Revision 1.7  2003/08/18 09:56:01  foxr  
 #  1. Require to be run as root.  
 #  2. Catch case where no operation switch is supplied and put out usage.  
 #  3. skeleton/comments for PushFile function.  
 #  
 #  Revision 1.6  2003/08/12 11:02:59  foxr  
 #  Implement command switch dispatching.  
 #  
 #  Revision 1.5  2003/08/12 10:55:42  foxr  
 #  Complete command line parsing (tested)  
 #  
 #  Revision 1.4  2003/08/12 10:40:44  foxr  
 #  Get switch parsing right.  
 #  
 #  Revision 1.3  2003/08/12 10:22:35  foxr  
 #  Put in parameter parsing infrastructure  
 #  
 #  Revision 1.2  2003/08/12 09:58:49  foxr  
 #  Add usage and skeleton documentation.  
 #  
 #  #
   
   
   
 # Modules required:  # Modules required:
   
   use lib ".";
   
 use strict; # Because it's good practice.  use strict; # Because it's good practice.
 use English; # Cause I like meaningful names.  use English; # Cause I like meaningful names.
 use Getopt::Long;  use Getopt::Long;
 use LONCAPA::Configuration; # To handle configuration I/O.  
 use IO::Socket::UNIX; # To communicate with lonc.  use IO::Socket::UNIX; # To communicate with lonc.
   use LondConnection;
   
 # File scoped variables:  # File scoped variables:
   
 my %perlvar; # Perl variable defs from apache config.  my %perlvar; # Perl variable defs from apache config.
 my %hostshash; # Host table as a host indexed hash.  my %hostshash; # Host table as a host indexed hash.
   
   my $MyHost=""; # Host name to use as me.
   my $ForeignHostTab=""; # Name of foreign hosts table.
   my $ServerPort; # Port used to connect to lond.
   
 #  #
 #   prints out utility's command usage info.  #   prints out utility's command usage info.
 #  #
 sub Usage  {  sub Usage  {
     print "Usage:";      print "Usage:";
     print <<USAGE;      print <<USAGE;
     lonManage  --push=<tablename>  newfile  [host]   lonManage  [--myname=host --hosts=table] --push=<tablename>  newfile  [host]
         Push <tablename> to the lonTabs directory.  Note that          Push <tablename> to the lonTabs directory.  Note that
         <tablename> must be one of:          <tablename> must be one of:
            host  (hosts.tab)             host  (hosts.tab)
            domain (domain.tab)             domain (domain.tab)
   
     lonManage  --reinit=lonc [host]   lonManage [--myname=host --hosts=table] --reinit=lonc [host]
        Causes lonc in the remote system to reread hosts.tab and         Causes lonc in the remote system to reread hosts.tab and
        adjust the set of clients that are being maintained to match         adjust the set of clients that are being maintained to match
        the new file.         the new file.
                 
   
     lonManage  --reinit=lond [host]   lonManage [--myname=host --hosts=table] --reinit=lond [host]
        Causes lond in the remote system to reread the hosts.tab file         Causes lond in the remote system to reread the hosts.tab file
        and adjust the set of servers to match changes in that file.         and adjust the set of servers to match changes in that file.
   
Line 155  sub Usage  { Line 103  sub Usage  {
     If [host] is omitted, all hosts in the hosts.tab file are iterated      If [host] is omitted, all hosts in the hosts.tab file are iterated
     over.      over.
   
    For all of the above syntaxes if --myname=host and --hosts=table are
    supplied (both must be present), the utility runs in standalone mode
    presenting itself to the world as 'host' and using the hosts.tab file
    specified in the --hosts switch.
 USAGE  USAGE
   
   
 }  }
   
   sub MakeLondConnection {
       my $host = shift;
       return "junk";
   }
   
   sub NegotiateStartup {
       my $connection = shift;
   
       return "ok";
   }
   sub PerformTransaction {
       my $connection  = shift;
       my $command     = shift;
   
       return "ok";
   }
 #  #
 #   Lifted from lonnet.pm - and we need to figure out a way to get it back in.  # Performs a transaction direct to a remote lond.
 #   Performas a transaction with lond via the lonc proxy server.  
 #   Parameter:  #   Parameter:
 #      cmd  - The text of the request.  #      cmd  - The text of the request.
 #      host - The host to which the request ultimately goes.  #      host - The host to which the request ultimately goes.
Line 170  USAGE Line 138  USAGE
 #      lond/lonc etc.  #      lond/lonc etc.
 #  #
 sub subreply {  sub subreply {
     my ($cmd,$server)=@_;      my $cmd = shift;
     my $peerfile="$perlvar{'lonSockDir'}/$server";      my $host = shift;
     my $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",  
                                      Type    => SOCK_STREAM,  
                                      Timeout => 10)      my $connection  = MakeLondConnection($host);
        or return "con_lost";      if ($connection eq undef) {
     print $client "$cmd\n";   return "Connect Failed";
     my $answer=<$client>;      }
     if (!$answer) { $answer="con_lost"; }      my $reply = NegotiateStartup($connection);
     chomp($answer);      if($reply != "ok") {
     return $answer;   return "connection negotiation failed";
       }
       my $reply =  PerformTransaction($connection, $cmd);
       return $reply;
   
   
        #    my ($cmd,$server)=@_;
        #    my $peerfile="$perlvar{'lonSockDir'}/$server";
        #    my $client=IO::Socket::UNIX->new(Peer    =>"$peerfile",
        #                                     Type    => SOCK_STREAM,
        #                                     Timeout => 10)
        #       or return "con_lost";
        #    print $client "$cmd\n";
        #    my $answer=<$client>;
        #    if (!$answer) { $answer="con_lost"; }
        #    chomp($answer);
        #    return $answer;
 }  }
 #   >>> BUGBUG <<<   #   >>> BUGBUG <<< 
 #  #
Line 206  sub subreply { Line 190  sub subreply {
 #   returns an empty list if the parse fails.  #   returns an empty list if the parse fails.
 #  #
   
   
 sub ParseArgs {  sub ParseArgs {
     my $pushing   = '';      my $pushing   = '';
     my $reinitting = '';      my $reinitting = '';
   
     if(!GetOptions('push=s'    => \$pushing,      if(!GetOptions('push=s'    => \$pushing,
            'reinit=s'  => \$reinitting)) {             'reinit=s'  => \$reinitting,
      'myname=s' => \$MyHost,
      'hosts=s' => \$ForeignHostTab)) {
    return ();
       }
       #  The --myname and --hosts switch must have values and
       #  most both appear if either appears:
   
       if(($MyHost ne "") && ($ForeignHostTab eq "")) {
    return ();
       }
       if(($ForeignHostTab ne "") && ($MyHost eq "")) {
  return ();   return ();
     }      }
   
Line 264  sub ParseArgs { Line 260  sub ParseArgs {
     return @result;      return @result;
 }  }
 #  #
 #  Read the loncapa configuration stuff.  #  Read the loncapa configuration stuff.  If ForeignHostTab is empty,
   #  assume we are part of a loncapa cluster and read the hosts.tab
   #  file from the config directory.  Otherwise, ForeignHossTab
   #  is the name of an alternate configuration file to read in 
   #  standalone mode.
 #  #
 sub ReadConfig {  sub ReadConfig {
     my $perlvarref = LONCAPA::Configuration::read_conf('loncapa.conf');  
     %perlvar       = %{$perlvarref};      if($ForeignHostTab eq "") {
     my $hoststab   = LONCAPA::Configuration::read_hosts(   my $perlvarref = LondConnection::read_conf('loncapa.conf');
  "$perlvar{'lonTabDir'}/hosts.tab");   %perlvar       = %{$perlvarref};
     %hostshash     = %{$hoststab};   my $hoststab   = LondConnection::read_hosts(
       "$perlvar{'lonTabDir'}/hosts.tab");
    %hostshash     = %{$hoststab};
    $MyHost        = $perlvar{lonHostID}; # Set hostname from vars.
    $ServerPort    = $perlvar{londPort};
       } else {
    my $hoststab   = LondConnection::read_hosts($ForeignHostTab);
    %hostshash     = %{$hoststab};
    $ServerPort    = 5663;
       }
   
 }  }
 #  #
Line 425  sub ReinitProcess { Line 434  sub ReinitProcess {
 }  }
 #--------------------------- Entry point: --------------------------  #--------------------------- Entry point: --------------------------
   
 ReadConfig; # Read the configuration info (incl.hosts).  
   
   
 #  Parse the parameters  #  Parse the parameters
Line 445  if ($EUID != 0) { Line 453  if ($EUID != 0) {
     die "ENOPRIV - No privilege for requested operation"      die "ENOPRIV - No privilege for requested operation"
 }  }
   
   #
   #   Read the configuration file.
   #   
   
   ReadConfig; # Read the configuration info (incl.hosts).
   
 #   Based on the operation requested invoke the appropriate function:  #   Based on the operation requested invoke the appropriate function:
   

Removed from v.1.16  
changed lines
  Added in v.1.21


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>