[libvirt] [dbus PATCH 1/6] Implement Setter for Autostart property for Domain interface

Katerina Koukiou kkoukiou at redhat.com
Thu Apr 12 09:42:50 UTC 2018


Signed-off-by: Katerina Koukiou <kkoukiou at redhat.com>
---
 data/org.libvirt.Domain.xml |  5 +++--
 src/domain.c                | 22 +++++++++++++++++++++-
 test/test_domain.py         |  7 +++++++
 3 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml
index 78378bb..b8ee5b8 100644
--- a/data/org.libvirt.Domain.xml
+++ b/data/org.libvirt.Domain.xml
@@ -7,9 +7,10 @@
       <annotation name="org.gtk.GDBus.DocString"
         value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainIsActive"/>
     </property>
-    <property name="Autostart" type="b" access="read">
+    <property name="Autostart" type="b" access="readwrite">
       <annotation name="org.gtk.GDBus.DocString"
-        value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainGetAutostart"/>
+        value="See https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainGetAutostart and
+               https://libvirt.org/html/libvirt-libvirt-domain.html#virDomainSetAutostart"/>
     </property>
     <property name="Id" type="u" access="read">
       <annotation name="org.gtk.GDBus.DocString"
diff --git a/src/domain.c b/src/domain.c
index 14f07fc..82682ef 100644
--- a/src/domain.c
+++ b/src/domain.c
@@ -218,6 +218,26 @@ virtDBusDomainGetUUID(const gchar *objectPath,
     *value = g_variant_new("s", uuid);
 }
 
+static void
+virtDBusDomainSetAutostart(GVariant *value,
+                           const gchar *objectPath,
+                           gpointer userData,
+                           GError **error)
+{
+    virtDBusConnect *connect = userData;
+    g_autoptr(virDomain) domain = NULL;
+    gboolean autostart;
+
+    g_variant_get(value, "b", &autostart);
+
+    domain = virtDBusDomainGetVirDomain(connect, objectPath, error);
+    if (!domain)
+        return;
+
+    if (virDomainSetAutostart(domain, autostart) < 0)
+        return virtDBusUtilSetLastVirtError(error);
+}
+
 static void
 virtDBusDomainCreate(GVariant *inArgs,
                      GUnixFDList *inFDs G_GNUC_UNUSED,
@@ -492,7 +512,7 @@ virtDBusDomainUndefine(GVariant *inArgs,
 
 static virtDBusGDBusPropertyTable virtDBusDomainPropertyTable[] = {
     { "Active", virtDBusDomainGetActive, NULL },
-    { "Autostart", virtDBusDomainGetAutostart, NULL },
+    { "Autostart", virtDBusDomainGetAutostart, virtDBusDomainSetAutostart },
     { "Id", virtDBusDomainGetId, NULL },
     { "Name", virtDBusDomainGetName, NULL },
     { "OSType", virtDBusDomainGetOsType, NULL },
diff --git a/test/test_domain.py b/test/test_domain.py
index 952bf59..7fa9aad 100755
--- a/test/test_domain.py
+++ b/test/test_domain.py
@@ -37,6 +37,13 @@ class TestDomain(libvirttest.BaseTestClass):
                 raise e
         domain.Undefine(0)
 
+    def test_domain_autostart(self):
+        _, domain = self.domain()
+        autostart_expected = True
+        domain.Set('org.libvirt.Domain', 'Autostart', autostart_expected, dbus_interface=dbus.PROPERTIES_IFACE)
+        autostart_current = domain.Get('org.libvirt.Domain', 'Autostart', dbus_interface=dbus.PROPERTIES_IFACE)
+        assert autostart_current == dbus.Boolean(autostart_expected)
+
     def test_resume(self):
         def domain_resumed(path, _event):
             assert isinstance(path, dbus.ObjectPath)
-- 
2.15.0




More information about the libvir-list mailing list