[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]

Re: [libvirt] [PATCH] conf: Generate agent socket path if missing

On 02/15/13 09:53, Michal Privoznik wrote:
It's not desired to force users imagine path for a socket they
are not even supposed to connect to. On the other hand, we
already have a release where the qemu agent socket path is
exposed to XML, so we cannot silently drop it from there.
The new path is generated in form:


This makes the qemu agent to be generated at domain startup phase.
So until that, we generate XML without any path, e.g.:

   <channel type='unix'>
     <source mode='connect'/>
     <target type='virtio' name='org.qemu.guest_agent.0'/>
     <address type='virtio-serial' controller='0' bus='0' port='1'/>

The other possibility is to generate path during XML parse phase, however this
expose something we are lacking for years - callbacks to fill in default values

Yep, that is missing. Without that you will fill the path only when the machine is started. This isn't ideal. I have the same issue with recording the default network model in the XML.

for not configured ones. The aim so to make libvirt accept this snippet as
valid qemu agent config:

   <channel type='unix'>
     <target type='virtio' name='org.qemu.guest_agent.0'/>

  src/conf/domain_conf.c  | 37 ++++++++++++++++++++-----------------
  src/qemu/qemu_process.c | 30 ++++++++++++++++++++++++++++--
  2 files changed, 48 insertions(+), 19 deletions(-)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 7a2b012..6245fec 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -6038,7 +6038,10 @@ virDomainChrSourceDefParseXML(virDomainChrSourceDefPtr def,

-        if (path == NULL) {
+        /* path is not required in special case of qemu guest agent */
+        if (path == NULL &&
+            chr_def->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO &&
+            STRNEQ(chr_def->target.name, "org.qemu.guest_agent.0")) {

Hm. Not entirely elegant, but this is a corner case, so it's not worth refactoring other use of the unix chardev backend.

              virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
                             _("Missing source path attribute for char device"));
              goto error;
@@ -6135,7 +6138,6 @@ virDomainChrDefParseXML(virCapsPtr caps,
      char *type = NULL;
      const char *nodeName;
      virDomainChrDefPtr def;
-    int remaining;
      bool seenTarget = false;

      if (!(def = virDomainChrDefNew()))

@@ -13307,10 +13308,12 @@ virDomainChrSourceDefFormat(virBufferPtr buf,


This newline isn't present in the other "case"s. Don't add it.

          virBufferAsprintf(buf, "      <source mode='%s'",
                            def->data.nix.listen ? "bind" : "connect");
-        virBufferEscapeString(buf, " path='%s'/>\n",
+        virBufferEscapeString(buf, " path='%s'",
+        virBufferAddLit(buf, "/>\n");

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]