--- loncom/Attic/lonManage 2003/08/12 09:58:49 1.2 +++ loncom/Attic/lonManage 2003/08/12 10:55:42 1.5 @@ -3,9 +3,9 @@ # # lonManage supports remote management of nodes in a LonCAPA cluster. # -# $Id: lonManage,v 1.2 2003/08/12 09:58:49 foxr Exp $ +# $Id: lonManage,v 1.5 2003/08/12 10:55:42 foxr Exp $ # -# $Id: lonManage,v 1.2 2003/08/12 09:58:49 foxr Exp $ +# $Id: lonManage,v 1.5 2003/08/12 10:55:42 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -50,24 +50,34 @@ # not the IP address of the host. # # $Log: lonManage,v $ +# 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. # # +use Getopt::Long; -sub Usage {} { +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) 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. @@ -79,12 +89,106 @@ USAGE } # +# Use Getopt::Long to parse the parameters of the program. +# +# Return value is a list consisting of: +# A 'command' which is one of: +# push - table push requested. +# reinit - reinit requested. +# Additional parameters as follows: +# for push: Tablename, hostname +# for reinit: Appname hostname +# +# This function does not validation of the parameters of push and +# reinit. +# +# returns a list. The first element of the list is the operation name +# (e.g. reinit or push). The second element is the switch parameter. +# for push, this is the table name, for reinit, this is the process name. +# Additional elements of the list are the command argument. The count of +# command arguments is validated, but not their semantics. +# +# returns an empty list if the parse fails. +# + +sub ParseArgs { + my $pushing = ''; + my $reiniting = ''; + + if(!GetOptions('push=s' => \$pushing, + 'reinit=s' => \$reinitting)) { + return (); + } + + # Require exactly one of --push and --reinit + + my $command = ''; + my $commandarg = ''; + my $paramcount = @ARGV; # Number of additional arguments. + + + if($pushing ne '') { + + # --push takes in addition a table, and a host: + # + if($paramcount != 2) { + print "Bad count $paramcount\n"; + return (); # Invalid parameter count. + } + if($command ne '') { + return (); + } else { + + $command = 'push'; + $commandarg = $pushing; + } + } + + if ($reinitting ne '') { + + # --reinit takes in addition just a host name + + if($paramcount != 1) { + print "Bad count $paramcount\n"; + return (); + } + if($command ne '') { + return (); + } else { + $command = 'reinit'; + $commandarg = $reinitting; + } + } + + # Build the result list: + + my @result = ($command, $commandarg); + my $i; + for($i = 0; $i < $paramcount; $i++) { + push(@result, $ARGV[$i]); + } + + return @result; +} + +# # If command parsing failed, then print usage: -if(0) { +@status = ParseArgs; +$nparam = @status; + +if($nparam == 0) { Usage; + exit -1; +} + +print "---- params ---\n"; +for($i = 0; $i < $nparam; $i++) { + print "Param[$i] = $status[$i]\n"; } +exit 0; + =head1 NAME lonManage - Command line utility for remote management of lonCAPA cluster nodes. @@ -92,16 +196,16 @@ if(0) { =head1 SYNOPSIS Usage: - B newfile host> + B newfile host> Push to the lonTabs directory. Note that must be one of: hosts (hosts.tab) domain (domain.tab) - B + B Sends a HUP signal to the remote systems's lond. - B + B Requests the remote system's lond perform the same action as if it had received a HUP signal. @@ -113,6 +217,8 @@ Usage: =head1 PREREQUISITES +=item Getopt::Long + =head1 CATEGORIES Command line utility