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>