]> xenbits.xensource.com Git - libvirt.git/commitdiff
parallels: implement domainUndefine and domainUndefineFlags
authorDmitry Guryanov <dguryanov@parallels.com>
Mon, 1 Dec 2014 15:38:58 +0000 (18:38 +0300)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 9 Dec 2014 18:42:04 +0000 (19:42 +0100)
Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
src/parallels/parallels_driver.c
src/parallels/parallels_sdk.c
src/parallels/parallels_sdk.h

index 522c39f23b14a5ec8cdea1b0755b7e820ef39bb6..08d2e3051391176a76b40378f0fac7278c51a722 100644 (file)
@@ -917,6 +917,30 @@ parallelsDomainCreateWithFlags(virDomainPtr domain, unsigned int flags)
     return parallelsDomainCreate(domain);
 }
 
+static int
+parallelsDomainUndefineFlags(virDomainPtr domain,
+                             unsigned int flags)
+{
+    parallelsConnPtr privconn = domain->conn->privateData;
+    virDomainObjPtr dom = NULL;
+
+    virCheckFlags(0, -1);
+
+    dom = virDomainObjListFindByUUID(privconn->domains, domain->uuid);
+    if (dom == NULL) {
+        parallelsDomNotFoundError(domain);
+        return -1;
+    }
+
+    return prlsdkUnregisterDomain(privconn, dom);
+}
+
+static int
+parallelsDomainUndefine(virDomainPtr domain)
+{
+    return parallelsDomainUndefineFlags(domain, 0);
+}
+
 static virHypervisorDriver parallelsDriver = {
     .no = VIR_DRV_PARALLELS,
     .name = "Parallels",
@@ -949,6 +973,8 @@ static virHypervisorDriver parallelsDriver = {
     .domainCreate = parallelsDomainCreate,    /* 0.10.0 */
     .domainCreateWithFlags = parallelsDomainCreateWithFlags, /* 1.2.10 */
     .domainDefineXML = parallelsDomainDefineXML,      /* 0.10.0 */
+    .domainUndefine = parallelsDomainUndefine, /* 1.2.10 */
+    .domainUndefineFlags = parallelsDomainUndefineFlags, /* 1.2.10 */
     .domainIsActive = parallelsDomainIsActive, /* 1.2.10 */
     .connectDomainEventRegisterAny = parallelsConnectDomainEventRegisterAny, /* 1.2.10 */
     .connectDomainEventDeregisterAny = parallelsConnectDomainEventDeregisterAny, /* 1.2.10 */
index 4e28e5993ceb0689a3bae93104fb54dc9f5b0fb7..e721b3ec46667d1bcc354d5301bb07e3af684e32 100644 (file)
@@ -2709,3 +2709,21 @@ prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def)
     PrlHandle_Free(sdkdom);
     return ret;
 }
+
+int
+prlsdkUnregisterDomain(parallelsConnPtr privconn, virDomainObjPtr dom)
+{
+    parallelsDomObjPtr privdom = dom->privateData;
+    PRL_HANDLE job;
+
+    job = PrlVm_Unreg(privdom->sdkdom);
+    if (waitJob(job, privconn->jobTimeout))
+        return -1;
+
+    if (prlsdkSendEvent(privconn, dom, VIR_DOMAIN_EVENT_UNDEFINED,
+                        VIR_DOMAIN_EVENT_UNDEFINED_REMOVED) < 0)
+        return -1;
+
+    virDomainObjListRemove(privconn->domains, dom);
+    return 0;
+}
index 1fdef1ad05f3f3fc6c27cf03912f52274509ea5c..dee9359c376a921221541d79116ee53c22562541 100644 (file)
@@ -51,3 +51,5 @@ prlsdkApplyConfig(virConnectPtr conn,
                   virDomainDefPtr new);
 int prlsdkCreateVm(virConnectPtr conn, virDomainDefPtr def);
 int prlsdkCreateCt(virConnectPtr conn, virDomainDefPtr def);
+int
+prlsdkUnregisterDomain(parallelsConnPtr privconn, virDomainObjPtr dom);