blob: ed00d80eee90a5413668f888ab5e9508a9ba421a [file] [log] [blame]
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +02001import os
2import pytest
3import utils
4import random
5import time
6import logging
7
8from utils import os_client
9
10
11logger = logging.getLogger(__name__)
12
13
14@pytest.fixture(scope='session')
15def openstack_clients():
16 return os_client.OfficialClientManager(
17 username=os.environ['OS_USERNAME'],
18 password=os.environ['OS_PASSWORD'],
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030019 project_name=os.environ['OS_PROJECT_NAME'],
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020020 auth_url=os.environ['OS_AUTH_URL'],
21 cert=False,
22 domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030023 )
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020024
25
26nodes = utils.get_pairs()
27
28
29@pytest.fixture(scope='session', params=list(nodes.values()),
30 ids=list(nodes.keys()))
31def pair(request):
32 return request.param
33
34
35@pytest.fixture(scope='session')
36def os_resources(openstack_clients):
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030037 logger.info("Setting up resources in admin project...")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020038 os_actions = os_client.OSCliActions(openstack_clients)
39 os_resource = {}
40 config = utils.get_configuration()
Ievgeniia Zadorozhna5ed74e22022-07-26 16:56:23 +030041 image_name = config.get('image_name', 'cvp.ubuntu.2004')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020042 flavor_name = config.get('flavor_name', 'spt-test')
43 flavor_ram = config.get('flavor_ram', 1536)
44 flavor_vcpus = config.get('flavor_vcpus', 1)
45 flavor_disk = config.get('flavor_disk', 3)
46
47 os_images_list = [image.id for image in
48 openstack_clients.image.images.list(
49 filters={'name': image_name})]
50
51 if os_images_list.__len__() == 0:
52 pytest.skip("No images with name {}. This name can be redefined "
53 "with 'image_name' env var ".format(image_name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020054 os_resource['image_id'] = str(os_images_list[0])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030055 flavor_id = os_actions.get_flavor_id_by_name(flavor_name)
56 if flavor_id is None:
57 flavor_is_created = True
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020058 os_resource['flavor_id'] = os_actions.create_flavor(
59 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020060 else:
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030061 flavor_is_created = False
62 logger.info("Flavor {} already exists".format(flavor_name))
63 os_resource['flavor_id'] = flavor_id
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020064
65 os_resource['sec_group'] = os_actions.create_sec_group()
66 os_resource['keypair'] = openstack_clients.compute.keypairs.create(
67 '{}-{}'.format('spt-key', random.randrange(100, 999))
68 )
69 os_resource['net1'] = os_actions.create_network_resources()
70 os_resource['ext_net'] = os_actions.get_external_network()
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030071 adm_project = os_actions.get_project_by_name("admin")
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020072 os_resource['router'] = os_actions.create_router(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030073 os_resource['ext_net'], adm_project.id)
74 os_resource['net2'] = os_actions.create_network(adm_project.id)
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020075 os_resource['subnet2'] = os_actions.create_subnet(
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030076 os_resource['net2'], adm_project.id, '10.2.7.0/24')
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020077 for subnet in openstack_clients.network.list_subnets()['subnets']:
78 if subnet['network_id'] == os_resource['net1']['id']:
79 os_resource['subnet1'] = subnet['id']
80
81 openstack_clients.network.add_interface_router(
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +030082 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020083 openstack_clients.network.add_interface_router(
84 os_resource['router']['id'],
85 {'subnet_id': os_resource['subnet2']['id']})
86 yield os_resource
87
88 # cleanup created resources
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +030089 logger.info("Deleting routers, networks, SG, key pair, flavor in {}..."
90 "".format(adm_project.name))
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +020091 openstack_clients.network.remove_interface_router(
92 os_resource['router']['id'], {'subnet_id': os_resource['subnet1']})
93 openstack_clients.network.remove_interface_router(
94 os_resource['router']['id'],
95 {'subnet_id': os_resource['subnet2']['id']})
96 openstack_clients.network.remove_gateway_router(
97 os_resource['router']['id'])
98 time.sleep(5)
99 openstack_clients.network.delete_router(os_resource['router']['id'])
Ievgeniia Zadorozhnac67b86b2023-02-02 18:09:12 +0300100 time.sleep(10) # extended to 10 since fails at TF sometimes
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200101 openstack_clients.network.delete_network(os_resource['net1']['id'])
102 openstack_clients.network.delete_network(os_resource['net2']['id'])
103
Ievgeniia Zadorozhna2c6469d2022-08-10 17:21:10 +0300104 openstack_clients.network.delete_security_group(
105 os_resource['sec_group']['id'])
Ievgeniia Zadorozhna84023022021-12-30 13:00:41 +0200106 openstack_clients.compute.keypairs.delete(os_resource['keypair'].name)
107 if flavor_is_created:
108 openstack_clients.compute.flavors.delete(os_resource['flavor_id'])
109 if os_actions.create_fake_ext_net:
110 openstack_clients.network.delete_network(os_resource['ext_net']['id'])
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300111
112
113@pytest.fixture(scope='session')
114def openstack_alt_clients(openstack_clients):
115 # create alt project with regular admin user
116 tmp_os_actions = os_client.OSCliActions(openstack_clients)
117 alt_project = tmp_os_actions.create_project()
Ievgeniia Zadorozhna670e7ff2023-03-29 00:22:22 +0300118 tmp_os_actions.add_roles_to_user_in_project(
119 alt_project.id, username=os.environ['OS_USERNAME'],
120 domain=os.environ['OS_PROJECT_DOMAIN_NAME']
121 )
Ievgeniia Zadorozhnaf22827b2022-07-20 13:30:32 +0300122 # create a client using alt project with admin user in it
123 return os_client.OfficialClientManager(
124 username=os.environ['OS_USERNAME'],
125 password=os.environ['OS_PASSWORD'],
126 project_name=alt_project.name,
127 auth_url=os.environ['OS_AUTH_URL'],
128 cert=False,
129 domain=os.environ['OS_PROJECT_DOMAIN_NAME'],
130 )
131
132
133@pytest.fixture(scope='session')
134def os_resources_alt_project(openstack_alt_clients):
135 logger.info("Setting up resources in the project {}..."
136 "".format(openstack_alt_clients.project_name))
137 alt_os_actions = os_client.OSCliActions(openstack_alt_clients)
138 os_resource_alt_project = {}
139 config = utils.get_configuration()
140 image_name = config.get('image_name', 'Ubuntu-18.04')
141 flavor_name = config.get('flavor_name', 'spt-test')
142 flavor_ram = config.get('flavor_ram', 1536)
143 flavor_vcpus = config.get('flavor_vcpus', 1)
144 flavor_disk = config.get('flavor_disk', 3)
145 os_images_list = [image.id for image in
146 openstack_alt_clients.image.images.list(
147 filters={'name': image_name})]
148
149 if os_images_list.__len__() == 0:
150 pytest.skip("No images with name {}. This name can be redefined "
151 "with 'image_name' env var ".format(image_name))
152 os_resource_alt_project['image_id'] = str(os_images_list[0])
153
154 flavor_id = alt_os_actions.get_flavor_id_by_name(flavor_name)
155 if flavor_id is None:
156 flavor_is_created = True
157 os_resource_alt_project['flavor_id'] = alt_os_actions.create_flavor(
158 flavor_name, flavor_ram, flavor_vcpus, flavor_disk).id
159 else:
160 flavor_is_created = False
161 logger.info("Flavor {} already exists".format(flavor_name))
162 os_resource_alt_project['flavor_id'] = flavor_id
163
164 os_resource_alt_project['sec_group'] = alt_os_actions.create_sec_group()
165
166 alt_project = alt_os_actions.get_project_by_name(
167 openstack_alt_clients.project_name)
168 os_resource_alt_project['net1'] = alt_os_actions.create_network_resources(
169 project=alt_project.name, cidr='10.3.7.0/24')
170 os_resource_alt_project['ext_net'] = alt_os_actions.get_external_network()
171
172 os_resource_alt_project['router'] = alt_os_actions.create_router(
173 os_resource_alt_project['ext_net'], alt_project.id)
174
175 os_resource_alt_project['subnet1'] = \
176 openstack_alt_clients.network.show_network(
177 os_resource_alt_project['net1']['id'])['network']['subnets'][0]
178 openstack_alt_clients.network.add_interface_router(
179 os_resource_alt_project['router']['id'],
180 {'subnet_id': os_resource_alt_project['subnet1']})
181 yield os_resource_alt_project
182
183 # cleanup created resources
184 logger.info("Deleting routers, networks, SG, flavor in {} "
185 "project...".format(alt_project.name))
186
187 openstack_alt_clients.network.remove_interface_router(
188 os_resource_alt_project['router']['id'],
189 {'subnet_id': os_resource_alt_project['subnet1']})
190 openstack_alt_clients.network.remove_gateway_router(
191 os_resource_alt_project['router']['id'])
192 time.sleep(5)
193 openstack_alt_clients.network.delete_router(
194 os_resource_alt_project['router']['id'])
195 time.sleep(5)
196 openstack_alt_clients.network.delete_network(
197 os_resource_alt_project['net1']['id'])
198
199 openstack_alt_clients.network.delete_security_group(
200 os_resource_alt_project['sec_group']['id'])
201 if flavor_is_created:
202 openstack_alt_clients.compute.flavors.delete(
203 os_resource_alt_project['flavor_id'])
204 if alt_os_actions.create_fake_ext_net:
205 openstack_alt_clients.network.delete_network(
206 os_resource_alt_project['ext_net']['id'])
207
208 if alt_os_actions.is_project_empty(alt_project.id):
209 openstack_alt_clients.auth.projects.delete(alt_project.id)
210 logger.info("Deleted project {}".format(alt_project.name))
211 else:
212 logger.info("Project {} is not empty, skip deleting".format(
213 alt_project.name))