Author: tomaz
Date: Tue May 21 20:10:02 2013
New Revision: 1484931
URL: http://svn.apache.org/r1484931
Log:
Add a couple of more utility methods to the OpenStackServiceCatalog class.
Modified:
libcloud/trunk/libcloud/common/openstack.py
libcloud/trunk/libcloud/test/compute/test_openstack.py
Modified: libcloud/trunk/libcloud/common/openstack.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/common/openstack.py?rev=1484931&r1=1484930&r2=1484931&view=diff
==============================================================================
--- libcloud/trunk/libcloud/common/openstack.py (original)
+++ libcloud/trunk/libcloud/common/openstack.py Tue May 21 20:10:02 2013
@@ -265,6 +265,20 @@ class OpenStackServiceCatalog(object):
raise LibcloudError('auth version "%s" not supported'
% (self._auth_version))
+ def get_catalog(self):
+ return self._service_catalog
+
+ def get_public_urls(self, service_type=None, name=None):
+ endpoints = self.get_endpoints(service_type=service_type,
+ name=name)
+
+ result = []
+ for endpoint in endpoints:
+ if 'publicURL' in endpoint:
+ result.append(endpoint['publicURL'])
+
+ return result
+
def get_endpoints(self, service_type=None, name=None):
eps = []
@@ -280,7 +294,6 @@ class OpenStackServiceCatalog(object):
return eps
def get_endpoint(self, service_type=None, name=None, region=None):
-
if '2.0' in self._auth_version:
endpoint = self._service_catalog.get(service_type, {}) \
.get(name, {}).get(region, [])
@@ -294,7 +307,6 @@ class OpenStackServiceCatalog(object):
return {}
def _parse_auth_v1(self, service_catalog):
-
for service, endpoints in service_catalog.items():
self._service_catalog[service] = {}
@@ -423,6 +435,12 @@ class OpenStackBaseConnection(Connection
super(OpenStackBaseConnection, self).__init__(
user_id, key, secure=secure, timeout=timeout)
+ def get_service_catalog(self):
+ if self.service_catalog is None:
+ self._populate_hosts_and_request_paths()
+
+ return self.service_catalog
+
def get_endpoint(self):
"""
Selects the endpoint to use based on provider specific values,
Modified: libcloud/trunk/libcloud/test/compute/test_openstack.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/test/compute/test_openstack.py?rev=1484931&r1=1484930&r2=1484931&view=diff
==============================================================================
--- libcloud/trunk/libcloud/test/compute/test_openstack.py (original)
+++ libcloud/trunk/libcloud/test/compute/test_openstack.py Tue May 21 20:10:02
2013
@@ -26,6 +26,7 @@ from libcloud.utils.py3 import u
from libcloud.common.types import InvalidCredsError, MalformedResponseError, \
LibcloudError
+from libcloud.common.openstack import OpenStackBaseConnection
from libcloud.compute.types import Provider
from libcloud.compute.providers import get_driver
from libcloud.compute.drivers.openstack import (
@@ -68,6 +69,29 @@ class OpenStack_1_0_ResponseTestCase(uni
self.assertEqual(body, RESPONSE_BODY, "Non-XML body should be returned
as is")
+class OpenStackServiceCatalogTests(unittest.TestCase):
+ def test_connection_get_service_catalog(self):
+ connection = OpenStackBaseConnection(*OPENSTACK_PARAMS)
+ connection.conn_classes = (OpenStackMockHttp, OpenStackMockHttp)
+ connection.auth_url = "https://auth.api.example.com/v1.1/"
+ 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')
+
+ expected_urls = [
+ 'https://cdn2.clouddrive.com/v1/MossoCloudFS',
+ 'https://cdn2.clouddrive.com/v1/MossoCloudFS'
+ ]
+
+ self.assertTrue('cloudFilesCDN' in catalog)
+ self.assertEqual(len(endpoints), 2)
+ self.assertEqual(public_urls, expected_urls)
+
+
class OpenStack_1_0_Tests(unittest.TestCase, TestCaseMixin):
should_list_locations = False