]> xenbits.xensource.com Git - libvirt.git/commitdiff
lib: Add API to edit domain's managed save state xml configuration
authorKothapally Madhu Pavan <kmp@linux.vnet.ibm.com>
Tue, 8 Aug 2017 08:02:50 +0000 (13:32 +0530)
committerPeter Krempa <pkrempa@redhat.com>
Tue, 29 Aug 2017 11:40:13 +0000 (13:40 +0200)
Similar to domainSaveImageDefineXML this commit adds domainManagedSaveDefineXML
API which allows to edit domain's managed save state xml configuration.

Signed-off-by: Kothapally Madhu Pavan <kmp@linux.vnet.ibm.com>
include/libvirt/libvirt-domain.h
src/driver-hypervisor.h
src/libvirt-domain.c
src/libvirt_public.syms
src/remote/remote_driver.c
src/remote/remote_protocol.x
src/remote_protocol-structs

index 4c5a7f7b5fb6d38d7f3e616ad2fe3d25cebc60ca..030a62c436b181a5d01216d289405167612e7078 100644 (file)
@@ -1215,6 +1215,10 @@ int                    virDomainManagedSaveRemove(virDomainPtr dom,
                                                   unsigned int flags);
 char *                 virDomainManagedSaveGetXMLDesc(virDomainPtr domain,
                                                       unsigned int flags);
+int                    virDomainManagedSaveDefineXML(virDomainPtr domain,
+                                                     const char *dxml,
+                                                     unsigned int flags);
+
 
 /*
  * Domain core dump
index a3f9cbc31f84f72762c96affb76bd5f39f720088..6c3f7d7957e3962b406d9b7604600de0b95bf0ca 100644 (file)
@@ -754,6 +754,11 @@ typedef char *
 (*virDrvDomainManagedSaveGetXMLDesc)(virDomainPtr domain,
                                      unsigned int flags);
 
+typedef int
+(*virDrvDomainManagedSaveDefineXML)(virDomainPtr domain,
+                                    const char *dxml,
+                                    unsigned int flags);
+
 typedef virDomainSnapshotPtr
 (*virDrvDomainSnapshotCreateXML)(virDomainPtr domain,
                                  const char *xmlDesc,
@@ -1433,6 +1438,7 @@ struct _virHypervisorDriver {
     virDrvDomainHasManagedSaveImage domainHasManagedSaveImage;
     virDrvDomainManagedSaveRemove domainManagedSaveRemove;
     virDrvDomainManagedSaveGetXMLDesc domainManagedSaveGetXMLDesc;
+    virDrvDomainManagedSaveDefineXML domainManagedSaveDefineXML;
     virDrvDomainSnapshotCreateXML domainSnapshotCreateXML;
     virDrvDomainSnapshotGetXMLDesc domainSnapshotGetXMLDesc;
     virDrvDomainSnapshotNum domainSnapshotNum;
index f43ab2478d31730c4873130294f42ba5ce9b8b9d..ca5a1536aea626c070f171ac05d4b0dbbedbe526 100644 (file)
@@ -9389,6 +9389,63 @@ virDomainManagedSaveGetXMLDesc(virDomainPtr domain, unsigned int flags)
 }
 
 
+/**
+ * virDomainManagedSaveDefineXML:
+ * @domain: a domain object
+ * @dxml: XML config for adjusting guest xml used on restore
+ * @flags: bitwise-OR of virDomainSaveRestoreFlags
+ *
+ * This updates the definition of a domain stored in a saved state
+ * file.
+ *
+ * @dxml can be used to alter host-specific portions of the domain XML
+ * that will be used on the next start of the domain. For example, it is
+ * possible to alter the backing filename that is associated with a
+ * disk device.
+ *
+ * Normally, the saved state file will remember whether the domain was
+ * running or paused, and restore defaults to the same state.
+ * Specifying VIR_DOMAIN_SAVE_RUNNING or VIR_DOMAIN_SAVE_PAUSED in
+ * @flags will override the default saved into the file; omitting both
+ * leaves the file's default unchanged.  These two flags are mutually
+ * exclusive.
+ *
+ * Returns 0 in case of success and -1 in case of failure.
+ */
+int
+virDomainManagedSaveDefineXML(virDomainPtr domain, const char *dxml,
+                              unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain, "flags=%x", flags);
+
+    virResetLastError();
+
+    VIR_EXCLUSIVE_FLAGS_GOTO(VIR_DOMAIN_SAVE_RUNNING,
+                             VIR_DOMAIN_SAVE_PAUSED,
+                             error);
+
+    virCheckDomainReturn(domain, -1);
+    conn = domain->conn;
+
+    if (conn->driver->domainManagedSaveDefineXML) {
+        int ret;
+        ret = conn->driver->domainManagedSaveDefineXML(domain, dxml, flags);
+
+        if (ret < 0)
+            goto error;
+        return ret;
+    }
+
+    virReportUnsupportedError();
+
+ error:
+    virDispatchError(domain->conn);
+    return -1;
+}
+
+
 /**
  * virDomainOpenConsole:
  * @dom: a domain object
index 58b9b4910b1f19a63967fd2d13493ddf5ac8dd74..4986019431f188079e0190f9cfd0ce5be335ac4e 100644 (file)
@@ -772,5 +772,6 @@ LIBVIRT_3.7.0 {
     global:
         virDomainMigrateGetMaxDowntime;
         virDomainManagedSaveGetXMLDesc;
+        virDomainManagedSaveDefineXML;
 } LIBVIRT_3.4.0;
 # .... define new API here using predicted next version number ....
index c64f5b337d1c1010daf429ccf40efaa864c1884e..7f814cd4f4f19b3c1fa76fe6b6adeb2aefcfe67a 100644 (file)
@@ -8412,6 +8412,7 @@ static virHypervisorDriver hypervisor_driver = {
     .domainHasManagedSaveImage = remoteDomainHasManagedSaveImage, /* 0.8.0 */
     .domainManagedSaveRemove = remoteDomainManagedSaveRemove, /* 0.8.0 */
     .domainManagedSaveGetXMLDesc = remoteDomainManagedSaveGetXMLDesc, /* 3.7.0 */
+    .domainManagedSaveDefineXML = remoteDomainManagedSaveDefineXML, /* 3.7.0 */
     .domainSnapshotCreateXML = remoteDomainSnapshotCreateXML, /* 0.8.0 */
     .domainSnapshotGetXMLDesc = remoteDomainSnapshotGetXMLDesc, /* 0.8.0 */
     .domainSnapshotNum = remoteDomainSnapshotNum, /* 0.8.0 */
index 76033acc9366c418edc92b3c5d6bb11d31020c79..07463b78197642837f8e550eccf206af39885d80 100644 (file)
@@ -2565,6 +2565,12 @@ struct remote_domain_managed_save_get_xml_desc_ret {
     remote_nonnull_string xml;
 };
 
+struct remote_domain_managed_save_define_xml_args {
+    remote_nonnull_domain dom;
+    remote_string dxml;
+    unsigned int flags;
+};
+
 struct remote_domain_snapshot_create_xml_args {
     remote_nonnull_domain dom;
     remote_nonnull_string xml_desc;
@@ -6095,5 +6101,12 @@ enum remote_procedure {
      * @acl: domain:read
      * @acl: domain:read_secure:VIR_DOMAIN_XML_SECURE
      */
-    REMOTE_PROC_DOMAIN_MANAGED_SAVE_GET_XML_DESC = 388
+    REMOTE_PROC_DOMAIN_MANAGED_SAVE_GET_XML_DESC = 388,
+
+    /**
+     * @generate: both
+     * @acl: domain:write
+     * @acl: domain:hibernate
+     */
+    REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389
 };
index 4803a46f227053daf86796a7bdd2cab01bb36259..6038bf1380b266f9dc913718f8a4124addb1e699 100644 (file)
@@ -1977,6 +1977,11 @@ struct remote_domain_managed_save_get_xml_desc_args {
 struct remote_domain_managed_save_get_xml_desc_ret {
         remote_nonnull_string      xml;
 };
+struct remote_domain_managed_save_define_xml_args {
+        remote_nonnull_domain      dom;
+        remote_string              dxml;
+        u_int                      flags;
+};
 struct remote_domain_snapshot_create_xml_args {
         remote_nonnull_domain      dom;
         remote_nonnull_string      xml_desc;
@@ -3249,4 +3254,5 @@ enum remote_procedure {
         REMOTE_PROC_DOMAIN_SET_BLOCK_THRESHOLD = 386,
         REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_DOWNTIME = 387,
         REMOTE_PROC_DOMAIN_MANAGED_SAVE_GET_XML_DESC = 388,
+        REMOTE_PROC_DOMAIN_MANAGED_SAVE_DEFINE_XML = 389,
 };