-#!/usr/bin/perl
+#!/usr/bin/env perl
=pod
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";
# 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];
$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}
);
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";
# 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;
} # 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};
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;
$host = hostname;
$port = $Clearexec::CLEAROPTS{CLEAREXEC_PORT};
-GetOptions (
+GetOptions(
'usage' => sub { Usage },
'verbose' => sub { set_verbose },
'debug' => sub { set_debug },
'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
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";
} # 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) {