blob: 83d0be6d860e76df78877b6b34c446b3048bd8e7 [file] [log] [blame]
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +02001import os
2import pytest
3import utils
4import random
5import time
6import logging
7
Ievgeniia Zadorozhna9664b422023-03-28 21:09:46 +03008from utils import helpers
Ievgeniia Zadorozhnaa080ec02023-12-05 02:08:52 +01009from utils.k8s_client import K8SClientManager
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020010from utils import os_client
11
12
13logger = logging.getLogger(__name__)
14
Ievgeniia Zadorozhnaa080ec02023-12-05 02:08:52 +010015nodes = utils.get_pairs()
16hw_nodes = utils.get_hw_pairs()
17
18
19@pytest.fixture(scope='session', params=list(nodes.values()),
20 ids=list(nodes.keys()))
21def pair(request):
22 return request.param
23
24
25@pytest.fixture(scope='session', params=list(hw_nodes.values()),
26 ids=list(hw_nodes.keys()))
27def hw_pair(request):
28 return request.param
29
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020030
31@pytest.fixture(scope='session')
32def openstack_clients():
33 return os_client.OfficialClientManager(
34 username=os.environ['OS_USERNAME'],
35 password=os.environ['OS_PASSWORD'],
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030036 project_name=os.environ['OS_PROJECT_NAME'],
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020037 auth_url=os.environ['OS_AUTH_URL'],
Ievgeniia Zadorozhna21517712024-07-30 14:14:08 +020038 endpoint_type=os.environ["OS_ENDPOINT_TYPE"],
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020039 cert=False,
40 domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
Ievgeniia Zadorozhna68d64952024-08-22 18:15:45 +020041 interface=os.environ["OS_ENDPOINT_TYPE"],
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030042 )
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020043
44
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020045@pytest.fixture(scope='session')
46def os_resources(openstack_clients):
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030047 logger.info("Setting up resources in admin project...")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020048 os_actions = os_client.OSCliActions(openstack_clients)
49 os_resource = {}
50 config = utils.get_configuration()
Ievgeniia Zadorozhna5ed74e22022-07-26 16:56:23 +030051 image_name = config.get('image_name', 'cvp.ubuntu.2004')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020052 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 Zadorozhna84023022021-12-30 13:00:41 +020064 os_resource['image_id'] = str(os_images_list[0])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030065 flavor_id = os_actions.get_flavor_id_by_name(flavor_name)
66 if flavor_id is None:
67 flavor_is_created = True
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020068 os_resource['flavor_id'] = os_actions.create_flavor(
69 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020070 else:
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030071 flavor_is_created = False
72 logger.info("Flavor {} already exists".format(flavor_name))
73 os_resource['flavor_id'] = flavor_id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020074
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 Zadorozhnaf22827b2022-07-20 13:30:32 +030081 adm_project = os_actions.get_project_by_name("admin")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020082 os_resource['router'] = os_actions.create_router(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030083 os_resource['ext_net'], adm_project.id)
84 os_resource['net2'] = os_actions.create_network(adm_project.id)
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020085 os_resource['subnet2'] = os_actions.create_subnet(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030086 os_resource['net2'], adm_project.id, '10.2.7.0/24')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020087 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 Zadorozhnac67b86b2023-02-02 18:09:12 +030092 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020093 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 Zadorozhnaf22827b2022-07-20 13:30:32 +030099 logger.info("Deleting routers, networks, SG, key pair, flavor in {}..."
100 "".format(adm_project.name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200101 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 Zadorozhnac67b86b2023-02-02 18:09:12 +0300110 time.sleep(10) # extended to 10 since fails at TF sometimes
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200111 openstack_clients.network.delete_network(os_resource['net1']['id'])
112 openstack_clients.network.delete_network(os_resource['net2']['id'])
113
Ievgeniia Zadorozhna2c6469d2022-08-10 17:21:10 +0300114 openstack_clients.network.delete_security_group(
115 os_resource['sec_group']['id'])
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200116 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 Zadorozhnaf22827b2022-07-20 13:30:32 +0300121
122
123@pytest.fixture(scope='session')
124def 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 Zadorozhna670e7ff2023-03-29 00:22:22 +0300128 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 Zadorozhnaf22827b2022-07-20 13:30:32 +0300132 # 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 Zadorozhna68d64952024-08-22 18:15:45 +0200140 endpoint_type=os.environ['OS_ENDPOINT_TYPE'],
141 interface=os.environ['OS_ENDPOINT_TYPE']
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300142 )
143
144
145@pytest.fixture(scope='session')
146def 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 Zadorozhna9664b422023-03-28 21:09:46 +0300226
227
Ievgeniia Zadorozhnaa080ec02023-12-05 02:08:52 +0100228@pytest.fixture(scope='module')
229def 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 Zadorozhna9664b422023-03-28 21:09:46 +0300237@pytest.fixture(scope="session")
238def html_report():
239 yield
240 helpers.convert_csvs_to_single_html_report()