X-Git-Url: https://gerrit.opnfv.org/gerrit/gitweb?a=blobdiff_plain;f=functest%2Fcore%2Ftenantnetwork.py;h=b118893ded80a026d13752f132e1476def8fde54;hb=9c19bb9bb41e36d4ca70563649ced92ce7ab9b82;hp=bf14f4126ac09fb9d49b53d76ef36db032ea6488;hpb=5f7080c5425306cece86d12baed429d795b92f44;p=functest.git diff --git a/functest/core/tenantnetwork.py b/functest/core/tenantnetwork.py index bf14f4126..b118893de 100644 --- a/functest/core/tenantnetwork.py +++ b/functest/core/tenantnetwork.py @@ -28,7 +28,6 @@ from xtesting.core import testcase from functest.utils import config from functest.utils import env -from functest.utils import functest_utils class NewProject(object): @@ -46,6 +45,9 @@ class NewProject(object): self.user = None self.password = None self.domain = None + self.role = None + self.role_name = None + self.default_member = env.get('NEW_USER_ROLE') def create(self): """Create projects/users""" @@ -66,12 +68,26 @@ class NewProject(object): password=self.password, domain_id=self.domain.id) self.__logger.debug("user: %s", self.user) + try: + if self.orig_cloud.get_role(self.default_member): + self.role_name = self.default_member + elif self.orig_cloud.get_role(self.default_member.lower()): + self.role_name = self.default_member.lower() + else: + raise Exception("Cannot detect {}".format(self.default_member)) + except Exception: # pylint: disable=broad-except + self.__logger.info("Creating default role %s", self.default_member) + self.role = self.orig_cloud.create_role(self.default_member) + self.role_name = self.role.name + self.__logger.debug("role: %s", self.role) self.orig_cloud.grant_role( - "Member", user=self.user.id, project=self.project.id, + self.role_name, user=self.user.id, project=self.project.id, domain=self.domain.id) osconfig = os_client_config.config.OpenStackConfig() osconfig.cloud_config[ 'clouds']['envvars']['project_name'] = self.project.name + osconfig.cloud_config[ + 'clouds']['envvars']['project_id'] = self.project.id osconfig.cloud_config['clouds']['envvars']['username'] = self.user.name osconfig.cloud_config['clouds']['envvars']['password'] = self.password self.__logger.debug("cloud_config %s", osconfig.cloud_config) @@ -83,10 +99,12 @@ class NewProject(object): """Remove projects/users""" try: assert self.orig_cloud - assert self.user.id - assert self.project.id - self.orig_cloud.delete_user(self.user.id) - self.orig_cloud.delete_project(self.project.id) + if self.user: + self.orig_cloud.delete_user(self.user.id) + if self.project: + self.orig_cloud.delete_project(self.project.id) + if self.role: + self.orig_cloud.delete_role(self.role.id) except Exception: # pylint: disable=broad-except self.__logger.exception("Cannot clean all ressources") @@ -104,7 +122,8 @@ class TenantNetwork1(testcase.TestCase): """ __logger = logging.getLogger(__name__) - cidr = '192.168.0.0/24' + cidr = '192.168.120.0/24' + shared_network = False def __init__(self, **kwargs): if "case_name" not in kwargs: @@ -120,7 +139,7 @@ class TenantNetwork1(testcase.TestCase): self.ext_net = None self.__logger.exception("Cannot connect to Cloud") try: - self.ext_net = functest_utils.get_external_network(self.cloud) + self.ext_net = self.get_external_network(self.cloud) except Exception: # pylint: disable=broad-except self.__logger.exception("Cannot get the external network") self.guid = str(uuid.uuid4()) @@ -128,6 +147,43 @@ class TenantNetwork1(testcase.TestCase): self.subnet = None self.router = None + @staticmethod + def get_external_network(cloud): + """ + Return the configured external network name or + the first retrieved external network name + """ + assert cloud + if env.get("EXTERNAL_NETWORK"): + network = cloud.get_network( + env.get("EXTERNAL_NETWORK"), {"router:external": True}) + if network: + return network + networks = cloud.list_networks({"router:external": True}) + if networks: + return networks[0] + return None + + @staticmethod + def get_default_role(cloud, member="Member"): + """Get the default role + + It also tests the role in lowercase to avoid possible conflicts. + """ + role = cloud.get_role(member) + if not role: + role = cloud.get_role(member.lower()) + return role + + @staticmethod + def get_public_auth_url(cloud): + """Get Keystone public endpoint""" + keystone_id = cloud.search_services('keystone')[0].id + endpoint = cloud.search_endpoints( + filters={'interface': 'public', + 'service_id': keystone_id})[0].url + return endpoint + def _create_network_ressources(self): assert self.cloud assert self.ext_net @@ -143,7 +199,8 @@ class TenantNetwork1(testcase.TestCase): config.CONF, '{}_segmentation_id'.format(self.case_name)) self.network = self.cloud.create_network( '{}-net_{}'.format(self.case_name, self.guid), - provider=provider) + provider=provider, + shared=self.shared_network) self.__logger.debug("network: %s", self.network) self.subnet = self.cloud.create_subnet( @@ -179,10 +236,15 @@ class TenantNetwork1(testcase.TestCase): def clean(self): try: assert self.cloud - self.cloud.remove_router_interface(self.router, self.subnet.id) - self.cloud.delete_router(self.router.id) - self.cloud.delete_subnet(self.subnet.id) - self.cloud.delete_network(self.network.id) + if self.router: + if self.subnet: + self.cloud.remove_router_interface( + self.router, self.subnet.id) + self.cloud.delete_router(self.router.id) + if self.subnet: + self.cloud.delete_subnet(self.subnet.id) + if self.network: + self.cloud.delete_network(self.network.id) except Exception: # pylint: disable=broad-except self.__logger.exception("cannot clean all ressources")