From: Julio Faracco <jcfaracco(a)gmail.com>
There is a lots of possibilities to retrieve hostname information
from domain. Libvirt could use lease information from dnsmasq to
get current hostname too. QEMU supports QEMU-agent but it can use
lease source.
Signed-off-by: Michal Privoznik <mprivozn(a)redhat.com>
Signed-off-by: Julio Faracco <jcfaracco(a)gmail.com>
---
include/libvirt/libvirt-domain.h | 6 ++++++
include/libvirt/virterror.h | 1 +
src/libvirt-domain.c | 9 +++++----
src/remote/remote_daemon.c | 1 +
src/util/virerror.c | 3 +++
5 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index c1b9a9d1d0..44f6b62913 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -1567,6 +1567,12 @@ int virDomainSetMemoryStatsPeriod (virDomainPtr
domain,
int virDomainGetMaxVcpus (virDomainPtr domain);
int virDomainGetSecurityLabel (virDomainPtr domain,
virSecurityLabelPtr seclabel);
+
+typedef enum {
+ VIR_DOMAIN_GET_HOSTNAME_LEASE = (1 << 0), /* Parse DHCP lease file */
+ VIR_DOMAIN_GET_HOSTNAME_AGENT = (1 << 1), /* Query qemu guest agent */
+} virDomainGetHostnameFlags;
+
char * virDomainGetHostname (virDomainPtr domain,
unsigned int flags);
int virDomainGetSecurityLabelList (virDomainPtr domain,
diff --git a/include/libvirt/virterror.h b/include/libvirt/virterror.h
index 54f4f8190d..b7aa2a0ec3 100644
--- a/include/libvirt/virterror.h
+++ b/include/libvirt/virterror.h
@@ -332,6 +332,7 @@ typedef enum {
VIR_ERR_INVALID_NETWORK_PORT = 105, /* invalid network port object */
VIR_ERR_NETWORK_PORT_EXIST = 106, /* the network port already exist */
VIR_ERR_NO_NETWORK_PORT = 107, /* network port not found */
+ VIR_ERR_NO_HOSTNAME = 108, /* no domain's hostname found */
# ifdef VIR_ENUM_SENTINELS
VIR_ERR_NUMBER_LAST
diff --git a/src/libvirt-domain.c b/src/libvirt-domain.c
index eb66999f07..d0304e174f 100644
--- a/src/libvirt-domain.c
+++ b/src/libvirt-domain.c
@@ -11025,12 +11025,13 @@ virDomainGetDiskErrors(virDomainPtr dom,
/**
* virDomainGetHostname:
* @domain: a domain object
- * @flags: extra flags; not used yet, so callers should always pass 0
+ * @flags: bitwise-OR of virDomainGetHostnameFlags
*
- * Get the hostname for that domain.
+ * Get the hostname for that domain. If no hostname is found,
+ * then an error is raised with VIR_ERR_NO_HOSTNAME code.
*
- * Dependent on hypervisor used, this may require a guest agent to be
- * available.
+ * Dependent on hypervisor and @flags 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.
diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c
index cd55b2c39e..1c224f8050 100644
--- a/src/remote/remote_daemon.c
+++ b/src/remote/remote_daemon.c
@@ -296,6 +296,7 @@ static int daemonErrorLogFilter(virErrorPtr err, int priority)
case VIR_ERR_NO_DOMAIN_METADATA:
case VIR_ERR_NO_SERVER:
case VIR_ERR_NO_CLIENT:
+ case VIR_ERR_NO_HOSTNAME:
return VIR_LOG_DEBUG;
}
diff --git a/src/util/virerror.c b/src/util/virerror.c
index aac6ee3597..0f3ee1faaa 100644
--- a/src/util/virerror.c
+++ b/src/util/virerror.c
@@ -1233,6 +1233,9 @@ static const virErrorMsgTuple virErrorMsgStrings[] = {
[VIR_ERR_NO_NETWORK_PORT] = {
N_("network port not found"),
N_("network port not found: %s") },
+ [VIR_ERR_NO_HOSTNAME] = {
+ N_("no hostname found"),
+ N_("no hostname found: %s") },
};
G_STATIC_ASSERT(G_N_ELEMENTS(virErrorMsgStrings) == VIR_ERR_NUMBER_LAST);
--
2.24.1