File:  [LON-CAPA] / loncom / clusteradmin
Revision 1.1: download - view: text, annotated - select for diffs
Mon Feb 2 11:58:59 2009 UTC (15 years, 3 months ago) by foxr
Branches: MAIN
CVS tags: HEAD
Started coding cluster administrator code.

    1: #!/usr/bin/perl
    2: 
    3: =pod
    4: 
    5: =head1 SYNOPSIS
    6: 
    7:  clusteradmin command [args]
    8: 
    9: =head1 DESCRIPTION
   10: 
   11: Performs an adiminstrative action on all hosts in the current dns_hosts.tab
   12: file.  For this to work, the current host must be the cluster administrator
   13: on the target systems.  That is this must be a host in managers.tab
   14: Furthermore, lonc must be running on this system.
   15: 
   16: The action is specified by the 'command' parameter which may have additional arguments.
   17: 
   18: All communications with remote clients are made critical so that
   19: they will eventually happen even if the host we want to talk with
   20: is dead.
   21: 
   22: 
   23: =head1 ACTIONS
   24: 
   25: =over 3
   26: 
   27: =item help 
   28: 
   29: Outputs a brief description of the actions supported and what they do.
   30: 
   31: =item update file
   32: 
   33: Update the contents of an administrative file with the contents of that file 
   34: on this system.  'file' is the name of that file, not the path for example:
   35: 
   36:   clusteradmin update dns_hosts.tab
   37: 
   38: =back
   39: 
   40: 
   41: =cut
   42: 
   43: use strict;
   44: 
   45: 
   46: #----------------------------------------------------------------------------------
   47: #
   48: #  Command dispatch handling:
   49: 
   50: #
   51: #   Dispatch hash for the subcommands.  
   52: #   indexed by the subcommand name, each item is 
   53: #   a reference to the sub that handles the command:
   54: #
   55: 
   56: my %Dispatch;
   57: 
   58: #
   59: #  Define a subcommand:
   60: #
   61: # Parameters:
   62: #    command   - subcommand name string
   63: #    handler   - reference to the handler sub.
   64: # Notes:
   65: #   The handler is dispatched to with the tail of the command 
   66: #   as an array reference parameter.  Suppose the command  is
   67: #
   68: #   clusteradmin update dns_hosts.tab, 
   69: #
   70: #   the array will have a single element:  'dns_hosts.tab'.
   71: #
   72: sub define_command {
   73:     my ($command, $handler)  = @_;
   74: 
   75:     $Dispatch{$command} = $handler;
   76: }
   77: 
   78: #
   79: #   Dispatch to a command:
   80: # Parameters:
   81: #   command    - Name of the command.
   82: #   tail       - Reference to the command tail array.
   83: # Returns:
   84: #   1          - Success.
   85: #   0          - Failure
   86: # Notes:
   87: # 1.  The command handler is assumed to have output any error messages
   88: #     to stderr by now.
   89: # 2.  This function will indicate to stderr if the command isn't in the
   90: #     dispatch hash.
   91: #
   92: sub dispatch_command {
   93:     my ($command, $tail) = @_;
   94:     my $sub;
   95: 
   96:     if (exists($Dispatch{$command})) {
   97: 	$sub = $Dispatch{$command};
   98: 	return $sub->($tail);
   99:     } else {
  100: 	print STDERR "Unrecognized subcommand keyword $command\n";
  101: 	&usage();
  102: 	return 0;
  103:     }
  104: }
  105: #-----------------------------------------------------------------------------------

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