You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2014/08/07 17:56:01 UTC

[2/2] git commit: Add utility get_service_types method to OpenStackServiceCatalog class.

Add utility get_service_types method to OpenStackServiceCatalog class.


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/13fe413d
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/13fe413d
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/13fe413d

Branch: refs/heads/trunk
Commit: 13fe413d7af4c11b836cbda0a3aa2a2f94ee03d5
Parents: 1e28abe
Author: Tomaz Muraus <to...@apache.org>
Authored: Thu Aug 7 17:48:29 2014 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Thu Aug 7 17:49:15 2014 +0200

----------------------------------------------------------------------
 libcloud/common/openstack.py            | 21 +++++++++++++++++++++
 libcloud/test/compute/test_openstack.py |  8 ++++++++
 2 files changed, 29 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/13fe413d/libcloud/common/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/common/openstack.py b/libcloud/common/openstack.py
index 3d4786b..61d16c1 100644
--- a/libcloud/common/openstack.py
+++ b/libcloud/common/openstack.py
@@ -506,10 +506,31 @@ class OpenStackServiceCatalog(object):
 
         return list(regions)
 
+    def get_service_types(self, region=None):
+        """
+        Retrieve all the available service types.
+
+        :param region: Optional region to retrieve service types for.
+        :type region: ``str``
+
+        :rtype: ``list`` of ``str``
+        """
+        service_types = set()
+
+        for service_type, values in self._service_catalog.items():
+            regions = values.keys()
+            if not region or region in regions:
+                service_types.add(service_type)
+
+        return list(service_types)
+
     def get_service_names(self, service_type, region=None):
         """
         Retrieve list of service names that match service type and region
 
+        :type service_type: ``str``
+        :type region: ``str``
+
         :rtype: ``list`` of ``str``
         """
         names = set()

http://git-wip-us.apache.org/repos/asf/libcloud/blob/13fe413d/libcloud/test/compute/test_openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py
index 06e79ba..77a38e9 100644
--- a/libcloud/test/compute/test_openstack.py
+++ b/libcloud/test/compute/test_openstack.py
@@ -117,6 +117,14 @@ class OpenStackServiceCatalogTests(unittest.TestCase):
         regions = self.service_catalog.get_regions()
         self.assertEqual(sorted(regions), ['LON', 'ORD'])
 
+    def test_get_service_types(self):
+        service_types = self.service_catalog.get_service_types()
+        self.assertEqual(sorted(service_types), ['compute', 'object-store',
+                                                 'rax:object-cdn'])
+
+        service_types = self.service_catalog.get_service_types(region='invalid')
+        self.assertEqual(sorted(service_types), [])
+
     def test_get_service_names(self):
         OpenStackBaseConnection.conn_classes = (OpenStack_2_0_MockHttp,
                                                 OpenStack_2_0_MockHttp)