Hi all,
ik zit met een klein issue, waar ik even niet uitkom. wanneer ik vmrun, run (Linux), worden de resultaten naar een bestand weggeschreven. Hierna lees ik dit bestand uit, en match ik op hostnames om zo de vm's per esx hosts te krijgen.
hier een voorbeeld:
Dit werkt, alleen wordt er 1 esx host niet weergegeven, ik heb de file vlist bekeken, en alle esxhosts staan netjes onder elkaar. Voor alle andere esx hosts wordt er dus gezocht naar het aantal matches voor $host in /var/log/vm/list, en wordt het aantal vm's per esx host gewoon aangegeven, op 1 na dus, deze esx host wordt ook totaal niet weer gegeven op de pagina.
dmv $count kan ik goed zien welke er wordt weggelaten:
1: host1
2: host2
3: host3
4: host4
5: host5
7: host7
8: host8
etc etc
host 6 wordt hier dus weggelaten, terwijl hij wel degelijk in de lijst voorkomt.
Wanneer ik trim aanpas naar:
worden wel alle esx hosts weergegeven (inclusief nr 6 dus), alleen nu zijn er geen matches meer voor het aantal vm's per host...
Heb trim op verschillende manieren getest, ik heb geprobeerd de file anders uit te lezen, maar krijg dan errors als: array to string conversion etc.
De file is gewoon 1 lange lijst met hosts, en op de manier zoals ik hem nu uitlees, werkt het niet helemaal goed.
Is er een andere mogelijkheid, om dit op een nette manier op te lossen ?
p.s. Ben geen php guru ofzo, ben ook nog aan het leren :-)
ik zit met een klein issue, waar ik even niet uitkom. wanneer ik vmrun, run (Linux), worden de resultaten naar een bestand weggeschreven. Hierna lees ik dit bestand uit, en match ik op hostnames om zo de vm's per esx hosts te krijgen.
hier een voorbeeld:
PHP:
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
| <?php // list unique esx hosts \\ shell_exec("vmrun -h <hosts> -u <user> -p <password> list | cut -d'/' -f2 | cut -d']' -f1 | cut -d':' -f1 | egrep -v '(<string>|<string>)' | grep -i <string> > /var/log/vm/vlist"); $hostfile=file("/var/log/vm/vlist"); $hostfile=array_unique($hostfile); asort($hostfile); $esxhosts=count($hostfile); // Get total vm's from file \\ shell_exec("vmrun -h <host> -u <user> -p <password> list > /var/log/vm/list"); $number_of_vms=shell_exec("cat /var/log/vm/vlist | wc -l"); $max_vm_per_host=25; $max_vm_total=$max_vm_per_host*$esxhosts; $vms_left=$max_vm_total-$number_of_vms; print "<table align='center' border='1' cellpadding='3' cellspacing='0'>"; print "<tr><td colspan='2'><b><ENV>: <...> environment</b></td></tr>"; print "<tr><td>Total ESX hosts: </td><td>".$esxhosts."</td></tr>"; print "<tr><td>Number of VM's: </td><td>$number_of_vms</td></tr>"; print "<tr><td>Max VM's for <env>: </td><td>$max_vm_total</td></tr>"; print "<tr><td>VM's left</td><td>$vms_left</td></tr>"; print "</table><br>"; ///// Main Table \\\\\\ ////////////\\\\\\\\\\\\ print "<table align='center' border='1' cellpadding='3' cellspacing='0' >"; $count=1; foreach($hostfile as $host) { // find all instances of $host from $file $host=trim($host); // remove any white space from $host. $file=file_get_contents('/var/log/vm/list') or die($php_errormsg); $numvms=substr_count($file,$host ); if($numvms < 20){ print "<tr><td bgcolor=#AFDCEC>$count: </td><td bgcolor=#C3FDB8><a href=\"scripts/hostid.php?id=".$host."\" target=\_blank\">".htmlspecialchars($host)."</a></td><td bgcolor='#C3FDB8'align='left'>total vm's: $numvms</td></tr>"; } elseif($numvms < 24) { print "<tr><td bgcolor=#AFDCEC>$count: </td><td bgcolor=#C3FDB8><a href=\"scripts/hostid.php?id=".$host."\" target=\_blank\">".htmlspecialchars($host)."</a></td><td bgcolor='orange'align='left'>total vm's: $numvms</td></tr>"; } elseif($numvms > 24) { print "<tr><td bgcolor=#AFDCEC>$count: </td><td bgcolor=#C3FDB8><a href=\"scripts/hostid.php?id=".$host."\" target=\_blank\">".htmlspecialchars($host)."</a></td><td bgcolor='red'align='left'>total vm's: $numvms</td></tr>"; } $count++; } print "</table>"; ?> |
Dit werkt, alleen wordt er 1 esx host niet weergegeven, ik heb de file vlist bekeken, en alle esxhosts staan netjes onder elkaar. Voor alle andere esx hosts wordt er dus gezocht naar het aantal matches voor $host in /var/log/vm/list, en wordt het aantal vm's per esx host gewoon aangegeven, op 1 na dus, deze esx host wordt ook totaal niet weer gegeven op de pagina.
dmv $count kan ik goed zien welke er wordt weggelaten:
1: host1
2: host2
3: host3
4: host4
5: host5
7: host7
8: host8
etc etc
host 6 wordt hier dus weggelaten, terwijl hij wel degelijk in de lijst voorkomt.
Wanneer ik trim aanpas naar:
PHP:
1
| $host=trim($host, "\n"); // remove any white space from $host |
worden wel alle esx hosts weergegeven (inclusief nr 6 dus), alleen nu zijn er geen matches meer voor het aantal vm's per host...
Heb trim op verschillende manieren getest, ik heb geprobeerd de file anders uit te lezen, maar krijg dan errors als: array to string conversion etc.
De file is gewoon 1 lange lijst met hosts, en op de manier zoals ik hem nu uitlees, werkt het niet helemaal goed.
Is er een andere mogelijkheid, om dit op een nette manier op te lossen ?
p.s. Ben geen php guru ofzo, ben ook nog aan het leren :-)