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/04 20:45:26 UTC
git commit: Add utility get_regions and get_service_names function to
the OpenStackServiceCatalog class.
Repository: libcloud
Updated Branches:
refs/heads/trunk 63b8045b0 -> 7132cb223
Add utility get_regions and get_service_names function to the
OpenStackServiceCatalog class.
Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/7132cb22
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/7132cb22
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/7132cb22
Branch: refs/heads/trunk
Commit: 7132cb2234f4e90664e2808f6ddd16fa23bcdb8c
Parents: 63b8045
Author: Tomaz Muraus <to...@apache.org>
Authored: Mon Aug 4 18:56:40 2014 +0200
Committer: Tomaz Muraus <to...@apache.org>
Committed: Mon Aug 4 20:36:30 2014 +0200
----------------------------------------------------------------------
CHANGES.rst | 4 +++
libcloud/common/openstack.py | 44 ++++++++++++++++++++++++++++
libcloud/test/compute/test_openstack.py | 32 ++++++++++++++++----
3 files changed, 74 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/libcloud/blob/7132cb22/CHANGES.rst
----------------------------------------------------------------------
diff --git a/CHANGES.rst b/CHANGES.rst
index 6de450b..92980a8 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -33,6 +33,10 @@ Compute
(GITHUB-339)
[Eric Johnson]
+- Add utility ``get_regions`` and ``get_service_names`` methods to the
+ ``OpenStackServiceCatalog`` class.
+ [Andrew Mann, Tomaz Muraus]
+
Loadbalancer
~~~~~~~~~~~~
http://git-wip-us.apache.org/repos/asf/libcloud/blob/7132cb22/libcloud/common/openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/common/openstack.py b/libcloud/common/openstack.py
index 26bf692..73bd27e 100644
--- a/libcloud/common/openstack.py
+++ b/libcloud/common/openstack.py
@@ -378,6 +378,50 @@ class OpenStackServiceCatalog(object):
else:
return {}
+ def get_regions(self):
+ """
+ Retrieve a list of all the available regions.
+
+ :rtype: ``list`` of ``str``
+ """
+ regions = set()
+
+ catalog_items = self._service_catalog.items()
+
+ if '2.0' in self._auth_version:
+ for service_type, services_by_name in catalog_items:
+ items = services_by_name.items()
+ for service_name, endpoints_by_region in items:
+ for region in endpoints_by_region.keys():
+ if region:
+ regions.add(region)
+ elif ('1.1' in self._auth_version) or ('1.0' in self._auth_version):
+ for service_name, endpoints_by_region in catalog_items:
+ for region in endpoints_by_region.keys():
+ if region:
+ regions.add(region)
+
+ return list(regions)
+
+ def get_service_names(self, service_type, region=None):
+ """
+ Retrieve list of service names that match service type and region
+
+ :rtype: ``list`` of ``str``
+ """
+ names = set()
+
+ if '2.0' in self._auth_version:
+ named_entries = self._service_catalog.get(service_type, {})
+ for (name, region_entries) in named_entries.items():
+ # Support None for region to return the first found
+ if region is None or region in region_entries.keys():
+ names.add(name)
+ else:
+ raise ValueError('Unsupported version: %s' % (self._auth_version))
+
+ return list(names)
+
def _parse_auth_v1(self, service_catalog):
for service, endpoints in service_catalog.items():
http://git-wip-us.apache.org/repos/asf/libcloud/blob/7132cb22/libcloud/test/compute/test_openstack.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_openstack.py b/libcloud/test/compute/test_openstack.py
index 6f5af3c..e097128 100644
--- a/libcloud/test/compute/test_openstack.py
+++ b/libcloud/test/compute/test_openstack.py
@@ -92,26 +92,46 @@ class OpenStackServiceCatalogTests(unittest.TestCase):
OpenStackBaseConnection.conn_classes = (OpenStackMockHttp,
OpenStackMockHttp)
- def test_connection_get_service_catalog(self):
connection = OpenStackBaseConnection(*OPENSTACK_PARAMS)
connection.auth_url = "https://auth.api.example.com"
connection._ex_force_base_url = "https://www.foo.com"
connection.driver = OpenStack_1_0_NodeDriver(*OPENSTACK_PARAMS)
- result = connection.get_service_catalog()
- catalog = result.get_catalog()
- endpoints = result.get_endpoints('cloudFilesCDN', 'cloudFilesCDN')
- public_urls = result.get_public_urls('cloudFilesCDN', 'cloudFilesCDN')
+ self.service_catalog = connection.get_service_catalog()
+ self.catalog = self.service_catalog.get_catalog()
+
+ def test_connection_get_service_catalog(self):
+ endpoints = self.service_catalog.get_endpoints('cloudFilesCDN', 'cloudFilesCDN')
+ public_urls = self.service_catalog.get_public_urls('cloudFilesCDN', 'cloudFilesCDN')
expected_urls = [
'https://cdn2.clouddrive.com/v1/MossoCloudFS',
'https://cdn2.clouddrive.com/v1/MossoCloudFS'
]
- self.assertTrue('cloudFilesCDN' in catalog)
+ self.assertTrue('cloudFilesCDN' in self.catalog)
self.assertEqual(len(endpoints), 2)
self.assertEqual(public_urls, expected_urls)
+ def test_get_regions(self):
+ regions = self.service_catalog.get_regions()
+ self.assertEqual(regions, ['ORD', 'LON'])
+
+ def test_get_service_names(self):
+ OpenStackBaseConnection.conn_classes = (OpenStack_2_0_MockHttp,
+ OpenStack_2_0_MockHttp)
+ OpenStackBaseConnection._auth_version = '2.0'
+
+ connection = OpenStackBaseConnection(*OPENSTACK_PARAMS)
+ connection.auth_url = "https://auth.api.example.com"
+ connection._ex_force_base_url = "https://www.foo.com"
+ connection.driver = OpenStack_1_0_NodeDriver(*OPENSTACK_PARAMS)
+
+ service_catalog = connection.get_service_catalog()
+
+ service_names = service_catalog.get_service_names(service_type='object-store')
+ self.assertEqual(service_names, ['cloudFiles'])
+
class OpenStackAuthConnectionTests(unittest.TestCase):
# TODO refactor and move into libcloud/test/common