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

[libvirt] Re: OpenVZ : The restriction of domain name should be addressed



Hi Daniel,

I didn't realize that I even did not follow the manner of XML.
I have worked with this problem and got a small patch to handle "ID" in OpenVZ functionality. I found it is working well with the XML script included "ID" in domain tag.

I am concerned that I had to edit the common file domain_conf.c.
I still believe I should keep it away from this problem for compatibility with the others.
How do you think can I avoid this?


diff --git a/src/domain_conf.c b/src/domain_conf.c
index 5ae0775..f74961f 100644
--- a/src/domain_conf.c
+++ b/src/domain_conf.c
@@ -2492,7 +2492,7 @@ static virDomainDefPtr virDomainDefParseXML (virConnectPtr conn,
         return NULL;
     }

-    if (!(flags & VIR_DOMAIN_XML_INACTIVE))
+    // if (!(flags & VIR_DOMAIN_XML_INACTIVE))
         if((virXPathLong(conn, "string(./@id)", ctxt, &id)) < 0)
             id = -1;
     def->id = (int)id;
diff --git a/src/openvz_conf.c b/src/openvz_conf.c
index be94b9e..d23f173 100644
--- a/src/openvz_conf.c
+++ b/src/openvz_conf.c
@@ -425,17 +425,18 @@ int openvzLoadDomains(struct openvz_driver *driver) {
     char uuidstr[VIR_UUID_STRING_BUFLEN];
     virDomainObjPtr dom = NULL;
     char temp[50];
+    char name[64];

     if (openvzAssignUUIDs() < 0)
         return -1;

- if ((fp = popen(VZLIST " -a -ovpsid,status -H 2>/dev/null", "r")) == NULL) { + if ((fp = popen(VZLIST " -a -ovpsid,name,status -H 2>/dev/null", "r")) == NULL) { openvzError(NULL, VIR_ERR_INTERNAL_ERROR, "%s", _("popen failed"));
         return -1;
     }

     while(!feof(fp)) {
-        if (fscanf(fp, "%d %s\n", &veid, status) != 2) {
+        if (fscanf(fp, "%d %s\n", &veid, name, status) != 3) {
             if (feof(fp))
                 break;

@@ -465,7 +466,7 @@ int openvzLoadDomains(struct openvz_driver *driver) {
         dom->pid = veid;
         dom->def->id = dom->state == VIR_DOMAIN_SHUTOFF ? -1 : veid;

-        if (virAsprintf(&dom->def->name, "%i", veid) < 0)
+        if (virAsprintf(&dom->def->name, "%s", name) < 0)
             goto no_memory;

         openvzGetVPSUUID(veid, uuidstr, sizeof(uuidstr));
diff --git a/src/openvz_driver.c b/src/openvz_driver.c
index a8c24ba..c0c1e0f 100644
--- a/src/openvz_driver.c
+++ b/src/openvz_driver.c
@@ -101,6 +101,7 @@ static int openvzDomainDefineCmd(virConnectPtr conn,
                                  virDomainDefPtr vmdef)
 {
     int narg;
+    char str_id[10];

     for (narg = 0; narg < maxarg; narg++)
         args[narg] = NULL;
@@ -130,6 +131,11 @@ static int openvzDomainDefineCmd(virConnectPtr conn,
     ADD_ARG_LIT(VZCTL);
     ADD_ARG_LIT("--quiet");
     ADD_ARG_LIT("create");
+
+    sprintf( str_id, "%d", vmdef->id );
+    ADD_ARG_LIT(str_id);
+
+    ADD_ARG_LIT("--name");
     ADD_ARG_LIT(vmdef->name);

     if (vmdef->nfss == 1 &&
@@ -1229,7 +1235,11 @@ static int openvzListDefinedDomains (virConnectPtr conn,
     char vpsname[32];
     char buf[32];
     char *endptr;
-    const char *cmd[] = {VZLIST, "-ovpsid", "-H", "-S", NULL};
+    const char *cmd[] = {VZLIST, "-oname", "-H", "-S", NULL};
+    int cnt = 0;
+    char name_buf[32];
+
+

     /* the -S options lists only stopped domains */
     ret = virExec(conn, cmd, NULL, NULL,
@@ -1241,14 +1251,14 @@ static int openvzListDefinedDomains (virConnectPtr conn,
     }

     while(got < nnames){
-        ret = openvz_readline(outfd, buf, 32);
+        ret = openvz_readline(outfd, buf, 64);
         if(!ret) break;
-        if (virStrToLong_i(buf, &endptr, 10, &veid) < 0) {
-            openvzError(conn, VIR_ERR_INTERNAL_ERROR,
-                    _("Could not parse VPS ID %s"), buf);
-            continue;
+        cnt = 0;
+        while( buf[cnt] != ' ' ){
+             name_buf[cnt] = buf[cnt];
+             cnt++;
         }
-        snprintf(vpsname, sizeof(vpsname), "%d", veid);
+        snprintf(vpsname, sizeof(vpsname), "%d", name_buf);
         if (!(names[got] = strdup(vpsname)))
             goto no_memory;
         got ++;
--
1.5.2.2

-----
Yuji Nishida
nishidy nict go jp


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