--- loncom/clusteradmin 2018/08/20 22:27:16 1.6 +++ loncom/clusteradmin 2018/08/20 22:42:05 1.8 @@ -2,7 +2,7 @@ # The LearningOnline Network with CAPA # Push admin files from cluster manager to cluster's "name servers". # -# $Id: clusteradmin,v 1.6 2018/08/20 22:27:16 raeburn Exp $ +# $Id: clusteradmin,v 1.8 2018/08/20 22:42:05 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,9 +33,12 @@ =head1 DESCRIPTION -Performs an adminstrative action on DNS hosts in the current 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 +Performs an adminstrative update on (a) "DNS" hosts or domains in the current +dns_hosts.tab or dns_domain.tab files, or (b) update of the Certificate +Revocation List (CRL) file for the cluster. + +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. @@ -64,8 +67,8 @@ on this system. 'file' is the name of t =head1 ASSUMPTIONS -Assume that loncapa is installedin /home/httpd/lib/perl so that we can use -it's modules. If this is not the case, you mus modify the +Assume that loncapa is installed in /home/httpd/lib/perl so that we can use +it's modules. If this is not the case, you must modify the use lib line in the program before you can use it. @@ -153,7 +156,8 @@ sub usage { print STDERR " subcommand describes what to actually do:\n"; print STDERR " help - Prints this message (args ignored)\n"; print STDERR " update - Updates an administrative file\n"; - print STDERR " args is one of dns_hosts.tab or dns_domain.tab\n"; + print STDERR " args is one of dns_hosts.tab, dns_domain.tab\n"; + print STDERR " or loncapaCAcrl.pem\n"; } @@ -182,8 +186,14 @@ my $logfile = $config{'lonDaemons'}.'/lo sub construct_table_path { my ($basename) = @_; - my $directory = $config{'lonTabDir'}; - + my $directory; + if ($basename eq 'managers.tab') { + $directory = $config{'lonTabDir'}; + } elsif ($basename eq 'loncapaCAcrl.pem') { + $directory = $config{'lonCertificateDirectory'}; + } elsif ($basename =~ /^(dns_|)(hosts|domain)\.tab$/) { + $directory = $config{'lonTabDir'}; + } return $directory . '/' . $basename; } @@ -197,14 +207,15 @@ sub get_dns_hosts() { my @result; my $hosts_tab = &construct_table_path('hosts.tab'); - open(HOSTS, "<$hosts_tab"); - while (my $line = ) { - chomp($line); - if ($line =~ /^\^/) { - if ($line =~ /^\^([\w.\-]+)/) { - push(@result,$1); - } - } + if (open(HOSTS,'<',$hosts_tab)) { + while (my $line = ) { + chomp($line); + if ($line =~ /^\^/) { + if ($line =~ /^\^([\w.\-]+)/) { + push(@result,$1); + } + } + } } return (@result); } @@ -230,7 +241,7 @@ sub push_file { my $contents; my $line; - open(FILE, "<$pushfile"); + open(FILE,'<',$pushfile); while ($line = ) { $contents .= $line; } @@ -281,16 +292,22 @@ sub update_file { # Validate the filename: if (($filename eq 'dns_hosts.tab') || ($filename eq 'dns_domain.tab') || - ($filename eq 'hosts.tab') || ($filename eq 'domain.tab')) { + ($filename eq 'hosts.tab') || ($filename eq 'domain.tab') || + ($filename eq 'loncapaCAcrl.pem')) { my ($result,$fh); if (!-e $logfile) { system("touch $logfile"); system("chown www:www $logfile"); } - if (open ($fh,">>$logfile")) { + if (open ($fh,'>>',$logfile)) { print $fh "clusteradmin update started: ".localtime(time)."\n"; my $pushfile = &construct_table_path($filename); - my $specifier = basename($filename, ('.tab')); + my @hosts = (&get_dns_hosts()); + my $ext = 'tab'; + if ($filename eq 'loncapaCAcrl.pem') { + $ext = 'pem'; + } + my $specifier = basename($filename, (".$ext")); my @hosts = (&get_dns_hosts()); $result = &push_file($specifier, $pushfile, \@hosts, $fh); print $fh "ended: ".localtime(time)."\n"; @@ -300,7 +317,7 @@ sub update_file { } return $result; } else { - print STDERR "Only dns_hosts.tab or dns_domain.tab can be updated\n"; + print STDERR "Only dns_hosts.tab, dns_domain.tab or loncapaCAcrl.pem can be updated\n"; &usage(); return 0; }