Diff for /loncom/clusteradmin between versions 1.4 and 1.6

version 1.4, 2011/05/12 14:08:54 version 1.6, 2018/08/20 22:27:16
Line 1 Line 1
 #!/usr/bin/perl  #!/usr/bin/perl
   # The LearningOnline Network with CAPA
   # Push admin files from cluster manager to cluster's "name servers".
   #
   # $Id$
   #
   # Copyright Michigan State University Board of Trustees
   #
   # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
   # LON-CAPA is free software; you can redistribute it and/or modify
   # it under the terms of the GNU General Public License as published by
   # the Free Software Foundation; either version 2 of the License, or
   # (at your option) any later version.
   #
   # LON-CAPA is distributed in the hope that it will be useful,
   # but WITHOUT ANY WARRANTY; without even the implied warranty of
   # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   # GNU General Public License for more details.
   #
   # You should have received a copy of the GNU General Public License
   # along with LON-CAPA; if not, write to the Free Software
   # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   #
   # /home/httpd/html/adm/gpl.txt
   #
   # http://www.lon-capa.org/
   
 =pod  =pod
   
Line 152  sub usage { Line 177  sub usage {
   
 my $config_vars = LONCAPA::Configuration::read_conf('loncapa.conf');  my $config_vars = LONCAPA::Configuration::read_conf('loncapa.conf');
 my %config = %{$config_vars};  my %config = %{$config_vars};
   my $logfile = $config{'lonDaemons'}.'/logs/dns_updates.log';
   
   
 sub construct_table_path {  sub construct_table_path {
Line 175  sub get_dns_hosts() Line 201  sub get_dns_hosts()
     while (my $line = <HOSTS>) {      while (my $line = <HOSTS>) {
  chomp($line);   chomp($line);
  if ($line =~ /^\^/) {   if ($line =~ /^\^/) {
     $line =~ s/^\^//;           # Get rid of leading ^              if ($line =~ /^\^([\w.\-]+)/) {
     $line =~ s/\s*$//;          # and any trailing whitespace.                  push(@result,$1);
     push(@result, $line);              }
  }   }
     }      }
     return (@result);      return (@result);
Line 198  sub get_dns_hosts() Line 224  sub get_dns_hosts()
 #    0     - Failure with appropriate output to stderr.  #    0     - Failure with appropriate output to stderr.
 #  #
 sub push_file {  sub push_file {
     my ($specifier, $pushfile, $hosts) = @_;      my ($specifier, $pushfile, $hosts, $fh) = @_;
   
     # Read in the entire file:      # Read in the entire file:
   
Line 217  sub push_file { Line 243  sub push_file {
     # Iterate over the hosts and run cmd as a critical       # Iterate over the hosts and run cmd as a critical 
     # operation:      # operation:
   
       my @ids=&Apache::lonnet::current_machine_ids();
     foreach my $host (@$hosts) {      foreach my $host (@$hosts) {
  my $loncapa_name = &Apache::lonnet::host_from_dns($host);   my $loncapa_name = &Apache::lonnet::host_from_dns($host);
         next if ($loncapa_name eq $config{'lonHostID'});          next if (grep(/^\Q$loncapa_name\E$/,@ids));
  my $reply  = &Apache::lonnet::critical($cmd, $loncapa_name);   my $reply  = &Apache::lonnet::critical($cmd, $loncapa_name);
  if ($reply ne 'ok') {          my $msg;
     print STDERR "Reply from $host ($loncapa_name)  not 'ok' was: $reply\n";          if ($reply eq 'ok') {
  }              $msg = "$pushfile pushed to $host ($loncapa_name): $reply\n";
           } else {
               $msg = "Reply from $host ($loncapa_name)  not 'ok' was: $reply\n";
           }
           print $fh $msg;
           print STDERR $msg;
     }      }
           return;   
 }  }
   
 #  #
Line 248  sub update_file { Line 280  sub update_file {
   
  # Validate the filename:   # Validate the filename:
   
  if ($filename eq 'dns_hosts.tab' || $filename eq 'dns_domain.tab') {   if (($filename eq 'dns_hosts.tab') || ($filename eq 'dns_domain.tab') || 
     my $pushfile   = &construct_table_path($filename);              ($filename eq 'hosts.tab') || ($filename eq 'domain.tab')) {
     my $specifier  = basename($filename, ('.tab'));              my ($result,$fh);
     my @hosts         = (&get_dns_hosts());              if (!-e $logfile) {
     return &push_file($specifier, $pushfile,  \@hosts);                  system("touch $logfile");
                   system("chown www:www $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());
           $result = &push_file($specifier, $pushfile,  \@hosts, $fh);
                   print $fh "ended: ".localtime(time)."\n";                 
                   close($fh);
               } else {
                   print STDERR "Could not open $logfile to append. Exiting.\n";
               }
               return $result;
  } else {   } else {
     print STDERR "Only dns_hosts.tab or dns_domain.tab can be updated\n";      print STDERR "Only dns_hosts.tab or dns_domain.tab can be updated\n";
     &usage();      &usage();
Line 301  sub is_manager { Line 347  sub is_manager {
 #  dispatch to the appropriate command processor.  #  dispatch to the appropriate command processor.
 #  #
   
   if ($< != 0) { # Am I root?
      print('You must be root in order to run clusteradmin.'.
            "\n");
      exit(-1);
   }
   
 my $argc = scalar(@ARGV);  my $argc = scalar(@ARGV);
 if ($argc == 0) {  if ($argc == 0) {
     print STDERR "Missing subcommand\n";      print STDERR "Missing subcommand\n";

Removed from v.1.4  
changed lines
  Added in v.1.6


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