dsa-check-soas: fix error when 0 (or more than 1) records returned
[mirror/dsa-nagios.git] / dsa-nagios-checks / checks / dsa-check-hpssacli
index 8ae7121..2982600 100755 (executable)
@@ -64,13 +64,14 @@ sub record($) {
        };
 }
 
-my $usage = "$PROGRAM_NAME: Usage: $PROGRAM_NAME [--no-battery] [--ignore-controller=<regex>] [--no-controller-ok] [--ignore-transfer-speed=<pd> [--ignore-transfer-speed=<pd> ...]]\n";
+my $usage = "$PROGRAM_NAME: Usage: $PROGRAM_NAME [--no-battery] [--ignore-cache] [--ignore-controller=<regex>] [--no-controller-ok] [--ignore-transfer-speed=<pd> [--ignore-transfer-speed=<pd> ...]]\n";
 my $params;
 Getopt::Long::Configure('bundling');
 if (!GetOptions (
        '--help'                      => \$params->{'help'},
        '--no-battery'                => \$params->{'no-battery'},
        '--no-controller-ok'          => \$params->{'no-controller-ok'},
+       '--ignore-cache'              => \$params->{'ignore-cache'},
        '--ignore-controller=s'       => \$params->{'ignore-controller'},
        '--ignore-transfer-speed=s@'  => \$params->{'ignore-transfer-speed'},
        )) {
@@ -180,12 +181,18 @@ for my $slot (sort @controllers) {
                next if (/^\S.*in Slot $slot/);
                next if /^ *array [A-Z]$/;
                next if /^ *unassigned/;
+               if (/^ *HBA Drives/) {
+                       # HBA mode implies no logical drives, thus reset the "drives found" check and proceed with
+                       # checking physical drives.
+                       $nodrives = 0;
+                       next;
+               }
                if (/^ *(array [A-Z]) \(Failed\)$/) {
                        record('CRITICAL');
                        push @{$status{'Failed'}}, $1;
                } elsif (/^Error: The specified controller does not have any physical drives on it.$/) {
                        $nodrives = 1;
-               } elsif (/^ *physicaldrive (\S+) .* (OK|Predictive Failure|Failed|Rebuilding)(?:, (?:active )?spare)?\)$/) {
+               } elsif (/^ *physicaldrive (\S+) .* (OK|Predictive Failure|Failed|Rebuilding)(?:, (?:active )?spare.*)?\)$/) {
                        my $drive = $1;
                        my $status = $2;
                        push @{$status{$status}}, $drive;
@@ -317,6 +324,10 @@ for my $slot (sort @controllers) {
                                # - 'Permanently Disabled'
                                # - ...?
                                next if $status =~ /^(OK|Not Configured)$/;
+                               if ($params->{'ignore-cache'}) {
+                                       push @freetext, "$system: $status (ignored)";
+                                       next;
+                               }
                        }
 
                        push @freetext, "$system: $status";