blob: ec422a30e7f5479de19546e1d884c36c8a95a6e5 [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 Zadorozhnaf22827b2022-07-20 13:30:32 +030041 )
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020042
43
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020044@pytest.fixture(scope='session')
45def os_resources(openstack_clients):
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030046 logger.info("Setting up resources in admin project...")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020047 os_actions = os_client.OSCliActions(openstack_clients)
48 os_resource = {}
49 config = utils.get_configuration()
Ievgeniia Zadorozhna5ed74e22022-07-26 16:56:23 +030050 image_name = config.get('image_name', 'cvp.ubuntu.2004')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020051 flavor_name = config.get('flavor_name', 'spt-test')
52 flavor_ram = config.get('flavor_ram', 1536)
53 flavor_vcpus = config.get('flavor_vcpus', 1)
54 flavor_disk = config.get('flavor_disk', 3)
55
56 os_images_list = [image.id for image in
57 openstack_clients.image.images.list(
58 filters={'name': image_name})]
59
60 if os_images_list.__len__() == 0:
61 pytest.skip("No images with name {}. This name can be redefined "
62 "with 'image_name' env var ".format(image_name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020063 os_resource['image_id'] = str(os_images_list[0])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030064 flavor_id = os_actions.get_flavor_id_by_name(flavor_name)
65 if flavor_id is None:
66 flavor_is_created = True
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020067 os_resource['flavor_id'] = os_actions.create_flavor(
68 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020069 else:
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030070 flavor_is_created = False
71 logger.info("Flavor {} already exists".format(flavor_name))
72 os_resource['flavor_id'] = flavor_id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020073
74 os_resource['sec_group'] = os_actions.create_sec_group()
75 os_resource['keypair'] = openstack_clients.compute.keypairs.create(
76 '{}-{}'.format('spt-key', random.randrange(100, 999))
77 )
78 os_resource['net1'] = os_actions.create_network_resources()
79 os_resource['ext_net'] = os_actions.get_external_network()
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030080 adm_project = os_actions.get_project_by_name("admin")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020081 os_resource['router'] = os_actions.create_router(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030082 os_resource['ext_net'], adm_project.id)
83 os_resource['net2'] = os_actions.create_network(adm_project.id)
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020084 os_resource['subnet2'] = os_actions.create_subnet(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030085 os_resource['net2'], adm_project.id, '10.2.7.0/24')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020086 for subnet in openstack_clients.network.list_subnets()['subnets']:
87 if subnet['network_id'] == os_resource['net1']['id']:
88 os_resource['subnet1'] = subnet['id']
89
90 openstack_clients.network.add_interface_router(
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +030091 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020092 openstack_clients.network.add_interface_router(
93 os_resource['router']['id'],
94 {'subnet_id': os_resource['subnet2']['id']})
95 yield os_resource
96
97 # cleanup created resources
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030098 logger.info("Deleting routers, networks, SG, key pair, flavor in {}..."
99 "".format(adm_project.name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200100 openstack_clients.network.remove_interface_router(
101 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
102 openstack_clients.network.remove_interface_router(
103 os_resource['router']['id'],
104 {'subnet_id': os_resource['subnet2']['id']})
105 openstack_clients.network.remove_gateway_router(
106 os_resource['router']['id'])
107 time.sleep(5)
108 openstack_clients.network.delete_router(os_resource['router']['id'])
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +0300109 time.sleep(10) # extended to 10 since fails at TF sometimes
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200110 openstack_clients.network.delete_network(os_resource['net1']['id'])
111 openstack_clients.network.delete_network(os_resource['net2']['id'])
112
Ievgeniia Zadorozhna2c6469d2022-08-10 17:21:10 +0300113 openstack_clients.network.delete_security_group(
114 os_resource['sec_group']['id'])
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200115 openstack_clients.compute.keypairs.delete(os_resource['keypair'].name)
116 if flavor_is_created:
117 openstack_clients.compute.flavors.delete(os_resource['flavor_id'])
118 if os_actions.create_fake_ext_net:
119 openstack_clients.network.delete_network(os_resource['ext_net']['id'])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300120
121
122@pytest.fixture(scope='session')
123def openstack_alt_clients(openstack_clients):
124 # create alt project with regular admin user
125 tmp_os_actions = os_client.OSCliActions(openstack_clients)
126 alt_project = tmp_os_actions.create_project()
Ievgeniia Zadorozhna670e7ff2023-03-29 00:22:22 +0300127 tmp_os_actions.add_roles_to_user_in_project(
128 alt_project.id, username=os.environ['OS_USERNAME'],
129 domain=os.environ['OS_PROJECT_DOMAIN_NAME']
130 )
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300131 # create a client using alt project with admin user in it
132 return os_client.OfficialClientManager(
133 username=os.environ['OS_USERNAME'],
134 password=os.environ['OS_PASSWORD'],
135 project_name=alt_project.name,
136 auth_url=os.environ['OS_AUTH_URL'],
137 cert=False,
138 domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
139 )
140
141
142@pytest.fixture(scope='session')
143def os_resources_alt_project(openstack_alt_clients):
144 logger.info("Setting up resources in the project {}..."
145 "".format(openstack_alt_clients.project_name))
146 alt_os_actions = os_client.OSCliActions(openstack_alt_clients)
147 os_resource_alt_project = {}
148 config = utils.get_configuration()
149 image_name = config.get('image_name', 'Ubuntu-18.04')
150 flavor_name = config.get('flavor_name', 'spt-test')
151 flavor_ram = config.get('flavor_ram', 1536)
152 flavor_vcpus = config.get('flavor_vcpus', 1)
153 flavor_disk = config.get('flavor_disk', 3)
154 os_images_list = [image.id for image in
155 openstack_alt_clients.image.images.list(
156 filters={'name': image_name})]
157
158 if os_images_list.__len__() == 0:
159 pytest.skip("No images with name {}. This name can be redefined "
160 "with 'image_name' env var ".format(image_name))
161 os_resource_alt_project['image_id'] = str(os_images_list[0])
162
163 flavor_id = alt_os_actions.get_flavor_id_by_name(flavor_name)
164 if flavor_id is None:
165 flavor_is_created = True
166 os_resource_alt_project['flavor_id'] = alt_os_actions.create_flavor(
167 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
168 else:
169 flavor_is_created = False
170 logger.info("Flavor {} already exists".format(flavor_name))
171 os_resource_alt_project['flavor_id'] = flavor_id
172
173 os_resource_alt_project['sec_group'] = alt_os_actions.create_sec_group()
174
175 alt_project = alt_os_actions.get_project_by_name(
176 openstack_alt_clients.project_name)
177 os_resource_alt_project['net1'] = alt_os_actions.create_network_resources(
178 project=alt_project.name, cidr='10.3.7.0/24')
179 os_resource_alt_project['ext_net'] = alt_os_actions.get_external_network()
180
181 os_resource_alt_project['router'] = alt_os_actions.create_router(
182 os_resource_alt_project['ext_net'], alt_project.id)
183
184 os_resource_alt_project['subnet1'] = \
185 openstack_alt_clients.network.show_network(
186 os_resource_alt_project['net1']['id'])['network']['subnets'][0]
187 openstack_alt_clients.network.add_interface_router(
188 os_resource_alt_project['router']['id'],
189 {'subnet_id': os_resource_alt_project['subnet1']})
190 yield os_resource_alt_project
191
192 # cleanup created resources
193 logger.info("Deleting routers, networks, SG, flavor in {} "
194 "project...".format(alt_project.name))
195
196 openstack_alt_clients.network.remove_interface_router(
197 os_resource_alt_project['router']['id'],
198 {'subnet_id': os_resource_alt_project['subnet1']})
199 openstack_alt_clients.network.remove_gateway_router(
200 os_resource_alt_project['router']['id'])
201 time.sleep(5)
202 openstack_alt_clients.network.delete_router(
203 os_resource_alt_project['router']['id'])
204 time.sleep(5)
205 openstack_alt_clients.network.delete_network(
206 os_resource_alt_project['net1']['id'])
207
208 openstack_alt_clients.network.delete_security_group(
209 os_resource_alt_project['sec_group']['id'])
210 if flavor_is_created:
211 openstack_alt_clients.compute.flavors.delete(
212 os_resource_alt_project['flavor_id'])
213 if alt_os_actions.create_fake_ext_net:
214 openstack_alt_clients.network.delete_network(
215 os_resource_alt_project['ext_net']['id'])
216
217 if alt_os_actions.is_project_empty(alt_project.id):
218 openstack_alt_clients.auth.projects.delete(alt_project.id)
219 logger.info("Deleted project {}".format(alt_project.name))
220 else:
221 logger.info("Project {} is not empty, skip deleting".format(
222 alt_project.name))
Ievgeniia Zadorozhna9664b422023-03-28 21:09:46 +0300223
224
Ievgeniia Zadorozhnaa080ec02023-12-05 02:08:52 +0100225@pytest.fixture(scope='module')
226def k8s_v1_client():
227 config = utils.get_configuration()
228 logger.info("Getting the K8S config path from the global_config.yaml file.")
229 k8s_config_path = config.get('mos_kubeconfig_path') or ""
230 k8s_manager = K8SClientManager(k8s_config_path=k8s_config_path)
231 return k8s_manager.k8s_v1
232
233
Ievgeniia Zadorozhna9664b422023-03-28 21:09:46 +0300234@pytest.fixture(scope="session")
235def html_report():
236 yield
237 helpers.convert_csvs_to_single_html_report()