В API Proxmox я пытаюсь получить список узлов, на которых размещена каждая виртуальная машина, для создания следующего массива:
Массив:
( [vm1] => node1 [vm2] => node2 [vm3] => node2 [vm4] => node2 )
Мой код:
<?php
$vmArray = array();
$multipleVmArray = array();
$nodeArray = array();
$multipleNodeArray = array();
if (empty($onlinenode)) {
echo "<br>All nodes are down.<br>";
}
else {
foreach ($servers as $server) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://'.$onlinenode.'/api2/json/nodes/'.$server['node'].'/qemu');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_TIMEOUT_MS, $curlTimeOut);
$headers = array();
$headers[] = 'Content-Type: application/json';
$headers[] = 'Cookie: PVEAuthCookie=' .$cookie;
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
if (curl_errno($ch)) {
echo 'Node ' .$server['node']. ' is down (error : ' . curl_error($ch) . ').<br>';
}
else {
$arrays = json_decode($result, true);
$vmcount = count((array)$arrays['data']);
if ($vmcount == 0) {
echo 'Node ' .$server['node']. ' doesn\'t host vm.<br>';
}
else if ($vmcount == 1) {
array_push($vmArray,$arrays['data']['0']['name']);
array_push($nodeArray,$server['node']);
}
else {
$vmNames = array_column($arrays['data'], 'name');
array_push($multipleVmArray,$vmNames);
$nodeArrayFill = array_fill(0, $vmcount, $server['node']);
array_push($multipleNodeArray,$nodeArrayFill);
}
}
curl_close($ch);
}
}
$mergedVmArray = array_merge($vmArray,$multipleVmArray);
$mergedNodes = array_merge($nodeArray,$multipleNodeArray);
$combinedArrays = array_combine($mergedVmArray,$mergedNodes);
print_r($combinedArrays);
?>
Но результат: Array ( [winxp] => pve1 [winxp4] => pve3 [Array] => Array ( [0] => pve2 [1] => pve2 ) )
(Не обращайте внимания на названия ВМ и узлы)
И мне хотелось бы: Array ( [vm1] => node1 [vm2] => node2 [vm3] => node2 [vm4] => node2 )
Я не понимаю, почему работает приведенный ниже код, но не при реализации на моем:
<?php
$vmArray = array();
$multipleVmArray = array();
$nodeArray = array();
$multipleNodeArray = array();
array_push($vmArray,"vm1");
array_push($multipleVmArray,"vm2", "vm3", "vm4");
array_push($nodeArray,"node1");
array_push($multipleNodeArray,"node2", "node2", "node2");
$mergedVmArray = array_merge($vmArray,$multipleVmArray);
$mergedNodes = array_merge($nodeArray,$multipleNodeArray);
$combinedArrays = array_combine($mergedVmArray,$mergedNodes);
print_r($combinedArrays);
?>
Есть идеи?