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, 2 months ago) by foxr
Branches: MAIN
CVS tags: HEAD
Started coding cluster administrator code.

#!/usr/bin/perl

=pod

=head1 SYNOPSIS

 clusteradmin command [args]

=head1 DESCRIPTION

Performs an adiminstrative action on all hosts in the current dns_hosts.tab
file.  For this to work, the current host must be the cluster administrator
on the target systems.  That is this must be a host in managers.tab
Furthermore, lonc must be running on this system.

The action is specified by the 'command' parameter which may have additional arguments.

All communications with remote clients are made critical so that
they will eventually happen even if the host we want to talk with
is dead.


=head1 ACTIONS

=over 3

=item help 

Outputs a brief description of the actions supported and what they do.

=item update file

Update the contents of an administrative file with the contents of that file 
on this system.  'file' is the name of that file, not the path for example:

  clusteradmin update dns_hosts.tab

=back


=cut

use strict;


#----------------------------------------------------------------------------------
#
#  Command dispatch handling:

#
#   Dispatch hash for the subcommands.  
#   indexed by the subcommand name, each item is 
#   a reference to the sub that handles the command:
#

my %Dispatch;

#
#  Define a subcommand:
#
# Parameters:
#    command   - subcommand name string
#    handler   - reference to the handler sub.
# Notes:
#   The handler is dispatched to with the tail of the command 
#   as an array reference parameter.  Suppose the command  is
#
#   clusteradmin update dns_hosts.tab, 
#
#   the array will have a single element:  'dns_hosts.tab'.
#
sub define_command {
    my ($command, $handler)  = @_;

    $Dispatch{$command} = $handler;
}

#
#   Dispatch to a command:
# Parameters:
#   command    - Name of the command.
#   tail       - Reference to the command tail array.
# Returns:
#   1          - Success.
#   0          - Failure
# Notes:
# 1.  The command handler is assumed to have output any error messages
#     to stderr by now.
# 2.  This function will indicate to stderr if the command isn't in the
#     dispatch hash.
#
sub dispatch_command {
    my ($command, $tail) = @_;
    my $sub;

    if (exists($Dispatch{$command})) {
	$sub = $Dispatch{$command};
	return $sub->($tail);
    } else {
	print STDERR "Unrecognized subcommand keyword $command\n";
	&usage();
	return 0;
    }
}
#-----------------------------------------------------------------------------------

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