Example #1
0
		function domain_change_cdrom($domain, $iso, $dev, $bus) {
			$domain = $this->get_domain_object($domain);
			$tmp = libvirt_domain_update_device($domain, "<disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file=".escapeshellarg($iso)."/><target dev='$dev' bus='$bus'/><readonly/></disk>", VIR_DOMAIN_DEVICE_MODIFY_CONFIG);
			if ($this->domain_is_active($domain))
				libvirt_domain_update_device($domain, "<disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file=".escapeshellarg($iso)."/><target dev='$dev' bus='$bus'/><readonly/></disk>", VIR_DOMAIN_DEVICE_MODIFY_LIVE);
			return ($tmp) ? $tmp : $this->_set_last_error();
		}
Example #2
0
/**
 * connect a NIC to a network in a virtual machine on the virt host
 *
 * @todo FIX the VIRSH portion of this function
 *
 * @global  resource $host_conn           libvirt connection
 *
 * @param   string   $host_name           virt_id of host (to pass to virsh for activation only)
 * @param   string   $vm_virt_id          virt_id of the vm
 * @param   int      $vm_nic_instance     instance of NIC device
 * @param   string   $vm_nic_mac_address  mac address of the NIC
 * @param   string   $new_network_virt_id virt_id of network
 *
 * @return  bool                on success
 */
function ace_kvm_vm_nic_connect_network($host_name, $vm_virt_id, $vm_nic_instance, $vm_nic_mac_address, $new_network_virt_id)
{
    global $host_conn;
    $vm_res = libvirt_domain_lookup_by_name($host_conn, $vm_virt_id);
    ace_kvm_log_last_error();
    $vm_is_active = libvirt_domain_is_active($vm_res) == 1 ? TRUE : FALSE;
    ace_kvm_log_last_error();
    $old_network_virt_id = ace_kvm_vm_get_nic_network_by_mac($vm_virt_id, $vm_nic_mac_address);
    $old_network_res = libvirt_network_get($host_conn, $old_network_virt_id);
    ace_kvm_log_last_error();
    $old_virt_network_is_active = libvirt_network_get_active($old_network_res) == 1 ? TRUE : FALSE;
    ace_kvm_log_last_error();
    $new_network_res = libvirt_network_get($host_conn, $new_network_virt_id);
    ace_kvm_log_last_error();
    $new_virt_network_is_active = libvirt_network_get_active($new_network_res) == 1 ? TRUE : FALSE;
    ace_kvm_log_last_error();
    $link_state = $new_virt_network_is_active ? 'up' : 'down';
    $xml = "<interface type='network'>\n\t\t\t\t<mac address='{$vm_nic_mac_address}'/>\n\t\t\t\t<source network='{$new_network_virt_id}'/>\n\t\t\t\t<link state='{$link_state}'/>\n\t\t\t</interface>";
    $libvirt_flags = $vm_is_active ? 3 : 2;
    # config + live : config only
    # temporarily activate old and/or new networks (excluding _DISCONNECTED.._) if either are currently deactivated
    if (!$old_virt_network_is_active && $old_network_virt_id !== _DISCONNECTED_VIRT_NETWORK_ID_) {
        ace_kvm_network_activate_virsh($host_name, $old_network_virt_id);
    }
    if (!$new_virt_network_is_active && $new_network_virt_id !== _DISCONNECTED_VIRT_NETWORK_ID_) {
        ace_kvm_network_activate_virsh($host_name, $new_network_virt_id);
    }
    $virt_success = libvirt_domain_update_device($vm_res, $xml, $libvirt_flags);
    ace_kvm_log_last_error();
    # deactivate old and/or new networks (excluding _DISCONNECTED.._) if either was temporarily activated
    if (!$old_virt_network_is_active && $old_network_virt_id !== _DISCONNECTED_VIRT_NETWORK_ID_) {
        ace_kvm_network_deactivate_virsh($host_name, $old_network_virt_id);
    }
    if (!$new_virt_network_is_active && $new_network_virt_id !== _DISCONNECTED_VIRT_NETWORK_ID_) {
        ace_kvm_network_deactivate_virsh($host_name, $new_network_virt_id);
    }
    return $virt_success;
}