]> xenbits.xensource.com Git - libvirt.git/commitdiff
Add virDomainGetHostname
authorGuido Günther <agx@sigxcpu.org>
Tue, 10 Jul 2012 07:34:23 +0000 (09:34 +0200)
committerGuido Günther <agx@sigxcpu.org>
Fri, 20 Jul 2012 19:54:34 +0000 (21:54 +0200)
to query a guests's hostname. Containers like LXC and OpenVZ allow to
set a hostname different from the hosts name and QEMU's guest agent
could provide similar functionality.

include/libvirt/libvirt.h.in
src/driver.h
src/libvirt.c
src/libvirt_public.syms

index e34438cda0d9236d78b6b7b1e805cb21c5d8b9ba..fcef461a1b94808618131986b4bf9c855141d866 100644 (file)
@@ -1540,6 +1540,8 @@ int                     virDomainSetMemoryFlags (virDomainPtr domain,
 int                     virDomainGetMaxVcpus    (virDomainPtr domain);
 int                     virDomainGetSecurityLabel (virDomainPtr domain,
                                                    virSecurityLabelPtr seclabel);
+char *                  virDomainGetHostname    (virDomainPtr domain,
+                                                 unsigned int flags);
 
 typedef enum {
     VIR_DOMAIN_METADATA_DESCRIPTION = 0, /* Operate on <description> */
index b3c1740a5ec561ba850c01b8cfdc43f5d9947b15..46d98467b01ec6e0e89fc9022fb72b433883557e 100644 (file)
@@ -142,6 +142,11 @@ typedef int
                                          unsigned int flags);
 typedef char *
         (*virDrvDomainGetOSType)        (virDomainPtr domain);
+
+typedef char *
+        (*virDrvDomainGetHostname)      (virDomainPtr domain,
+                                         unsigned int flags);
+
 typedef unsigned long long
         (*virDrvDomainGetMaxMemory)     (virDomainPtr domain);
 typedef int
@@ -904,6 +909,7 @@ struct _virDriver {
     virDrvDomainDestroy                 domainDestroy;
     virDrvDomainDestroyFlags            domainDestroyFlags;
     virDrvDomainGetOSType               domainGetOSType;
+    virDrvDomainGetHostname             domainGetHostname;
     virDrvDomainGetMaxMemory            domainGetMaxMemory;
     virDrvDomainSetMaxMemory            domainSetMaxMemory;
     virDrvDomainSetMemory               domainSetMemory;
index df78e8aca70413c699536f306996ace287041a4a..8315b4fca96ec8b3d9166ab447d89d9a6e2ebec2 100644 (file)
@@ -18977,3 +18977,48 @@ error:
     virDispatchError(dom->conn);
     return -1;
 }
+
+/**
+ * virDomainGetHostname:
+ * @domain: a domain object
+ * @flags: extra flags; not used yet, so callers should always pass 0
+ *
+ * Get the hostname for that domain.
+ *
+ * Dependent on hypervisor used, this may require a guest agent to be
+ * available.
+ *
+ * Returns the hostname which must be freed by the caller, or
+ * NULL if there was an error.
+ */
+char *
+virDomainGetHostname(virDomainPtr domain, unsigned int flags)
+{
+    virConnectPtr conn;
+
+    VIR_DOMAIN_DEBUG(domain);
+
+    virResetLastError();
+
+    if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
+        virLibDomainError(VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
+        virDispatchError(NULL);
+        return NULL;
+    }
+
+    conn = domain->conn;
+
+    if (conn->driver->domainGetHostname) {
+        char *ret;
+        ret = conn->driver->domainGetHostname (domain, flags);
+        if (!ret)
+            goto error;
+        return ret;
+    }
+
+    virLibConnError(VIR_ERR_NO_SUPPORT, __FUNCTION__);
+
+error:
+    virDispatchError(domain->conn);
+    return NULL;
+}
index 2913a819095a092c3d51561d1456a2aac380d5e8..1a8e58aed280d86005b9a4dc231c108810192a67 100644 (file)
@@ -544,4 +544,9 @@ LIBVIRT_0.9.13 {
         virDomainSnapshotRef;
 } LIBVIRT_0.9.11;
 
+LIBVIRT_0.9.14 {
+    global:
+        virDomainGetHostname;
+} LIBVIRT_0.9.13;
+
 # .... define new API here using predicted next version number ....