Refs #5077
This commit is contained in:
parent
143240f6c4
commit
a7ace615bf
|
@ -56,6 +56,8 @@ sub new {
|
||||||
"password:s" => { name => 'password' },
|
"password:s" => { name => 'password' },
|
||||||
"timeout:s" => { name => 'timeout', default => 30 },
|
"timeout:s" => { name => 'timeout', default => 30 },
|
||||||
"memory" => { name => 'memory' },
|
"memory" => { name => 'memory' },
|
||||||
|
"command-plink:s" => { name => 'command_plink', default => 'plink' },
|
||||||
|
"ssh" => { name => 'ssh' },
|
||||||
});
|
});
|
||||||
$self->{statefile_cache} = centreon::plugins::statefile->new(%options);
|
$self->{statefile_cache} = centreon::plugins::statefile->new(%options);
|
||||||
return $self;
|
return $self;
|
||||||
|
@ -81,6 +83,10 @@ sub check_options {
|
||||||
if (defined($self->{option_results}->{memory})) {
|
if (defined($self->{option_results}->{memory})) {
|
||||||
$self->{statefile_cache}->check_options(%options);
|
$self->{statefile_cache}->check_options(%options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!defined($self->{option_results}->{ssh})) {
|
||||||
|
require hardware::server::sun::mgmt_cards::lib::telnet;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sub telnet_shell_plateform {
|
sub telnet_shell_plateform {
|
||||||
|
@ -99,18 +105,65 @@ sub telnet_shell_plateform {
|
||||||
$telnet_handle->print("0");
|
$telnet_handle->print("0");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub ssh_command {
|
||||||
|
my ($self, %options) = @_;
|
||||||
|
my $username = '';
|
||||||
|
|
||||||
|
if (defined($self->{option_results}->{username}) && $self->{option_results}->{username} ne '') {
|
||||||
|
$username = $self->{option_results}->{username} . '\n';
|
||||||
|
}
|
||||||
|
|
||||||
|
my $cmd_in = "0" . $username . $self->{option_results}->{password} . '\nshowboards\ndisconnect\n';
|
||||||
|
my $cmd = "echo -e '$cmd_in' | " . $self->{option_results}->{command_plink} . " -batch " . $self->{option_results}->{hostname} . " 2>&1";
|
||||||
|
my ($lerror, $stdout, $exit_code) = centreon::plugins::misc::backtick(
|
||||||
|
command => $cmd,
|
||||||
|
timeout => $self->{option_results}->{timeout},
|
||||||
|
wait_exit => 1
|
||||||
|
);
|
||||||
|
$stdout =~ s/\r//g;
|
||||||
|
if ($lerror <= -1000) {
|
||||||
|
$self->{output}->output_add(severity => 'UNKNOWN',
|
||||||
|
short_msg => $stdout);
|
||||||
|
$self->{output}->display();
|
||||||
|
$self->{output}->exit();
|
||||||
|
}
|
||||||
|
if ($exit_code != 0) {
|
||||||
|
$stdout =~ s/\n/ - /g;
|
||||||
|
$self->{output}->output_add(severity => 'UNKNOWN',
|
||||||
|
short_msg => "Command error: $stdout");
|
||||||
|
$self->{output}->display();
|
||||||
|
$self->{output}->exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($stdout !~ /Slot/mi) {
|
||||||
|
$self->{output}->output_add(long_msg => $stdout);
|
||||||
|
$self->{output}->output_add(severity => 'UNKNOWN',
|
||||||
|
short_msg => "Command 'showboards' problems (see additional info).");
|
||||||
|
$self->{output}->display();
|
||||||
|
$self->{output}->exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
return $stdout;
|
||||||
|
}
|
||||||
|
|
||||||
sub run {
|
sub run {
|
||||||
my ($self, %options) = @_;
|
my ($self, %options) = @_;
|
||||||
|
my ($output, @lines);
|
||||||
|
|
||||||
my $telnet_handle = hardware::server::sun::mgmt_cards::lib::telnet::connect(
|
if (defined($self->{option_results}->{ssh})) {
|
||||||
username => $self->{option_results}->{username},
|
$output = $self->ssh_command();
|
||||||
password => $self->{option_results}->{password},
|
@lines = split /\n/, $output;
|
||||||
hostname => $self->{option_results}->{hostname},
|
} else {
|
||||||
port => $self->{option_results}->{port},
|
my $telnet_handle = hardware::server::sun::mgmt_cards::lib::telnet::connect(
|
||||||
timeout => $self->{option_results}->{timeout},
|
username => $self->{option_results}->{username},
|
||||||
output => $self->{output},
|
password => $self->{option_results}->{password},
|
||||||
closure => \&telnet_shell_plateform);
|
hostname => $self->{option_results}->{hostname},
|
||||||
my @lines = $telnet_handle->cmd("showboards");
|
port => $self->{option_results}->{port},
|
||||||
|
timeout => $self->{option_results}->{timeout},
|
||||||
|
output => $self->{output},
|
||||||
|
closure => \&telnet_shell_plateform);
|
||||||
|
@lines = $telnet_handle->cmd("showboards");
|
||||||
|
}
|
||||||
|
|
||||||
if (defined($self->{option_results}->{memory})) {
|
if (defined($self->{option_results}->{memory})) {
|
||||||
$self->{statefile_cache}->read(statefile => 'cache_sun_mgmtcards_' . $self->{option_results}->{hostname} . '_' . $self->{mode});
|
$self->{statefile_cache}->read(statefile => 'cache_sun_mgmtcards_' . $self->{option_results}->{hostname} . '_' . $self->{mode});
|
||||||
|
@ -196,6 +249,14 @@ Returns new errors (retention file is used by the following option).
|
||||||
|
|
||||||
Timeout in seconds for the command (Default: 30).
|
Timeout in seconds for the command (Default: 30).
|
||||||
|
|
||||||
|
=item B<--command-plink>
|
||||||
|
|
||||||
|
Plink command (default: plink). Use to set a path.
|
||||||
|
|
||||||
|
=item B<--ssh>
|
||||||
|
|
||||||
|
Use ssh (with plink) instead of telnet.
|
||||||
|
|
||||||
=back
|
=back
|
||||||
|
|
||||||
=cut
|
=cut
|
||||||
|
|
|
@ -70,7 +70,7 @@ Check a variety of Sun Hardware through management cards:
|
||||||
- mode 'show-faulty': ILOM (T3-x, T4-x, T5xxx) (in ssh with 'plink' command) ;
|
- mode 'show-faulty': ILOM (T3-x, T4-x, T5xxx) (in ssh with 'plink' command) ;
|
||||||
- mode 'showfaults': ALOM4v (in T1xxx, T2xxx) (in ssh with 'plink' command) ;
|
- mode 'showfaults': ALOM4v (in T1xxx, T2xxx) (in ssh with 'plink' command) ;
|
||||||
- mode 'showstatus': XSCF (Mxxxx - M3000, M4000, M5000,...) (in ssh with 'plink' command) ;
|
- mode 'showstatus': XSCF (Mxxxx - M3000, M4000, M5000,...) (in ssh with 'plink' command) ;
|
||||||
- mode 'showboards': ScApp (SFxxxx - sf6900, sf6800, sf3800,...) (in telnet with Net::Telnet) ;
|
- mode 'showboards': ScApp (SFxxxx - sf6900, sf6800, sf3800,...) (in telnet with Net::Telnet or in ssh with 'plink' command) ;
|
||||||
- mode 'showenvironment': ALOM (v240, v440, v245,...) (in telnet with Net::Telnet or in ssh with 'plink' command) ;
|
- mode 'showenvironment': ALOM (v240, v440, v245,...) (in telnet with Net::Telnet or in ssh with 'plink' command) ;
|
||||||
- mode 'environment-v8xx': RSC cards (v890, v880) (in telnet with Net::Telnet) ;
|
- mode 'environment-v8xx': RSC cards (v890, v880) (in telnet with Net::Telnet) ;
|
||||||
- mode 'environment-v4xx': RSC cards (v480, v490) (in telnet with Net::Telnet) ;
|
- mode 'environment-v4xx': RSC cards (v480, v490) (in telnet with Net::Telnet) ;
|
||||||
|
|
|
@ -100,7 +100,7 @@ checks.FRU.output_string = FRU '%Location%' operationnal status is '%Status%'
|
||||||
|
|
||||||
[SunFire 280R]
|
[SunFire 280R]
|
||||||
system.match = ^System Configuration:.*Sun Fire 280R
|
system.match = ^System Configuration:.*Sun Fire 280R
|
||||||
system.checks = Leds,Fans,Disks,PSU
|
system.checks = Leds,Fans,Disks,PSU,IO
|
||||||
|
|
||||||
checks.Leds.description = system leds status
|
checks.Leds.description = system leds status
|
||||||
checks.Leds.begin_match = ^System LED Status:\s+
|
checks.Leds.begin_match = ^System LED Status:\s+
|
||||||
|
@ -132,10 +132,9 @@ checks.PSU.begin_match = ^Power Supplies:
|
||||||
checks.PSU.end_match = ^=
|
checks.PSU.end_match = ^=
|
||||||
checks.PSU.data_match = ^(.*?\d+)\s+\[\s*(\S+)\s*\]
|
checks.PSU.data_match = ^(.*?\d+)\s+\[\s*(\S+)\s*\]
|
||||||
checks.PSU.data_labels = Supply,Status
|
checks.PSU.data_labels = Supply,Status
|
||||||
checks.PSU.ok_condition = "%Status%" eq "OK"
|
checks.PSU.ok_condition = "%Status%" =~ m/^OK|NO_FAULT$/
|
||||||
checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
|
checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
|
||||||
|
|
||||||
|
|
||||||
[Enterprise 150]
|
[Enterprise 150]
|
||||||
system.match = ^System Configuration:.*Sun Ultra 1 SBus
|
system.match = ^System Configuration:.*Sun Ultra 1 SBus
|
||||||
system.checks = Boards
|
system.checks = Boards
|
||||||
|
@ -343,7 +342,7 @@ checks.Boards.data_labels = Diagnosis
|
||||||
checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
|
checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
|
||||||
checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
|
checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
|
||||||
|
|
||||||
|
# OK Merethis
|
||||||
[SunFire V240]
|
[SunFire V240]
|
||||||
system.match = ^System Configuration:.*Sun Fire V240
|
system.match = ^System Configuration:.*Sun Fire V240
|
||||||
system.checks = Fans,Leds,Temperatures,Voltages,Current,FRU
|
system.checks = Fans,Leds,Temperatures,Voltages,Current,FRU
|
||||||
|
@ -403,7 +402,15 @@ checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
||||||
# OK Merethis
|
# OK Merethis
|
||||||
[SunFire V440]
|
[SunFire V440]
|
||||||
system.match = ^System Configuration:.*Sun Fire V440
|
system.match = ^System Configuration:.*Sun Fire V440
|
||||||
system.checks = Fans,Leds,Temperatures,Voltages,Current,FRU
|
system.checks = CPU,Fans,Leds,Temperatures,Voltages,Current,FRU
|
||||||
|
|
||||||
|
checks.CPU.description = CPU status
|
||||||
|
checks.CPU.begin_match = ^=+ CPUs =
|
||||||
|
checks.CPU.end_match = ^$
|
||||||
|
checks.CPU.data_match = ^\s*(\d+)\s+(?:.*?)\s+(\S+)\s+(\S+)\s*$
|
||||||
|
checks.CPU.data_labels = CPU,Status,Location
|
||||||
|
checks.CPU.ok_condition = "%Status%" =~ m/^on-line|online$/
|
||||||
|
checks.CPU.output_string = CPU%CPU% ('%Location%') status is '%Status%'
|
||||||
|
|
||||||
checks.Fans.description = fans status
|
checks.Fans.description = fans status
|
||||||
checks.Fans.begin_match = ^Fan Speeds:
|
checks.Fans.begin_match = ^Fan Speeds:
|
||||||
|
@ -457,7 +464,7 @@ checks.FRU.data_labels = Location,Status
|
||||||
checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
|
checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
|
||||||
checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
||||||
|
|
||||||
|
# Ok Merethis
|
||||||
[SunFire V490]
|
[SunFire V490]
|
||||||
system.match = ^System Configuration:.*Sun Fire V490
|
system.match = ^System Configuration:.*Sun Fire V490
|
||||||
system.checks = Temperatures,Leds,Disks,Fans,PSU
|
system.checks = Temperatures,Leds,Disks,Fans,PSU
|
||||||
|
@ -473,13 +480,11 @@ checks.Temperatures.output_string = Temperature sensor '%Sensor%' status is '%St
|
||||||
|
|
||||||
checks.Leds.description = system leds status
|
checks.Leds.description = system leds status
|
||||||
checks.Leds.begin_match = ^System LED Status:
|
checks.Leds.begin_match = ^System LED Status:
|
||||||
checks.Leds.end_match = ^=
|
checks.Leds.end_match = :$
|
||||||
checks.Leds.fetch_mode = linear
|
checks.Leds.data_match = ^\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]
|
||||||
checks.Leds.skip_match = ^-+
|
checks.Leds.data_labels = Location,Failure,Running
|
||||||
checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
|
checks.Leds.ok_condition = "%Failure%" ne "ON"
|
||||||
checks.Leds.data_labels = Location,Status
|
checks.Leds.output_string = System failure led status is '%Failure%'
|
||||||
checks.Leds.ok_condition = not( ( "%Location%" eq "FAULT" ) and ("%Status%" eq "ON") )
|
|
||||||
checks.Leds.output_string = System LED '%Location%' status is '%Status%'
|
|
||||||
|
|
||||||
checks.Disks.description = disks status
|
checks.Disks.description = disks status
|
||||||
checks.Disks.begin_match = ^Disk Status:
|
checks.Disks.begin_match = ^Disk Status:
|
||||||
|
@ -505,7 +510,53 @@ checks.PSU.data_labels = Supply,Status
|
||||||
checks.PSU.ok_condition = "%Status%" eq "NO_FAULT"
|
checks.PSU.ok_condition = "%Status%" eq "NO_FAULT"
|
||||||
checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
|
checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
|
||||||
|
|
||||||
|
# Ok Merethis
|
||||||
|
[SunFire 480]
|
||||||
|
system.match = ^System Configuration:.*Sun Fire 480
|
||||||
|
system.checks = Temperatures,Leds,Disks,Fans,PSU
|
||||||
|
|
||||||
|
checks.Temperatures.description = temperature sensors
|
||||||
|
checks.Temperatures.begin_match = ^System Temperatures.*:
|
||||||
|
checks.Temperatures.end_match = ^$
|
||||||
|
checks.Temperatures.skip_match = ^Device
|
||||||
|
checks.Temperatures.data_match = ^(\S+)\s+(\S+)\s+(\S+)$
|
||||||
|
checks.Temperatures.data_labels = Sensor,Temperature,Status
|
||||||
|
checks.Temperatures.ok_condition = ( "%Status%" eq "OK" )
|
||||||
|
checks.Temperatures.output_string = Temperature sensor '%Sensor%' status is '%Status%' (temp.: %Temperature% deg.)
|
||||||
|
|
||||||
|
checks.Leds.description = system leds status
|
||||||
|
checks.Leds.begin_match = ^System LED Status:
|
||||||
|
checks.Leds.end_match = :$
|
||||||
|
checks.Leds.data_match = ^\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]\s+\[\s*(.*?)\s*\]
|
||||||
|
checks.Leds.data_labels = Location,Failure,Running
|
||||||
|
checks.Leds.ok_condition = "%Failure%" ne "ON"
|
||||||
|
checks.Leds.output_string = System failure led status is '%Failure%'
|
||||||
|
|
||||||
|
checks.Disks.description = disks status
|
||||||
|
checks.Disks.begin_match = ^Disk Status:
|
||||||
|
checks.Disks.end_match = ^$
|
||||||
|
checks.Disks.data_match = ^(.*?\d+)(?:.*?)\[\s*(\S+)\s*\]\s*$
|
||||||
|
checks.Disks.data_labels = Disk,Status
|
||||||
|
checks.Disks.ok_condition = "%Status%" eq "NO_FAULT"
|
||||||
|
checks.Disks.output_string = Disk '%Disk%' status is '%Status%'
|
||||||
|
|
||||||
|
checks.Fans.description = fans status
|
||||||
|
checks.Fans.begin_match = ^Fan Status:
|
||||||
|
checks.Fans.end_match = ^=
|
||||||
|
checks.Fans.data_match = ^(\S+)\s+(\S+)\s+(.*?)\s+\[\s*(\S+)\s*\]
|
||||||
|
checks.Fans.data_labels = Tray,Fan,Speed,Status
|
||||||
|
checks.Fans.ok_condition = "%Status%" eq "NO_FAULT"
|
||||||
|
checks.Fans.output_string = Fan '%Tray%/%Fan%' status is '%Status%' (speed: %Speed% rpm)
|
||||||
|
|
||||||
|
checks.PSU.description = power supplies status
|
||||||
|
checks.PSU.begin_match = ^Power Supplies:
|
||||||
|
checks.PSU.end_match = ^=
|
||||||
|
checks.PSU.data_match = ^(.*?)\s+\[\s*(\S+)\s*\]
|
||||||
|
checks.PSU.data_labels = Supply,Status
|
||||||
|
checks.PSU.ok_condition = "%Status%" eq "NO_FAULT"
|
||||||
|
checks.PSU.output_string = Power supply '%Supply%' status is '%Status%'
|
||||||
|
|
||||||
|
# OK Merethis
|
||||||
[SunFire 880]
|
[SunFire 880]
|
||||||
system.match = ^System Configuration:.*Sun Fire 880
|
system.match = ^System Configuration:.*Sun Fire 880
|
||||||
system.checks = Boards,Temperatures,Leds,Disks,Fans,PSU
|
system.checks = Boards,Temperatures,Leds,Disks,Fans,PSU
|
||||||
|
@ -534,7 +585,7 @@ checks.Leds.skip_match = ^$
|
||||||
checks.Leds.fetch_mode = linear
|
checks.Leds.fetch_mode = linear
|
||||||
checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
|
checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
|
||||||
checks.Leds.data_labels = Location,Status
|
checks.Leds.data_labels = Location,Status
|
||||||
checks.Leds.ok_condition = not( ( "%Location%" eq "FAULT" ) and ("%Status%" eq "ON") )
|
checks.Leds.ok_condition = not( ( "%Location%" =~ /FAULT/ ) and ("%Status%" eq "ON") )
|
||||||
checks.Leds.output_string = System LED '%Location%' status is '%Status%'
|
checks.Leds.output_string = System LED '%Location%' status is '%Status%'
|
||||||
|
|
||||||
checks.Disks.description = disks status
|
checks.Disks.description = disks status
|
||||||
|
@ -626,5 +677,3 @@ checks.FRU.data_match = ^(\S+)\s+(\S+)
|
||||||
checks.FRU.data_labels = Location,Status
|
checks.FRU.data_labels = Location,Status
|
||||||
checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
|
checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
|
||||||
checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue