Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 1 | import os |
| 2 | import pytest |
| 3 | import utils |
| 4 | import random |
| 5 | import time |
| 6 | import logging |
| 7 | |
Ievgeniia Zadorozhna | 9664b42 | 2023-03-28 21:09:46 +0300 | [diff] [blame] | 8 | from utils import helpers |
Ievgeniia Zadorozhna | a080ec0 | 2023-12-05 02:08:52 +0100 | [diff] [blame] | 9 | from utils.k8s_client import K8SClientManager |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 10 | from utils import os_client |
| 11 | |
| 12 | |
| 13 | logger = logging.getLogger(__name__) |
| 14 | |
Ievgeniia Zadorozhna | a080ec0 | 2023-12-05 02:08:52 +0100 | [diff] [blame] | 15 | nodes = utils.get_pairs() |
| 16 | hw_nodes = utils.get_hw_pairs() |
| 17 | |
| 18 | |
| 19 | @pytest.fixture(scope='session', params=list(nodes.values()), |
| 20 | ids=list(nodes.keys())) |
| 21 | def pair(request): |
| 22 | return request.param |
| 23 | |
| 24 | |
| 25 | @pytest.fixture(scope='session', params=list(hw_nodes.values()), |
| 26 | ids=list(hw_nodes.keys())) |
| 27 | def hw_pair(request): |
| 28 | return request.param |
| 29 | |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 30 | |
| 31 | @pytest.fixture(scope='session') |
| 32 | def openstack_clients(): |
| 33 | return os_client.OfficialClientManager( |
| 34 | username=os.environ['OS_USERNAME'], |
| 35 | password=os.environ['OS_PASSWORD'], |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 36 | project_name=os.environ['OS_PROJECT_NAME'], |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 37 | auth_url=os.environ['OS_AUTH_URL'], |
Ievgeniia Zadorozhna | 2151771 | 2024-07-30 14:14:08 +0200 | [diff] [blame] | 38 | endpoint_type=os.environ["OS_ENDPOINT_TYPE"], |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 39 | cert=False, |
| 40 | domain=os.environ['OS_PROJECT_DOMAIN_NAME'], |
Ievgeniia Zadorozhna | 68d6495 | 2024-08-22 18:15:45 +0200 | [diff] [blame] | 41 | interface=os.environ["OS_ENDPOINT_TYPE"], |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 42 | ) |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 43 | |
| 44 | |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 45 | @pytest.fixture(scope='session') |
| 46 | def os_resources(openstack_clients): |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 47 | logger.info("Setting up resources in admin project...") |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 48 | os_actions = os_client.OSCliActions(openstack_clients) |
| 49 | os_resource = {} |
| 50 | config = utils.get_configuration() |
Ievgeniia Zadorozhna | 5ed74e2 | 2022-07-26 16:56:23 +0300 | [diff] [blame] | 51 | image_name = config.get('image_name', 'cvp.ubuntu.2004') |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 52 | flavor_name = config.get('flavor_name', 'spt-test') |
| 53 | flavor_ram = config.get('flavor_ram', 1536) |
| 54 | flavor_vcpus = config.get('flavor_vcpus', 1) |
| 55 | flavor_disk = config.get('flavor_disk', 3) |
| 56 | |
| 57 | os_images_list = [image.id for image in |
| 58 | openstack_clients.image.images.list( |
| 59 | filters={'name': image_name})] |
| 60 | |
| 61 | if os_images_list.__len__() == 0: |
| 62 | pytest.skip("No images with name {}. This name can be redefined " |
| 63 | "with 'image_name' env var ".format(image_name)) |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 64 | os_resource['image_id'] = str(os_images_list[0]) |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 65 | flavor_id = os_actions.get_flavor_id_by_name(flavor_name) |
| 66 | if flavor_id is None: |
| 67 | flavor_is_created = True |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 68 | os_resource['flavor_id'] = os_actions.create_flavor( |
| 69 | flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 70 | else: |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 71 | flavor_is_created = False |
| 72 | logger.info("Flavor {} already exists".format(flavor_name)) |
| 73 | os_resource['flavor_id'] = flavor_id |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 74 | |
| 75 | os_resource['sec_group'] = os_actions.create_sec_group() |
| 76 | os_resource['keypair'] = openstack_clients.compute.keypairs.create( |
| 77 | '{}-{}'.format('spt-key', random.randrange(100, 999)) |
| 78 | ) |
| 79 | os_resource['net1'] = os_actions.create_network_resources() |
| 80 | os_resource['ext_net'] = os_actions.get_external_network() |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 81 | adm_project = os_actions.get_project_by_name("admin") |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 82 | os_resource['router'] = os_actions.create_router( |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 83 | os_resource['ext_net'], adm_project.id) |
| 84 | os_resource['net2'] = os_actions.create_network(adm_project.id) |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 85 | os_resource['subnet2'] = os_actions.create_subnet( |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 86 | os_resource['net2'], adm_project.id, '10.2.7.0/24') |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 87 | for subnet in openstack_clients.network.list_subnets()['subnets']: |
| 88 | if subnet['network_id'] == os_resource['net1']['id']: |
| 89 | os_resource['subnet1'] = subnet['id'] |
| 90 | |
| 91 | openstack_clients.network.add_interface_router( |
Ievgeniia Zadorozhna | c67b86b | 2023-02-02 18:09:12 +0300 | [diff] [blame] | 92 | os_resource['router']['id'], {'subnet_id': os_resource['subnet1']}) |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 93 | openstack_clients.network.add_interface_router( |
| 94 | os_resource['router']['id'], |
| 95 | {'subnet_id': os_resource['subnet2']['id']}) |
| 96 | yield os_resource |
| 97 | |
| 98 | # cleanup created resources |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 99 | logger.info("Deleting routers, networks, SG, key pair, flavor in {}..." |
| 100 | "".format(adm_project.name)) |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 101 | openstack_clients.network.remove_interface_router( |
| 102 | os_resource['router']['id'], {'subnet_id': os_resource['subnet1']}) |
| 103 | openstack_clients.network.remove_interface_router( |
| 104 | os_resource['router']['id'], |
| 105 | {'subnet_id': os_resource['subnet2']['id']}) |
| 106 | openstack_clients.network.remove_gateway_router( |
| 107 | os_resource['router']['id']) |
| 108 | time.sleep(5) |
| 109 | openstack_clients.network.delete_router(os_resource['router']['id']) |
Ievgeniia Zadorozhna | c67b86b | 2023-02-02 18:09:12 +0300 | [diff] [blame] | 110 | time.sleep(10) # extended to 10 since fails at TF sometimes |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 111 | openstack_clients.network.delete_network(os_resource['net1']['id']) |
| 112 | openstack_clients.network.delete_network(os_resource['net2']['id']) |
| 113 | |
Ievgeniia Zadorozhna | 2c6469d | 2022-08-10 17:21:10 +0300 | [diff] [blame] | 114 | openstack_clients.network.delete_security_group( |
| 115 | os_resource['sec_group']['id']) |
Ievgeniia Zadorozhna | 8402302 | 2021-12-30 13:00:41 +0200 | [diff] [blame] | 116 | openstack_clients.compute.keypairs.delete(os_resource['keypair'].name) |
| 117 | if flavor_is_created: |
| 118 | openstack_clients.compute.flavors.delete(os_resource['flavor_id']) |
| 119 | if os_actions.create_fake_ext_net: |
| 120 | openstack_clients.network.delete_network(os_resource['ext_net']['id']) |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 121 | |
| 122 | |
| 123 | @pytest.fixture(scope='session') |
| 124 | def openstack_alt_clients(openstack_clients): |
| 125 | # create alt project with regular admin user |
| 126 | tmp_os_actions = os_client.OSCliActions(openstack_clients) |
| 127 | alt_project = tmp_os_actions.create_project() |
Ievgeniia Zadorozhna | 670e7ff | 2023-03-29 00:22:22 +0300 | [diff] [blame] | 128 | tmp_os_actions.add_roles_to_user_in_project( |
| 129 | alt_project.id, username=os.environ['OS_USERNAME'], |
| 130 | domain=os.environ['OS_PROJECT_DOMAIN_NAME'] |
| 131 | ) |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 132 | # create a client using alt project with admin user in it |
| 133 | return os_client.OfficialClientManager( |
| 134 | username=os.environ['OS_USERNAME'], |
| 135 | password=os.environ['OS_PASSWORD'], |
| 136 | project_name=alt_project.name, |
| 137 | auth_url=os.environ['OS_AUTH_URL'], |
| 138 | cert=False, |
| 139 | domain=os.environ['OS_PROJECT_DOMAIN_NAME'], |
Ievgeniia Zadorozhna | 68d6495 | 2024-08-22 18:15:45 +0200 | [diff] [blame] | 140 | endpoint_type=os.environ['OS_ENDPOINT_TYPE'], |
| 141 | interface=os.environ['OS_ENDPOINT_TYPE'] |
Ievgeniia Zadorozhna | f22827b | 2022-07-20 13:30:32 +0300 | [diff] [blame] | 142 | ) |
| 143 | |
| 144 | |
| 145 | @pytest.fixture(scope='session') |
| 146 | def os_resources_alt_project(openstack_alt_clients): |
| 147 | logger.info("Setting up resources in the project {}..." |
| 148 | "".format(openstack_alt_clients.project_name)) |
| 149 | alt_os_actions = os_client.OSCliActions(openstack_alt_clients) |
| 150 | os_resource_alt_project = {} |
| 151 | config = utils.get_configuration() |
| 152 | image_name = config.get('image_name', 'Ubuntu-18.04') |
| 153 | flavor_name = config.get('flavor_name', 'spt-test') |
| 154 | flavor_ram = config.get('flavor_ram', 1536) |
| 155 | flavor_vcpus = config.get('flavor_vcpus', 1) |
| 156 | flavor_disk = config.get('flavor_disk', 3) |
| 157 | os_images_list = [image.id for image in |
| 158 | openstack_alt_clients.image.images.list( |
| 159 | filters={'name': image_name})] |
| 160 | |
| 161 | if os_images_list.__len__() == 0: |
| 162 | pytest.skip("No images with name {}. This name can be redefined " |
| 163 | "with 'image_name' env var ".format(image_name)) |
| 164 | os_resource_alt_project['image_id'] = str(os_images_list[0]) |
| 165 | |
| 166 | flavor_id = alt_os_actions.get_flavor_id_by_name(flavor_name) |
| 167 | if flavor_id is None: |
| 168 | flavor_is_created = True |
| 169 | os_resource_alt_project['flavor_id'] = alt_os_actions.create_flavor( |
| 170 | flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id |
| 171 | else: |
| 172 | flavor_is_created = False |
| 173 | logger.info("Flavor {} already exists".format(flavor_name)) |
| 174 | os_resource_alt_project['flavor_id'] = flavor_id |
| 175 | |
| 176 | os_resource_alt_project['sec_group'] = alt_os_actions.create_sec_group() |
| 177 | |
| 178 | alt_project = alt_os_actions.get_project_by_name( |
| 179 | openstack_alt_clients.project_name) |
| 180 | os_resource_alt_project['net1'] = alt_os_actions.create_network_resources( |
| 181 | project=alt_project.name, cidr='10.3.7.0/24') |
| 182 | os_resource_alt_project['ext_net'] = alt_os_actions.get_external_network() |
| 183 | |
| 184 | os_resource_alt_project['router'] = alt_os_actions.create_router( |
| 185 | os_resource_alt_project['ext_net'], alt_project.id) |
| 186 | |
| 187 | os_resource_alt_project['subnet1'] = \ |
| 188 | openstack_alt_clients.network.show_network( |
| 189 | os_resource_alt_project['net1']['id'])['network']['subnets'][0] |
| 190 | openstack_alt_clients.network.add_interface_router( |
| 191 | os_resource_alt_project['router']['id'], |
| 192 | {'subnet_id': os_resource_alt_project['subnet1']}) |
| 193 | yield os_resource_alt_project |
| 194 | |
| 195 | # cleanup created resources |
| 196 | logger.info("Deleting routers, networks, SG, flavor in {} " |
| 197 | "project...".format(alt_project.name)) |
| 198 | |
| 199 | openstack_alt_clients.network.remove_interface_router( |
| 200 | os_resource_alt_project['router']['id'], |
| 201 | {'subnet_id': os_resource_alt_project['subnet1']}) |
| 202 | openstack_alt_clients.network.remove_gateway_router( |
| 203 | os_resource_alt_project['router']['id']) |
| 204 | time.sleep(5) |
| 205 | openstack_alt_clients.network.delete_router( |
| 206 | os_resource_alt_project['router']['id']) |
| 207 | time.sleep(5) |
| 208 | openstack_alt_clients.network.delete_network( |
| 209 | os_resource_alt_project['net1']['id']) |
| 210 | |
| 211 | openstack_alt_clients.network.delete_security_group( |
| 212 | os_resource_alt_project['sec_group']['id']) |
| 213 | if flavor_is_created: |
| 214 | openstack_alt_clients.compute.flavors.delete( |
| 215 | os_resource_alt_project['flavor_id']) |
| 216 | if alt_os_actions.create_fake_ext_net: |
| 217 | openstack_alt_clients.network.delete_network( |
| 218 | os_resource_alt_project['ext_net']['id']) |
| 219 | |
| 220 | if alt_os_actions.is_project_empty(alt_project.id): |
| 221 | openstack_alt_clients.auth.projects.delete(alt_project.id) |
| 222 | logger.info("Deleted project {}".format(alt_project.name)) |
| 223 | else: |
| 224 | logger.info("Project {} is not empty, skip deleting".format( |
| 225 | alt_project.name)) |
Ievgeniia Zadorozhna | 9664b42 | 2023-03-28 21:09:46 +0300 | [diff] [blame] | 226 | |
| 227 | |
Ievgeniia Zadorozhna | a080ec0 | 2023-12-05 02:08:52 +0100 | [diff] [blame] | 228 | @pytest.fixture(scope='module') |
| 229 | def k8s_v1_client(): |
| 230 | config = utils.get_configuration() |
| 231 | logger.info("Getting the K8S config path from the global_config.yaml file.") |
| 232 | k8s_config_path = config.get('mos_kubeconfig_path') or "" |
| 233 | k8s_manager = K8SClientManager(k8s_config_path=k8s_config_path) |
| 234 | return k8s_manager.k8s_v1 |
| 235 | |
| 236 | |
Ievgeniia Zadorozhna | 9664b42 | 2023-03-28 21:09:46 +0300 | [diff] [blame] | 237 | @pytest.fixture(scope="session") |
| 238 | def html_report(): |
| 239 | yield |
| 240 | helpers.convert_csvs_to_single_html_report() |