2014-09-26T06:47:40 pc-dokEs geht mir um das erweitern eines Befehls, an dem ist dann aber noch ein Output geknüpft, damit dieser im Nagios korrekt ausgegeben wird. Das Problem ist, ich kann zwar den Befehl reinflickeln, aber den Output, da hab ich null Ahnung von dieser ganzen Syntax, (...)
open( NAVICLIOUT, "$NAVICLI_CMD -h $opt_host lun -list -state |" );
Name: POOL_0_VMVOL_07, State: Ready
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
### DOKU ### =pod LOGICAL UNIT NUMBER 7 Name: POOL_0_VMVOL_07 Current State: Ready Und hier stehe ich an, ich muss den Code so anpassen, das der mir für Nagios den Output wie folgt generiert: Name: POOL_0_VMVOL_07, State: Ready Wenn State nicht Ready ist, dann warning! =cut ### /DOKU ### sub check_lun_info { open( NAVICLIOUT, "$NAVICLI_CMD -h $opt_host lun -list -state |" ); my $sp_line = 0; my $error_count = 0; my %out = (); my $warn = 0; while (<NAVICLIOUT>) { # First lets check for errors before proceeding check_for_errors($_); if (/(LOGICAL UNIT NUMBER)\s+(\d+)/) { #$out{lun}="$1 $2"; $out{lun}="$2"; next; } if (/(Name:)\s+(\w+)/) { #$out{name} = "$1 $2"; $out{name} = "$2"; next; } if (/(Current State:)\s+(\w+)/) { #$out{state} = "$1 $2"; $out{state} = "$2"; $warn = uc $out{state} ne 'READY'; ++$error_count if $warn; next; } if (defined $out{state} and defined $out{lun} and defined $out{name}) { $output .= "$out{name}:$out{state},"; %out = (); next; } } close (NAVICLIOUT); if ($error_count == 0 && $output ne "") { $state = 'OK'; } elsif ($output eq "") { $output = "UNKNOWN: No output from $NAVICLI"; $state = 'UNKNOWN'; } else { if ($warn) { $state = 'WARNING'; } else { $state = 'CRITICAL'; } } $output =~ s/,$//; print $output."\n"; exit $states{$state}; }