blob: 076fa3c541688ffbd2c28cebcf4bfdd43b966912 [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 Zadorozhnaf210baa2025-03-28 00:04:45 +010081 if not os_resource['ext_net']:
82 pytest.skip("External network not found, skipping tests. Please set "
83 "the existing floating network at the 'external_network' "
84 "option in the global_config.yaml file.")
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030085 adm_project = os_actions.get_project_by_name("admin")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020086 os_resource['router'] = os_actions.create_router(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030087 os_resource['ext_net'], adm_project.id)
88 os_resource['net2'] = os_actions.create_network(adm_project.id)
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020089 os_resource['subnet2'] = os_actions.create_subnet(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030090 os_resource['net2'], adm_project.id, '10.2.7.0/24')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020091 for subnet in openstack_clients.network.list_subnets()['subnets']:
92 if subnet['network_id'] == os_resource['net1']['id']:
93 os_resource['subnet1'] = subnet['id']
94
95 openstack_clients.network.add_interface_router(
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +030096 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020097 openstack_clients.network.add_interface_router(
98 os_resource['router']['id'],
99 {'subnet_id': os_resource['subnet2']['id']})
100 yield os_resource
101
102 # cleanup created resources
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300103 logger.info("Deleting routers, networks, SG, key pair, flavor in {}..."
104 "".format(adm_project.name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200105 openstack_clients.network.remove_interface_router(
106 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
107 openstack_clients.network.remove_interface_router(
108 os_resource['router']['id'],
109 {'subnet_id': os_resource['subnet2']['id']})
110 openstack_clients.network.remove_gateway_router(
111 os_resource['router']['id'])
112 time.sleep(5)
113 openstack_clients.network.delete_router(os_resource['router']['id'])
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +0300114 time.sleep(10) # extended to 10 since fails at TF sometimes
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200115 openstack_clients.network.delete_network(os_resource['net1']['id'])
116 openstack_clients.network.delete_network(os_resource['net2']['id'])
117
Ievgeniia Zadorozhna2c6469d2022-08-10 17:21:10 +0300118 openstack_clients.network.delete_security_group(
119 os_resource['sec_group']['id'])
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200120 openstack_clients.compute.keypairs.delete(os_resource['keypair'].name)
121 if flavor_is_created:
122 openstack_clients.compute.flavors.delete(os_resource['flavor_id'])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300123
124
125@pytest.fixture(scope='session')
126def openstack_alt_clients(openstack_clients):
127 # create alt project with regular admin user
128 tmp_os_actions = os_client.OSCliActions(openstack_clients)
129 alt_project = tmp_os_actions.create_project()
Ievgeniia Zadorozhna670e7ff2023-03-29 00:22:22 +0300130 tmp_os_actions.add_roles_to_user_in_project(
131 alt_project.id, username=os.environ['OS_USERNAME'],
132 domain=os.environ['OS_PROJECT_DOMAIN_NAME']
133 )
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300134 # create a client using alt project with admin user in it
135 return os_client.OfficialClientManager(
136 username=os.environ['OS_USERNAME'],
137 password=os.environ['OS_PASSWORD'],
138 project_name=alt_project.name,
139 auth_url=os.environ['OS_AUTH_URL'],
140 cert=False,
141 domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
Ievgeniia Zadorozhna68d64952024-08-22 18:15:45 +0200142 endpoint_type=os.environ['OS_ENDPOINT_TYPE'],
143 interface=os.environ['OS_ENDPOINT_TYPE']
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300144 )
145
146
147@pytest.fixture(scope='session')
148def os_resources_alt_project(openstack_alt_clients):
149 logger.info("Setting up resources in the project {}..."
150 "".format(openstack_alt_clients.project_name))
151 alt_os_actions = os_client.OSCliActions(openstack_alt_clients)
152 os_resource_alt_project = {}
153 config = utils.get_configuration()
154 image_name = config.get('image_name', 'Ubuntu-18.04')
155 flavor_name = config.get('flavor_name', 'spt-test')
156 flavor_ram = config.get('flavor_ram', 1536)
157 flavor_vcpus = config.get('flavor_vcpus', 1)
158 flavor_disk = config.get('flavor_disk', 3)
159 os_images_list = [image.id for image in
160 openstack_alt_clients.image.images.list(
161 filters={'name': image_name})]
162
163 if os_images_list.__len__() == 0:
164 pytest.skip("No images with name {}. This name can be redefined "
165 "with 'image_name' env var ".format(image_name))
166 os_resource_alt_project['image_id'] = str(os_images_list[0])
167
168 flavor_id = alt_os_actions.get_flavor_id_by_name(flavor_name)
169 if flavor_id is None:
170 flavor_is_created = True
171 os_resource_alt_project['flavor_id'] = alt_os_actions.create_flavor(
172 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
173 else:
174 flavor_is_created = False
175 logger.info("Flavor {} already exists".format(flavor_name))
176 os_resource_alt_project['flavor_id'] = flavor_id
177
178 os_resource_alt_project['sec_group'] = alt_os_actions.create_sec_group()
179
180 alt_project = alt_os_actions.get_project_by_name(
181 openstack_alt_clients.project_name)
182 os_resource_alt_project['net1'] = alt_os_actions.create_network_resources(
183 project=alt_project.name, cidr='10.3.7.0/24')
184 os_resource_alt_project['ext_net'] = alt_os_actions.get_external_network()
Ievgeniia Zadorozhnaf210baa2025-03-28 00:04:45 +0100185 if not os_resource_alt_project['ext_net']:
186 pytest.skip("External network not found, skipping tests. Please set "
187 "the existing floating network at the 'external_network' "
188 "option in the global_config.yaml file.")
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300189
190 os_resource_alt_project['router'] = alt_os_actions.create_router(
191 os_resource_alt_project['ext_net'], alt_project.id)
192
193 os_resource_alt_project['subnet1'] = \
194 openstack_alt_clients.network.show_network(
195 os_resource_alt_project['net1']['id'])['network']['subnets'][0]
196 openstack_alt_clients.network.add_interface_router(
197 os_resource_alt_project['router']['id'],
198 {'subnet_id': os_resource_alt_project['subnet1']})
199 yield os_resource_alt_project
200
201 # cleanup created resources
202 logger.info("Deleting routers, networks, SG, flavor in {} "
203 "project...".format(alt_project.name))
204
205 openstack_alt_clients.network.remove_interface_router(
206 os_resource_alt_project['router']['id'],
207 {'subnet_id': os_resource_alt_project['subnet1']})
208 openstack_alt_clients.network.remove_gateway_router(
209 os_resource_alt_project['router']['id'])
210 time.sleep(5)
211 openstack_alt_clients.network.delete_router(
212 os_resource_alt_project['router']['id'])
213 time.sleep(5)
214 openstack_alt_clients.network.delete_network(
215 os_resource_alt_project['net1']['id'])
216
217 openstack_alt_clients.network.delete_security_group(
218 os_resource_alt_project['sec_group']['id'])
219 if flavor_is_created:
220 openstack_alt_clients.compute.flavors.delete(
221 os_resource_alt_project['flavor_id'])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300222
223 if alt_os_actions.is_project_empty(alt_project.id):
224 openstack_alt_clients.auth.projects.delete(alt_project.id)
225 logger.info("Deleted project {}".format(alt_project.name))
226 else:
227 logger.info("Project {} is not empty, skip deleting".format(
228 alt_project.name))
Ievgeniia Zadorozhna9664b422023-03-28 21:09:46 +0300229
230
Ievgeniia Zadorozhnaa080ec02023-12-05 02:08:52 +0100231@pytest.fixture(scope='module')
232def k8s_v1_client():
233 config = utils.get_configuration()
234 logger.info("Getting the K8S config path from the global_config.yaml file.")
235 k8s_config_path = config.get('mos_kubeconfig_path') or ""
236 k8s_manager = K8SClientManager(k8s_config_path=k8s_config_path)
237 return k8s_manager.k8s_v1
238
239
Ievgeniia Zadorozhna9664b422023-03-28 21:09:46 +0300240@pytest.fixture(scope="session")
241def html_report():
242 yield
243 helpers.convert_csvs_to_single_html_report()