blob: fb4fb439043160999787251a8c7c46ed588c3153 [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 Zadorozhna84023022021-12-30 13:00:41 +02009from utils import os_client
10
11
12logger = logging.getLogger(__name__)
13
14
15@pytest.fixture(scope='session')
16def openstack_clients():
17 return os_client.OfficialClientManager(
18 username=os.environ['OS_USERNAME'],
19 password=os.environ['OS_PASSWORD'],
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030020 project_name=os.environ['OS_PROJECT_NAME'],
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020021 auth_url=os.environ['OS_AUTH_URL'],
22 cert=False,
23 domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030024 )
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020025
26
27nodes = utils.get_pairs()
28
29
30@pytest.fixture(scope='session', params=list(nodes.values()),
31 ids=list(nodes.keys()))
32def pair(request):
33 return request.param
34
35
36@pytest.fixture(scope='session')
37def os_resources(openstack_clients):
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030038 logger.info("Setting up resources in admin project...")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020039 os_actions = os_client.OSCliActions(openstack_clients)
40 os_resource = {}
41 config = utils.get_configuration()
Ievgeniia Zadorozhna5ed74e22022-07-26 16:56:23 +030042 image_name = config.get('image_name', 'cvp.ubuntu.2004')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020043 flavor_name = config.get('flavor_name', 'spt-test')
44 flavor_ram = config.get('flavor_ram', 1536)
45 flavor_vcpus = config.get('flavor_vcpus', 1)
46 flavor_disk = config.get('flavor_disk', 3)
47
48 os_images_list = [image.id for image in
49 openstack_clients.image.images.list(
50 filters={'name': image_name})]
51
52 if os_images_list.__len__() == 0:
53 pytest.skip("No images with name {}. This name can be redefined "
54 "with 'image_name' env var ".format(image_name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020055 os_resource['image_id'] = str(os_images_list[0])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030056 flavor_id = os_actions.get_flavor_id_by_name(flavor_name)
57 if flavor_id is None:
58 flavor_is_created = True
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020059 os_resource['flavor_id'] = os_actions.create_flavor(
60 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020061 else:
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030062 flavor_is_created = False
63 logger.info("Flavor {} already exists".format(flavor_name))
64 os_resource['flavor_id'] = flavor_id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020065
66 os_resource['sec_group'] = os_actions.create_sec_group()
67 os_resource['keypair'] = openstack_clients.compute.keypairs.create(
68 '{}-{}'.format('spt-key', random.randrange(100, 999))
69 )
70 os_resource['net1'] = os_actions.create_network_resources()
71 os_resource['ext_net'] = os_actions.get_external_network()
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030072 adm_project = os_actions.get_project_by_name("admin")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020073 os_resource['router'] = os_actions.create_router(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030074 os_resource['ext_net'], adm_project.id)
75 os_resource['net2'] = os_actions.create_network(adm_project.id)
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020076 os_resource['subnet2'] = os_actions.create_subnet(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030077 os_resource['net2'], adm_project.id, '10.2.7.0/24')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020078 for subnet in openstack_clients.network.list_subnets()['subnets']:
79 if subnet['network_id'] == os_resource['net1']['id']:
80 os_resource['subnet1'] = subnet['id']
81
82 openstack_clients.network.add_interface_router(
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +030083 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020084 openstack_clients.network.add_interface_router(
85 os_resource['router']['id'],
86 {'subnet_id': os_resource['subnet2']['id']})
87 yield os_resource
88
89 # cleanup created resources
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030090 logger.info("Deleting routers, networks, SG, key pair, flavor in {}..."
91 "".format(adm_project.name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020092 openstack_clients.network.remove_interface_router(
93 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
94 openstack_clients.network.remove_interface_router(
95 os_resource['router']['id'],
96 {'subnet_id': os_resource['subnet2']['id']})
97 openstack_clients.network.remove_gateway_router(
98 os_resource['router']['id'])
99 time.sleep(5)
100 openstack_clients.network.delete_router(os_resource['router']['id'])
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +0300101 time.sleep(10) # extended to 10 since fails at TF sometimes
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200102 openstack_clients.network.delete_network(os_resource['net1']['id'])
103 openstack_clients.network.delete_network(os_resource['net2']['id'])
104
Ievgeniia Zadorozhna2c6469d2022-08-10 17:21:10 +0300105 openstack_clients.network.delete_security_group(
106 os_resource['sec_group']['id'])
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200107 openstack_clients.compute.keypairs.delete(os_resource['keypair'].name)
108 if flavor_is_created:
109 openstack_clients.compute.flavors.delete(os_resource['flavor_id'])
110 if os_actions.create_fake_ext_net:
111 openstack_clients.network.delete_network(os_resource['ext_net']['id'])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300112
113
114@pytest.fixture(scope='session')
115def openstack_alt_clients(openstack_clients):
116 # create alt project with regular admin user
117 tmp_os_actions = os_client.OSCliActions(openstack_clients)
118 alt_project = tmp_os_actions.create_project()
Ievgeniia Zadorozhna670e7ff2023-03-29 00:22:22 +0300119 tmp_os_actions.add_roles_to_user_in_project(
120 alt_project.id, username=os.environ['OS_USERNAME'],
121 domain=os.environ['OS_PROJECT_DOMAIN_NAME']
122 )
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300123 # create a client using alt project with admin user in it
124 return os_client.OfficialClientManager(
125 username=os.environ['OS_USERNAME'],
126 password=os.environ['OS_PASSWORD'],
127 project_name=alt_project.name,
128 auth_url=os.environ['OS_AUTH_URL'],
129 cert=False,
130 domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
131 )
132
133
134@pytest.fixture(scope='session')
135def os_resources_alt_project(openstack_alt_clients):
136 logger.info("Setting up resources in the project {}..."
137 "".format(openstack_alt_clients.project_name))
138 alt_os_actions = os_client.OSCliActions(openstack_alt_clients)
139 os_resource_alt_project = {}
140 config = utils.get_configuration()
141 image_name = config.get('image_name', 'Ubuntu-18.04')
142 flavor_name = config.get('flavor_name', 'spt-test')
143 flavor_ram = config.get('flavor_ram', 1536)
144 flavor_vcpus = config.get('flavor_vcpus', 1)
145 flavor_disk = config.get('flavor_disk', 3)
146 os_images_list = [image.id for image in
147 openstack_alt_clients.image.images.list(
148 filters={'name': image_name})]
149
150 if os_images_list.__len__() == 0:
151 pytest.skip("No images with name {}. This name can be redefined "
152 "with 'image_name' env var ".format(image_name))
153 os_resource_alt_project['image_id'] = str(os_images_list[0])
154
155 flavor_id = alt_os_actions.get_flavor_id_by_name(flavor_name)
156 if flavor_id is None:
157 flavor_is_created = True
158 os_resource_alt_project['flavor_id'] = alt_os_actions.create_flavor(
159 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
160 else:
161 flavor_is_created = False
162 logger.info("Flavor {} already exists".format(flavor_name))
163 os_resource_alt_project['flavor_id'] = flavor_id
164
165 os_resource_alt_project['sec_group'] = alt_os_actions.create_sec_group()
166
167 alt_project = alt_os_actions.get_project_by_name(
168 openstack_alt_clients.project_name)
169 os_resource_alt_project['net1'] = alt_os_actions.create_network_resources(
170 project=alt_project.name, cidr='10.3.7.0/24')
171 os_resource_alt_project['ext_net'] = alt_os_actions.get_external_network()
172
173 os_resource_alt_project['router'] = alt_os_actions.create_router(
174 os_resource_alt_project['ext_net'], alt_project.id)
175
176 os_resource_alt_project['subnet1'] = \
177 openstack_alt_clients.network.show_network(
178 os_resource_alt_project['net1']['id'])['network']['subnets'][0]
179 openstack_alt_clients.network.add_interface_router(
180 os_resource_alt_project['router']['id'],
181 {'subnet_id': os_resource_alt_project['subnet1']})
182 yield os_resource_alt_project
183
184 # cleanup created resources
185 logger.info("Deleting routers, networks, SG, flavor in {} "
186 "project...".format(alt_project.name))
187
188 openstack_alt_clients.network.remove_interface_router(
189 os_resource_alt_project['router']['id'],
190 {'subnet_id': os_resource_alt_project['subnet1']})
191 openstack_alt_clients.network.remove_gateway_router(
192 os_resource_alt_project['router']['id'])
193 time.sleep(5)
194 openstack_alt_clients.network.delete_router(
195 os_resource_alt_project['router']['id'])
196 time.sleep(5)
197 openstack_alt_clients.network.delete_network(
198 os_resource_alt_project['net1']['id'])
199
200 openstack_alt_clients.network.delete_security_group(
201 os_resource_alt_project['sec_group']['id'])
202 if flavor_is_created:
203 openstack_alt_clients.compute.flavors.delete(
204 os_resource_alt_project['flavor_id'])
205 if alt_os_actions.create_fake_ext_net:
206 openstack_alt_clients.network.delete_network(
207 os_resource_alt_project['ext_net']['id'])
208
209 if alt_os_actions.is_project_empty(alt_project.id):
210 openstack_alt_clients.auth.projects.delete(alt_project.id)
211 logger.info("Deleted project {}".format(alt_project.name))
212 else:
213 logger.info("Project {} is not empty, skip deleting".format(
214 alt_project.name))
Ievgeniia Zadorozhna9664b422023-03-28 21:09:46 +0300215
216
217@pytest.fixture(scope="session")
218def html_report():
219 yield
220 helpers.convert_csvs_to_single_html_report()