int libvirt_domain_save(char * name, int idonweb) { virDomainPtr domain; domain = virDomainLookupByName(g_conn, name); if (domain == NULL) { logerror(_("%s: connect domain by name(%s) error.\n"), __func__, name); return -1; } virDomainInfo info; if (virDomainGetInfo(dom, &info) < 0) { logprintfl(SCERROR, "Cannot check guest state\n"); return -3; } if (info.state == VIR_DOMAIN_SHUTOFF) { logprintfl(SCERROR, "Not saving guest that isn't running\n"); return -4; } const char *filename = ""; if (virDomainSave(dom, filename) < 0) { fprintf(stderr, "Unable to save guest to %s\n", filename); } fprintf(stdout, "Guest state saved to %s\n", filename); virConnectClose(conn); return 0; }
bool VirshType::Suspend() { vmprintf(D_FULLDEBUG, "Inside VirshType::Suspend\n"); if( (m_configfile.Length() == 0) ) { m_result_msg = VMGAHP_ERR_INTERNAL; return false; } if( getVMStatus() == VM_SUSPENDED ) { return true; } if( getVMStatus() != VM_RUNNING ) { m_result_msg = VMGAHP_ERR_VM_INVALID_OPERATION; return false; } if( m_xen_hw_vt && !m_allow_hw_vt_suspend ) { // This VM uses hardware virtualization. // However, Virsh cannot suspend this type of VM yet. m_result_msg = VMGAHP_ERR_VM_NO_SUPPORT_SUSPEND; return false; } // If a VM is soft suspended, resume it first. ResumeFromSoftSuspend(); MyString tmpfilename; makeNameofSuspendfile(tmpfilename); unlink(tmpfilename.Value()); priv_state priv = set_root_priv(); virDomainPtr dom = virDomainLookupByName(m_libvirt_connection, m_vm_name.Value()); set_priv(priv); if(dom == NULL) { virErrorPtr err = virConnGetLastError(m_libvirt_connection); vmprintf(D_ALWAYS, "Error finding domain %s: %s\n", m_vm_name.Value(), (err ? err->message : "No reason found")); return false; } priv = set_root_priv(); int result = virDomainSave(dom, tmpfilename.Value()); virDomainFree(dom); set_priv(priv); if( result != 0 ) { // Read error output // char *temp = cmd_out.print_to_delimed_string("/"); // m_result_msg = temp; // free( temp ); unlink(tmpfilename.Value()); return false; } m_suspendfile = tmpfilename; setVMStatus(VM_SUSPENDED); m_cputime_before_suspend += m_cpu_time; m_cpu_time = 0; return true; }