Removed /usr/local from CDPATH
[clearscm.git] / clearadm / updatesystem.pl
index 9a27a69..1073a85 100755 (executable)
@@ -1,4 +1,4 @@
-#!/usr/bin/perl
+#!/usr/bin/env perl
 
 =pod
 
@@ -73,53 +73,58 @@ my $clearexec = Clearexec->new;
 
 my ($delete, $host, $port);
 
-sub GetFilesystems (%) {
+sub GetFilesystems(%) {
   my (%system) = @_;
   
   # TODO: Unix/Linux systems often vary as to what parameters df supports. The
   # -P is to intended to make this POSIX standard. Need to make sure this works
   # on other systems (i.e. Solaris, HP-UX, Redhat, etc.).
-  my $cmd = $system{type} eq 'Windows' ? 'df -TP' : 'df -l -TP';
+  my $cmd = $system{type} eq 'Windows'
+          ? 'df -TP'
+         : $system{type} eq 'Unix' # I think I need to add a Solaris type
+         ? '/usr/xpg4/bin/df -l -P'
+         : 'df -l -TP';
    
-  my ($status, @output) = $clearexec->execute ($cmd);
+  my ($status, @output) = $clearexec->execute($cmd);
   
-  error "Unable to execute uname -a - $!", $status . join ("\n". @output)
-    if $status;
+  error "Unable to execute $cmd - $! (Status: $status)\n" . join ("\n". @output), $status if $status;
   
   # Real file systems start with "/"
-  @output = grep { /^\// } @output;
+  my @fs = grep { /^\// } @output;
+
+  # Also add lines that start with rpool (This is for Solaris zones
+  push @fs, grep { /^rpool/ } @output;
   
   my @filesystems;
     
-  foreach (@output) {
-       if (/^(\S+)\s+(\S+).+?(\S+)$/) {
+  for (@fs) {
+    if (/^(\S+)\s+(\S+).+?(\S+)$/) {
       my %filesystem;
       
       $filesystem{system}     = $system{name};
-         $filesystem{filesystem} = $1;
-         $filesystem{fstype}     = $2;
-         $filesystem{mount}      = $3;
+      $filesystem{filesystem} = $1;
+      $filesystem{fstype}     = $2;
+      $filesystem{mount}      = $3;
 
       push @filesystems, \%filesystem;    
-       } # if
-  } # foreach
+    } # if
+  } # for
   
   return @filesystems;
 } # GetFilesystems
 
-sub GatherSysInfo (;%) {
+sub GatherSysInfo(;%) {
   my (%system) = @_;
 
   # Set name if not currently set  
-  $system{name} = $host
-    unless $system{name};
+  $system{name} = $host unless $system{name};
     
   my ($status, @output);
   
   $system{port} ||= $port;
 
   # Connect to clearexec server
-  $status = $clearexec->connectToServer ($system{name}, $system{port});
+  $status = $clearexec->connectToServer($system{name}, $system{port});
 
   unless ($status) {
     warning "Unable to connect to $system{name}:$port";
@@ -129,10 +134,9 @@ sub GatherSysInfo (;%) {
   # Get OS info
   my $cmd = 'uname -a';
 
-  ($status, @output) = $clearexec->execute ($cmd);
+  ($status, @output) = $clearexec->execute($cmd);
   
-  error "Unable to execute '$cmd' - $!", $status . join ("\n". @output)
-    if $status;
+  error "Unable to execute '$cmd' - $!", $status . join("\n". @output) if $status;
   
   $system{os} = $output[0];
   
@@ -140,26 +144,31 @@ sub GatherSysInfo (;%) {
   
   $cmd = 'uname -s';
   
-  ($status, @output) = $clearexec->execute ($cmd);
+  ($status, @output) = $clearexec->execute($cmd);
 
-  error "Unable to execute '$cmd' - $!", $status . join ("\n". @output)
-    if $status;
+  error "Unable to execute '$cmd' - $!", $status . join("\n". @output) if $status;
   
   # TODO: Need to handle this better
-  $system{type} = $output[0] =~ /cygwin/i ? 'Windows' : $output[0];
+  if ($output[0] =~ /sunos/i) {
+    $system{type} = 'Unix';
+  } elsif ($output[0] =~ /cygwin/i) {
+    $system{type} = 'Windows';
+  } else {
+    $system{type} = 'Linux';
+  } # if
   
   return %system;  
 } # GatherSysInfo
 
-sub AddFilesystems (%) {
+sub AddFilesystems(%) {
   my (%system) = @_;
 
   my ($err, $msg);
     
-  foreach (GetFilesystems %system) {
+  for (GetFilesystems %system) {
     my %filesystem = %{$_};
     
-    my %oldfilesystem = $clearadm->GetFilesystem (
+    my %oldfilesystem = $clearadm->GetFilesystem(
       $filesystem{system},
       $filesystem{filesystem}
     );
@@ -167,31 +176,29 @@ sub AddFilesystems (%) {
     if (%oldfilesystem) {
       verbose "Updating filesystem $filesystem{system}:$filesystem{filesystem}";
       
-      ($err, $msg) = $clearadm->UpdateFilesystem (
+      ($err, $msg) = $clearadm->UpdateFilesystem(
         $filesystem{system},
         $filesystem{filesystem},
         %filesystem,
       );
       
       error 'Unable to update filesystem '
-          . "$filesystem{system}:$filesystem{filesystem}"
-        if $err;
+          . "$filesystem{system}:$filesystem{filesystem}" if $err;
     } else {
       verbose 'Adding filesystem '
             . "$filesystem{system}:$filesystem{filesystem}";
     
-      ($err, $msg) = $clearadm->AddFilesystem (%filesystem);
+      ($err, $msg) = $clearadm->AddFilesystem(%filesystem);
 
       error 'Unable to add filesystem '
-          . "$filesystem{system}:$filesystem{filesystem}"
-        if $err;
-    } # if      
-  } # foreach
+          . "$filesystem{system}:$filesystem{filesystem}" if $err;
+    } # if
+  } # for
   
   return ($err, $msg);  
 } # AddFilesystems
 
-sub AddSystem ($) {
+sub AddSystem($) {
   my ($system) = @_;
   
   verbose "Adding newhost $system";
@@ -201,10 +208,9 @@ sub AddSystem ($) {
   # If GatherSysInfo was able to connect to clearagent it will set this field
   my $clearagent = delete $system{clearagent};
   
-  my ($err, $msg) = $clearadm->AddSystem (%system);
+  my ($err, $msg) = $clearadm->AddSystem(%system);
   
-  return ($err, $msg)
-    if $err;
+  return ($err, $msg) if $err;
     
   if ($clearagent) {
     return AddFilesystems %system;
@@ -213,12 +219,12 @@ sub AddSystem ($) {
   } # if
 } # AddSystem
 
-sub UpdateSystem (%) {
+sub UpdateSystem(%) {
   my (%system) = @_;
   
   my ($err, $msg);
   
-  %system = GatherSysInfo (%system);
+  %system = GatherSysInfo(%system);
   
   # If GatherSysInfo was able to connect to clearagent it will set this field
   my $clearagent = delete $system{clearagent};
@@ -227,7 +233,7 @@ sub UpdateSystem (%) {
   
   verbose "Updating existing host $system{name}";
   
-  ($err, $msg) = $clearadm->UpdateSystem ($system{name}, %system);
+  ($err, $msg) = $clearadm->UpdateSystem($system{name}, %system);
     
   return ($err, $msg) if $err;
 
@@ -242,7 +248,7 @@ sub UpdateSystem (%) {
 $host = hostname;
 $port = $Clearexec::CLEAROPTS{CLEAREXEC_PORT};
 
-GetOptions (
+GetOptions(
   'usage'   => sub { Usage },
   'verbose' => sub { set_verbose },
   'debug'   => sub { set_debug },
@@ -251,12 +257,10 @@ GetOptions (
   'port=s'  => \$port,
 ) or Usage "Invalid parameter";
 
-Usage 'Extraneous options: ' . join ' ', @ARGV
-  if @ARGV;
+Usage 'Extraneous options: ' . join ' ', @ARGV if @ARGV;
 
 if ($delete) {
-  error "Must specify -host if you specify -delete", 1
-    unless $host;
+  error "Must specify -host if you specify -delete", 1 unless $host;
 } # if
 
 # Announce ourselves
@@ -270,7 +274,7 @@ if ($delete) {
   my $answer = <STDIN>;
   
   if ($answer =~ /(y|yes)/i) {
-    ($err, $msg) = $clearadm->DeleteSystem ($host);
+    ($err, $msg) = $clearadm->DeleteSystem($host);
   
     if ($err == 0) {
        error "No host named $host in database";
@@ -284,21 +288,20 @@ if ($delete) {
   } # if
 } else {
   if ($host eq 'all') {
-    foreach ($clearadm->FindSystem) {
+    for ($clearadm->FindSystem) {
       my %system = %$_;
       
-      ($err, $msg) = UpdateSystem (%system);
+      ($err, $msg) = UpdateSystem(%system);
   
-      error "Unable to update host $system{name}\n$msg", $err
-        if $err;
-    } # foreach
+      error "Unable to update host $system{name}\n$msg", $err if $err;
+    } # for
   } else {
-    my %system = $clearadm->GetSystem ($host);
+    my %system = $clearadm->GetSystem($host);
     
     if (%system) {
-      ($err, $msg) = UpdateSystem (%system);
+      ($err, $msg) = UpdateSystem(%system);
     } else {
-      ($err, $msg) = AddSystem ($host);
+      ($err, $msg) = AddSystem($host);
     } # if
 
     if ($err) {
@@ -345,10 +348,10 @@ L<Sys::Hostname|Sys::Hostname>
 =begin html
 
 <blockquote>
-<a href="http://clearscm.com/php/cvs_man.php?file=clearadm/lib/Clearadm.pm">Clearadm</a><br>
-<a href="http://clearscm.com/php/cvs_man.php?file=clearadm/lib/Clearexec.pm">Clearexec</a><br>
-<a href="http://clearscm.com/php/cvs_man.php?file=lib/Display.pm">Display</a><br>
-<a href="http://clearscm.com/php/cvs_man.php?file=lib/Utils.pm">Utils</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/Clearadm.pm">Clearadm</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=clearadm/lib/Clearexec.pm">Clearexec</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Display.pm">Display</a><br>
+<a href="http://clearscm.com/php/scm_man.php?file=lib/Utils.pm">Utils</a><br>
 </blockquote>
 
 =end html