// moo.example.com
// 48cf6378-6fd5-4610-0611-63dd4b31cfd6
// 1048576
// 1048576
// 8
//
// hvm
//
//
//
//
// (...)
// Convert array to string
unset($vm_info_xml);
foreach ($vm_info_array as $line) {
$vm_info_xml .= $line;
}
$xml = simplexml_load_string(' '.$vm_info_xml);
d_echo($xml);
$vmwVmDisplayName = $xml->name;
$vmwVmGuestOS = '';
// libvirt does not supply this
$vmwVmMemSize = ($xml->currentMemory / 1024);
exec($config['virsh'].' -c '.$uri.' domstate '.$dom_id, $vm_state);
$vmwVmState = ucfirst($vm_state[0]);
$vmwVmCpus = $xml->vcpu;
// Check whether the Virtual Machine is already known for this host.
$result = dbFetchRow("SELECT * FROM `vminfo` WHERE `device_id` = ? AND `vmwVmVMID` = ? AND `vm_type` = 'libvirt'", array($device['device_id'], $dom_id));
if (count($result['device_id']) == 0) {
$inserted_id = dbInsert(array('device_id' => $device['device_id'], 'vm_type' => 'libvirt', 'vmwVmVMID' => $dom_id, 'vmwVmDisplayName' => mres($vmwVmDisplayName), 'vmwVmGuestOS' => mres($vmwVmGuestOS), 'vmwVmMemSize' => mres($vmwVmMemSize), 'vmwVmCpus' => mres($vmwVmCpus), 'vmwVmState' => mres($vmwVmState)), 'vminfo');
echo '+';
log_event("Virtual Machine added: $vmwVmDisplayName ($vmwVmMemSize MB)", $device, 'vm', $inserted_id);
}
else {
if ($result['vmwVmState'] != $vmwVmState
|| $result['vmwVmDisplayName'] != $vmwVmDisplayName
|| $result['vmwVmCpus'] != $vmwVmCpus
|| $result['vmwVmGuestOS'] != $vmwVmGuestOS
|| $result['vmwVmMemSize'] != $vmwVmMemSize
) {
dbUpdate(array('vmwVmState' => mres($vmwVmState), 'vmwVmGuestOS' => mres($vmwVmGuestOS), 'vmwVmDisplayName' => mres($vmwVmDisplayName), 'vmwVmMemSize' => mres($vmwVmMemSize), 'vmwVmCpus' => mres($vmwVmCpus)), 'vminfo', "device_id=? AND vm_type='libvirt' AND vmwVmVMID=?", array($device['device_id'], $dom_id));
echo 'U';
// FIXME eventlog
}
else {
echo '.';
}
}
// Save the discovered Virtual Machine.
$libvirt_vmlist[] = $dom_id;
}//end if
}//end foreach
}//end if
// If we found VMs, don't cycle the other protocols anymore.
if (count($libvirt_vmlist)) {
break;
}
}//end foreach
// Get a list of all the known Virtual Machines for this host.
$sql = "SELECT id, vmwVmVMID, vmwVmDisplayName FROM vminfo WHERE device_id = '".$device['device_id']."' AND vm_type='libvirt'";
foreach (dbFetchRows($sql) as $db_vm) {
// Delete the Virtual Machines that are removed from the host.
if (!in_array($db_vm['vmwVmVMID'], $libvirt_vmlist)) {
dbDelete('vminfo', '`id` = ?', array($db_vm['id']));
echo '-';
log_event('Virtual Machine removed: '.$db_vm['vmwVmDisplayName'], $device, 'vm', $db_vm['id']);
}
}
echo "\n";
}//end if