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

[libvirt] [PATCH] Add support for Vendor and Model in Storage Pool XML



 Hi all,

I wrote a patch to add support for listing the Vendor and Model of a storage pool in the storage pool XML. This would allow vendor extensions of specific devices. The patch includes a test for the new attributes as well. I'd appreciate some feedback on it, and would like get it merged when it's ready. Patch added at the bottom of the message.

Best,

Patrick Dignan

diff -Naurb libvirt-0.8.2.mod/docs/schemas/storagepool.rng libvirt-0.8.2.ml/docs/schemas/storagepool.rng --- libvirt-0.8.2.mod/docs/schemas/storagepool.rng 2010-06-16 17:27:22.000000000 -0500 +++ libvirt-0.8.2.ml/docs/schemas/storagepool.rng 2010-07-30 17:19:32.835531455 -0500
@@ -8,6 +8,10 @@

<define name='pool'>
<element name='pool'>
+ <optional>
+ <ref name='poolvendor'/>
+ <ref name='poolmodel'/>
+ </optional>
<choice>
<ref name='pooldir'/>
<ref name='poolfs'/>
@@ -103,6 +107,18 @@
<ref name='target'/>
</define>

+ <define name='poolvendor'>
+ <attribute name='vendor'>
+ <text/>
+ </attribute>
+ </define>
+
+ <define name='poolmodel'>
+ <attribute name='model'>
+ <text/>
+ </attribute>
+ </define>
+
<define name='commonmetadata'>
<element name='name'>
<ref name='name'/>
diff -Naurb libvirt-0.8.2.mod/include/libvirt/libvirt.h libvirt-0.8.2.ml/include/libvirt/libvirt.h --- libvirt-0.8.2.mod/include/libvirt/libvirt.h 2010-07-22 10:26:05.000000000 -0500 +++ libvirt-0.8.2.ml/include/libvirt/libvirt.h 2010-07-30 11:56:48.726415607 -0500
@@ -1141,6 +1141,8 @@
 typedef struct _virStoragePoolInfo virStoragePoolInfo;

 struct _virStoragePoolInfo {
+  char *vendor;
+  char *model;
   int state;                     /* virStoragePoolState flags */
   unsigned long long capacity;   /* Logical size bytes */
   unsigned long long allocation; /* Current allocation bytes */
diff -Naurb libvirt-0.8.2.mod/src/conf/storage_conf.c libvirt-0.8.2.ml/src/conf/storage_conf.c --- libvirt-0.8.2.mod/src/conf/storage_conf.c 2010-06-16 17:27:22.000000000 -0500 +++ libvirt-0.8.2.ml/src/conf/storage_conf.c 2010-08-02 11:52:48.618533010 -0500
@@ -298,6 +298,12 @@

     VIR_FREE(def->name);

+    if (def->vendor != "generic")
+        VIR_FREE(def->vendor);
+
+    if (def->model != "generic")
+        VIR_FREE(def->model);
+
     virStoragePoolSourceFree(&def->source);

     VIR_FREE(def->target.path);
@@ -601,6 +607,8 @@
     virStoragePoolDefPtr ret;
     xmlNodePtr source_node;
     char *type = NULL;
+    char *vendor = NULL;
+    char *model = NULL;
     char *uuid = NULL;
     char *tmppath;

@@ -616,6 +624,22 @@
         goto cleanup;
     }

+    /* Get the vendor and model from the XML and set them in the struct */
+    vendor = virXPathString("string(./@vendor)", ctxt);
+    model = virXPathString("string(./@model)", ctxt);
+
+    if (vendor != NULL) {
+        ret->vendor = vendor;
+    } else {
+        ret->vendor = "generic";
+    }
+
+    if (model != NULL) {
+        ret->model = model;
+    } else {
+        ret->model = "generic";
+    }
+
     xmlFree(type);
     type = NULL;

@@ -861,7 +885,13 @@
                               "%s", _("unexpected pool type"));
         goto cleanup;
     }
+
+ if (def->vendor == NULL || def->model == NULL || STREQ(def->vendor,"generic") || STREQ(def->model,"generic")) {
     virBufferVSprintf(&buf, "<pool type='%s'>\n", type);
+    } else {
+ virBufferVSprintf(&buf, "<pool type='%s' vendor='%s' model='%s'>\n", type, def->vendor, def->model);
+    }
+
     virBufferVSprintf(&buf," <name>%s</name>\n", def->name);

     virUUIDFormat(def->uuid, uuid);
diff -Naurb libvirt-0.8.2.mod/src/conf/storage_conf.h libvirt-0.8.2.ml/src/conf/storage_conf.h --- libvirt-0.8.2.mod/src/conf/storage_conf.h 2010-06-16 17:27:22.000000000 -0500 +++ libvirt-0.8.2.ml/src/conf/storage_conf.h 2010-07-29 16:37:28.333458251 -0500
@@ -256,6 +256,8 @@
     char *name;
     unsigned char uuid[VIR_UUID_BUFLEN];
     int type; /* virStoragePoolType */
+    char *vendor;
+    char *model;

     unsigned long long allocation;
     unsigned long long capacity;
diff -Naurb libvirt-0.8.2.mod/tests/storagepoolxml2xmlin/pool-iscsi-vendor-model.xml libvirt-0.8.2.ml/tests/storagepoolxml2xmlin/pool-iscsi-vendor-model.xml --- libvirt-0.8.2.mod/tests/storagepoolxml2xmlin/pool-iscsi-vendor-model.xml 1969-12-31 18:00:00.000000000 -0600 +++ libvirt-0.8.2.ml/tests/storagepoolxml2xmlin/pool-iscsi-vendor-model.xml 2010-08-02 12:00:37.015538583 -0500
@@ -0,0 +1,17 @@
+<pool type='iscsi' vendor='test-vendor' model='test-model'>
+ <name>virtimages</name>
+ <uuid>e9392370-2917-565e-692b-d057f46512d6</uuid>
+ <source>
+ <host name="iscsi.example.com"/>
+ <device path="demo-target"/>
+ <auth type='chap' login='foobar' passwd='frobbar'/>
+ </source>
+ <target>
+ <path>/dev/disk/by-path</path>
+ <permissions>
+ <mode>0700</mode>
+ <owner>0</owner>
+ <group>0</group>
+ </permissions>
+ </target>
+</pool>
diff -Naurb libvirt-0.8.2.mod/tests/storagepoolxml2xmlout/pool-iscsi-vendor-model.xml libvirt-0.8.2.ml/tests/storagepoolxml2xmlout/pool-iscsi-vendor-model.xml --- libvirt-0.8.2.mod/tests/storagepoolxml2xmlout/pool-iscsi-vendor-model.xml 1969-12-31 18:00:00.000000000 -0600 +++ libvirt-0.8.2.ml/tests/storagepoolxml2xmlout/pool-iscsi-vendor-model.xml 2010-08-02 12:16:19.571537734 -0500
@@ -0,0 +1,20 @@
+<pool type='iscsi' vendor='test-vendor' model='test-model'>
+ <name>virtimages</name>
+ <uuid>e9392370-2917-565e-692b-d057f46512d6</uuid>
+ <capacity>0</capacity>
+ <allocation>0</allocation>
+ <available>0</available>
+ <source>
+ <host name='iscsi.example.com'/>
+ <device path='demo-target'/>
+ <auth type='chap' login='foobar' passwd='frobbar'/>
+ </source>
+ <target>
+ <path>/dev/disk/by-path</path>
+ <permissions>
+ <mode>0700</mode>
+ <owner>0</owner>
+ <group>0</group>
+ </permissions>
+ </target>
+</pool>
diff -Naurb libvirt-0.8.2.mod/tests/storagepoolxml2xmltest.c libvirt-0.8.2.ml/tests/storagepoolxml2xmltest.c --- libvirt-0.8.2.mod/tests/storagepoolxml2xmltest.c 2010-06-16 17:27:22.000000000 -0500 +++ libvirt-0.8.2.ml/tests/storagepoolxml2xmltest.c 2010-08-02 12:32:47.838532225 -0500
@@ -96,6 +96,7 @@
     DO_TEST("pool-scsi");
     DO_TEST("pool-mpath");
     DO_TEST("pool-iscsi-multiiqn");
+    DO_TEST("pool-iscsi-vendor-model");

     return (ret==0 ? EXIT_SUCCESS : EXIT_FAILURE);
 }


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