[Kimchi-devel] [project-kimchi][PATCHv4] Return source information for storage pool

lvroyce at linux.vnet.ibm.com lvroyce at linux.vnet.ibm.com
Thu Dec 19 09:11:39 UTC 2013


From: Royce Lv <lvroyce at linux.vnet.ibm.com>

v1>v4, Delete logical pool source because UI just care VG name.
       Add update controller.
For netfs storage pool, remote export path and addr will make more
sense than local mount point.
Report storage source information in pool info.

Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
---
 docs/API.md              |  3 +++
 src/kimchi/controller.py |  1 +
 src/kimchi/mockmodel.py  |  1 +
 src/kimchi/model.py      | 16 ++++++++++++++++
 tests/test_rest.py       |  1 +
 5 files changed, 22 insertions(+)

diff --git a/docs/API.md b/docs/API.md
index 74bc1b5..9edc551 100644
--- a/docs/API.md
+++ b/docs/API.md
@@ -215,6 +215,9 @@ Represents a snapshot of the Virtual Machine's primary monitor.
     * nr_volumes: The number of storage volumes for active pools, 0 for inactive pools
     * autostart: Whether the storage pool will be enabled
                  automatically when the system boots
+    * source: Source of the storage pool,
+        * addr: mount address of this storage pool(for 'netfs' pool)
+        * path: export path of this storage pool(for 'netfs' pool)
 * **PUT**: Set whether the Storage Pool should be enabled automatically when the
            system boots
     * autostart: Toggle the autostart flag of the VM
diff --git a/src/kimchi/controller.py b/src/kimchi/controller.py
index 3b27c27..2940278 100644
--- a/src/kimchi/controller.py
+++ b/src/kimchi/controller.py
@@ -533,6 +533,7 @@ class StoragePool(Resource):
                'allocated': self.info['allocated'],
                'available': self.info['available'],
                'path': self.info['path'],
+               'source': self.info['source'],
                'type': self.info['type'],
                'nr_volumes': self.info['nr_volumes'],
                'autostart': self.info['autostart']}
diff --git a/src/kimchi/mockmodel.py b/src/kimchi/mockmodel.py
index 4839d4c..348127a 100644
--- a/src/kimchi/mockmodel.py
+++ b/src/kimchi/mockmodel.py
@@ -639,6 +639,7 @@ class MockStoragePool(object):
                      'allocated': 512 << 20,
                      'available': 512 << 20,
                      'path': '/var/lib/libvirt/images',
+                     'source': {},
                      'type': 'dir',
                      'nr_volumes': 0,
                      'autostart': 0}
diff --git a/src/kimchi/model.py b/src/kimchi/model.py
index 73c18ac..3bc5d6d 100644
--- a/src/kimchi/model.py
+++ b/src/kimchi/model.py
@@ -78,6 +78,9 @@ GUESTS_STATS_INTERVAL = 5
 HOST_STATS_INTERVAL = 1
 VM_STATIC_UPDATE_PARAMS = {'name': './name'}
 VM_LIVE_UPDATE_PARAMS = {}
+STORAGE_SOURCES = {'netfs': {'addr': '/pool/source/host/@name',
+                             'path': '/pool/source/dir/@path'}}
+
 
 def _uri_to_name(collection, uri):
     expr = '/%s/(.*?)/?$' % collection
@@ -1019,6 +1022,17 @@ class Model(object):
             raise OperationFailed(e.get_error_message())
         return name
 
+    def _get_storage_source(self, pool_type, pool_xml):
+        source = {}
+        if pool_type not in STORAGE_SOURCES:
+            return source
+
+        for key, val in STORAGE_SOURCES[pool_type].items():
+            res = xmlutils.xpath_get_text(pool_xml, val)
+            source[key] = res[0] if len(res) == 1 else res
+
+        return source
+
     def storagepool_lookup(self, name):
         pool = self._get_storagepool(name)
         info = pool.info()
@@ -1027,8 +1041,10 @@ class Model(object):
         xml = pool.XMLDesc(0)
         path = xmlutils.xpath_get_text(xml, "/pool/target/path")[0]
         pool_type = xmlutils.xpath_get_text(xml, "/pool/@type")[0]
+        source = self._get_storage_source(pool_type, xml)
         res = {'state': Model.pool_state_map[info[0]],
                'path': path,
+               'source': source,
                'type': pool_type,
                'autostart': autostart,
                'capacity': info[1],
diff --git a/tests/test_rest.py b/tests/test_rest.py
index 73b5243..f597796 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -417,6 +417,7 @@ class RestTests(unittest.TestCase):
         storagepool = json.loads(resp.read())
         self.assertEquals('storagepool-1', storagepool['name'])
         self.assertEquals('inactive', storagepool['state'])
+        self.assertIn('source', storagepool)
 
     def test_storagepool_action(self):
         # Create a storage pool
-- 
1.8.1.2

-- 
project-kimchi mailing list <project-kimchi at googlegroups.com>
https://groups.google.com/forum/#!forum/project-kimchi
--- 
You received this message because you are subscribed to the Google Groups "project-kimchi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to project-kimchi+unsubscribe at googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.



More information about the Kimchi-devel mailing list