aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCédric Ollivier <cedric.ollivier@orange.com>2019-09-26 17:29:32 +0200
committerCédric Ollivier <cedric.ollivier@orange.com>2019-09-26 18:05:34 +0200
commit3362bf4b54f51e6d8b4aa1b4e96a773bd5c36abe (patch)
tree7fb020a97412d3a71a0769cc226d06d99607e483
parente1328a170e677d922c18d68154511699c33c1478 (diff)
Allow getting service via any endpoint
It overrides the default implementation provided by Shade. Change-Id: I3ad2f8ba543be4483f108c4bd7765018dddc5b19 Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com> (cherry picked from commit 44d577770f19136483b3d48aa627b035513e27b5)
-rw-r--r--functest/core/tenantnetwork.py3
-rw-r--r--functest/opnfv_tests/openstack/api/connection_check.py10
-rw-r--r--functest/utils/env.py3
-rw-r--r--functest/utils/functest_utils.py47
4 files changed, 53 insertions, 10 deletions
diff --git a/functest/core/tenantnetwork.py b/functest/core/tenantnetwork.py
index 7a3911e9d..2c85aaa52 100644
--- a/functest/core/tenantnetwork.py
+++ b/functest/core/tenantnetwork.py
@@ -31,6 +31,7 @@ from xtesting.core import testcase
from functest.utils import config
from functest.utils import env
+from functest.utils import functest_utils
class NewProject(object):
@@ -205,7 +206,7 @@ class TenantNetwork1(testcase.TestCase):
@staticmethod
def get_public_auth_url(cloud):
"""Get Keystone public endpoint"""
- keystone_id = cloud.search_services('keystone')[0].id
+ keystone_id = functest_utils.search_services(cloud, 'keystone')[0].id
endpoint = cloud.search_endpoints(
filters={'interface': 'public',
'service_id': keystone_id})[0].url
diff --git a/functest/opnfv_tests/openstack/api/connection_check.py b/functest/opnfv_tests/openstack/api/connection_check.py
index cebb63108..927b73bfa 100644
--- a/functest/opnfv_tests/openstack/api/connection_check.py
+++ b/functest/opnfv_tests/openstack/api/connection_check.py
@@ -16,7 +16,6 @@ import os_client_config
import shade
from xtesting.core import testcase
-from functest.utils import env
from functest.utils import functest_utils
@@ -29,7 +28,7 @@ class ConnectionCheck(testcase.TestCase):
"list_endpoints", "list_floating_ip_pools", "list_floating_ips",
"list_hypervisors", "list_keypairs", "list_networks", "list_ports",
"list_role_assignments", "list_roles", "list_routers", "list_servers",
- "list_services", "list_subnets"]
+ "list_subnets"]
def __init__(self, **kwargs):
if "case_name" not in kwargs:
@@ -48,11 +47,8 @@ class ConnectionCheck(testcase.TestCase):
try:
assert self.cloud
self.start_time = time.time()
- if env.get('PUBLIC_ENDPOINT_ONLY').lower() == 'true':
- self.__logger.warning(
- "Listing services is skipped "
- "because the admin endpoints are unreachable")
- self.func_list.remove("list_services")
+ self.__logger.debug(
+ "list_services: %s", functest_utils.list_services(self.cloud))
for func in self.func_list:
self.__logger.debug(
"%s: %s", func, getattr(self.cloud, func)())
diff --git a/functest/utils/env.py b/functest/utils/env.py
index ba8d6ce55..892d1749d 100644
--- a/functest/utils/env.py
+++ b/functest/utils/env.py
@@ -39,8 +39,7 @@ INPUTS = {
'NEW_USER_ROLE': 'Member',
'USE_DYNAMIC_CREDENTIALS': 'True',
'BLOCK_MIGRATION': 'True',
- 'CLEAN_ORPHAN_SECURITY_GROUPS': 'True',
- 'PUBLIC_ENDPOINT_ONLY': 'False'
+ 'CLEAN_ORPHAN_SECURITY_GROUPS': 'True'
}
diff --git a/functest/utils/functest_utils.py b/functest/utils/functest_utils.py
index c953dca81..daea3561c 100644
--- a/functest/utils/functest_utils.py
+++ b/functest/utils/functest_utils.py
@@ -11,10 +11,12 @@
from __future__ import print_function
import logging
+import os
import subprocess
import sys
import yaml
+from openstack.cloud import _utils
import six
LOGGER = logging.getLogger(__name__)
@@ -138,6 +140,51 @@ def get_openstack_version(cloud):
return "Unknown"
+def list_services(cloud):
+ # pylint: disable=protected-access
+ """Search Keystone services via $OS_INTERFACE.
+
+ It mainly conforms with `Shade
+ <latest/reference/api-microversion-history.html>`_ but allows testing vs
+ public endpoints. It's worth mentioning that it doesn't support keystone
+ v2.
+
+ :returns: a list of ``munch.Munch`` containing the services description
+
+ :raises: ``OpenStackCloudException`` if something goes wrong during the
+ openstack API call.
+ """
+ url, key = '/services', 'services'
+ data = cloud._identity_client.get(
+ url, endpoint_filter={
+ 'interface': os.environ.get('OS_INTERFACE', 'public')},
+ error_message="Failed to list services")
+ services = cloud._get_and_munchify(key, data)
+ return _utils.normalize_keystone_services(services)
+
+
+def search_services(cloud, name_or_id=None, filters=None):
+ # pylint: disable=protected-access
+ """Search Keystone services ia $OS_INTERFACE.
+
+ It mainly conforms with `Shade
+ <latest/reference/api-microversion-history.html>`_ but allows testing vs
+ public endpoints. It's worth mentioning that it doesn't support keystone
+ v2.
+
+ :param name_or_id: Name or id of the desired service.
+ :param filters: a dict containing additional filters to use. e.g.
+ {'type': 'network'}.
+
+ :returns: a list of ``munch.Munch`` containing the services description
+
+ :raises: ``OpenStackCloudException`` if something goes wrong during the
+ openstack API call.
+ """
+ services = list_services(cloud)
+ return _utils._filter_list(services, name_or_id, filters)
+
+
def convert_dict_to_ini(value):
"Convert dict to oslo.conf input"
assert isinstance(value, dict)