Refs #5077
This commit is contained in:
parent
143240f6c4
commit
a7ace615bf
|
@ -56,6 +56,8 @@ sub new {
|
|||
"password:s" => { name => 'password' },
|
||||
"timeout:s" => { name => 'timeout', default => 30 },
|
||||
"memory" => { name => 'memory' },
|
||||
"command-plink:s" => { name => 'command_plink', default => 'plink' },
|
||||
"ssh" => { name => 'ssh' },
|
||||
});
|
||||
$self->{statefile_cache} = centreon::plugins::statefile->new(%options);
|
||||
return $self;
|
||||
|
@ -81,6 +83,10 @@ sub check_options {
|
|||
if (defined($self->{option_results}->{memory})) {
|
||||
$self->{statefile_cache}->check_options(%options);
|
||||
}
|
||||
|
||||
if (!defined($self->{option_results}->{ssh})) {
|
||||
require hardware::server::sun::mgmt_cards::lib::telnet;
|
||||
}
|
||||
}
|
||||
|
||||
sub telnet_shell_plateform {
|
||||
|
@ -99,18 +105,65 @@ sub telnet_shell_plateform {
|
|||
$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 {
|
||||
my ($self, %options) = @_;
|
||||
|
||||
my $telnet_handle = hardware::server::sun::mgmt_cards::lib::telnet::connect(
|
||||
username => $self->{option_results}->{username},
|
||||
password => $self->{option_results}->{password},
|
||||
hostname => $self->{option_results}->{hostname},
|
||||
port => $self->{option_results}->{port},
|
||||
timeout => $self->{option_results}->{timeout},
|
||||
output => $self->{output},
|
||||
closure => \&telnet_shell_plateform);
|
||||
my @lines = $telnet_handle->cmd("showboards");
|
||||
my ($output, @lines);
|
||||
|
||||
if (defined($self->{option_results}->{ssh})) {
|
||||
$output = $self->ssh_command();
|
||||
@lines = split /\n/, $output;
|
||||
} else {
|
||||
my $telnet_handle = hardware::server::sun::mgmt_cards::lib::telnet::connect(
|
||||
username => $self->{option_results}->{username},
|
||||
password => $self->{option_results}->{password},
|
||||
hostname => $self->{option_results}->{hostname},
|
||||
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})) {
|
||||
$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).
|
||||
|
||||
=item B<--command-plink>
|
||||
|
||||
Plink command (default: plink). Use to set a path.
|
||||
|
||||
=item B<--ssh>
|
||||
|
||||
Use ssh (with plink) instead of telnet.
|
||||
|
||||
=back
|
||||
|
||||
=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 'showfaults': ALOM4v (in T1xxx, T2xxx) (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 'environment-v8xx': RSC cards (v890, v880) (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]
|
||||
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.begin_match = ^System LED Status:\s+
|
||||
|
@ -132,10 +132,9 @@ checks.PSU.begin_match = ^Power Supplies:
|
|||
checks.PSU.end_match = ^=
|
||||
checks.PSU.data_match = ^(.*?\d+)\s+\[\s*(\S+)\s*\]
|
||||
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%'
|
||||
|
||||
|
||||
[Enterprise 150]
|
||||
system.match = ^System Configuration:.*Sun Ultra 1 SBus
|
||||
system.checks = Boards
|
||||
|
@ -343,7 +342,7 @@ checks.Boards.data_labels = Diagnosis
|
|||
checks.Boards.ok_condition = "%Diagnosis%" =~ m/^No /
|
||||
checks.Boards.output_string = System diagnosis for IO cards is '%Diagnosis%'
|
||||
|
||||
|
||||
# OK Merethis
|
||||
[SunFire V240]
|
||||
system.match = ^System Configuration:.*Sun Fire V240
|
||||
system.checks = Fans,Leds,Temperatures,Voltages,Current,FRU
|
||||
|
@ -403,7 +402,15 @@ checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
|||
# OK Merethis
|
||||
[SunFire 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.begin_match = ^Fan Speeds:
|
||||
|
@ -457,7 +464,7 @@ checks.FRU.data_labels = Location,Status
|
|||
checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
|
||||
checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
||||
|
||||
|
||||
# Ok Merethis
|
||||
[SunFire V490]
|
||||
system.match = ^System Configuration:.*Sun Fire V490
|
||||
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.begin_match = ^System LED Status:
|
||||
checks.Leds.end_match = ^=
|
||||
checks.Leds.fetch_mode = linear
|
||||
checks.Leds.skip_match = ^-+
|
||||
checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
|
||||
checks.Leds.data_labels = Location,Status
|
||||
checks.Leds.ok_condition = not( ( "%Location%" eq "FAULT" ) and ("%Status%" eq "ON") )
|
||||
checks.Leds.output_string = System LED '%Location%' status is '%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:
|
||||
|
@ -505,7 +510,53 @@ 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 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]
|
||||
system.match = ^System Configuration:.*Sun Fire 880
|
||||
system.checks = Boards,Temperatures,Leds,Disks,Fans,PSU
|
||||
|
@ -534,7 +585,7 @@ checks.Leds.skip_match = ^$
|
|||
checks.Leds.fetch_mode = linear
|
||||
checks.Leds.data_match = ((?:\S+\s)*\S+),\[\s*(.*?)\s*\]
|
||||
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.Disks.description = disks status
|
||||
|
@ -626,5 +677,3 @@ checks.FRU.data_match = ^(\S+)\s+(\S+)
|
|||
checks.FRU.data_labels = Location,Status
|
||||
checks.FRU.ok_condition = "%Status%" =~ m/present|okay/
|
||||
checks.FRU.output_string = FRU '%Location%' status is '%Status%'
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue