VMware har flyttet authorized_keys til “/etc/ssh/keys-root/authorized_keys” smid din ssh nøgle herind i, og lav et script der parser output fra /bin/cim-diagnostic.sh

Jeg har lavet et eksempel på et script her som hiver storage-data ud:

<pre><?

## Hent data

exec(“ssh root@vmware.eksempel.com enum_instances VMware_StorageExtent”,$file);

$file = implode(“\n”,$file);
## Pil data fra hinanden
$a=preg_split(“/\n\n/m”,$file);

foreach ($a as $k=>$v)
{
$t=preg_split(“/\n/m”,$v);

foreach ($t as $k2=>$v2)
{
$t2 = preg_split(“/=/”,$v2);
$key=preg_replace(“/ /”,”",$t2[0]);
if ($key)
if ($t2[1] != ” (NULL)”)
$n[$key]=$t2[1];
}
if ($n)
$a2[]=$n;
}

## Goer noget med data

print_r($a2);

?>

Når scriptet udføres, og der vel og mærke er sat ssh  nøgler op, vil scriptet generere flg output:

Array
(
    [0] =&gt; Array
        (
            [HPVC_SAStorageExtent.DeviceID] =&gt; "HPVC_SAStorageExtent-MM1000EBKAF-9XG0LMK0",CreationClassName
            [SystemCreationClassName] =&gt;  SMX_ComputerSystem
            [SystemName] =&gt;  vmware.eksempel.com
            [CreationClassName] =&gt;  HPVC_SAStorageExtent
            [DeviceID] =&gt;  HPVC_SAStorageExtent-MM1000EBKAF-9XG0LMK0
            [Name] =&gt;  9XG0LMK0
            [Primordial] =&gt;  true
            [NumberOfBlocks] =&gt;  1953525168
            [BlockSize] =&gt;  512
            [TransitioningToState] =&gt;  12
            [EnabledDefault] =&gt;  2
            [RequestedState] =&gt;  12
            [EnabledState] =&gt;  5
            [HealthState] =&gt;  0
            [Caption] =&gt;  Disk 1 on HPSA1
            [ElementName] =&gt;  Disk 1 on HPSA1 : Port 1I Box 1 Bay 1 : 931GB : Data Disk
        )

    [1] =&gt; Array
        (
            [HPVC_SAStorageExtent.DeviceID] =&gt; "HPVC_SAStorageExtent-MM1000EBKAF-9XG0V2FH",CreationClassName
            [SystemCreationClassName] =&gt;  SMX_ComputerSystem
            [SystemName] =&gt;  vmware.eksempel.com
            [CreationClassName] =&gt;  HPVC_SAStorageExtent
            [DeviceID] =&gt;  HPVC_SAStorageExtent-MM1000EBKAF-9XG0V2FH
            [Name] =&gt;  9XG0V2FH
            [Primordial] =&gt;  true
            [NumberOfBlocks] =&gt;  1953525168
            [BlockSize] =&gt;  512
            [TransitioningToState] =&gt;  12
            [EnabledDefault] =&gt;  2
            [RequestedState] =&gt;  12
            [EnabledState] =&gt;  5
            [HealthState] =&gt;  5
            [Caption] =&gt;  Disk 2 on HPSA1
            [ElementName] =&gt;  Disk 2 on HPSA1 : Port 1I Box 1 Bay 2 : 931GB : Data Disk
        )
)

Næste projekt bliver at krølle det ned til et Nagios plugin ;-) 

Nagios Pluginet krævede kun flg. tilføjelser:

## Hvor mange raske diske har vi?

foreach ($a2 as $a)
{
        if ($a["HealthState"] == 5)
                $healthy++;
        else
                $failed[]=$a["Caption"];
}

$total = count($a2);

if ($total == $healthy)
{       
        print "OK: $healthy healthy out of $total total disks.";
}
else
{
        print "WARNING: $healthy healthy out of $total total disks. (failed:".implode(',',$failed).")";
}

Disclamer: Hvis du vælger at bruge koden er det dig eget ansvar at gennemlæse den, forstå hvad den gør og sikre sig at den virker som den skal. Jeg fralægger mit ethvert ansvar!