blob: a0676b65af0a1479d488ed881397996d3d3a22ea [file] [log] [blame]
David Patersond6babc52014-10-14 00:11:56 -04001#!/usr/bin/env python
2
David Patersone41ebca2015-04-09 05:40:12 -04003# Copyright 2015 Dell Inc.
David Patersonce781492014-09-18 01:07:01 -04004#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
David Patersone41ebca2015-04-09 05:40:12 -04009# http://www.apache.org/licenses/LICENSE-2.0
David Patersonce781492014-09-18 01:07:01 -040010#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
David Patersonce781492014-09-18 01:07:01 -040016
Doug Hellmann583ce2c2015-03-11 14:55:46 +000017from oslo_log import log as logging
18
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010019from tempest.common import credentials_factory as credentials
Ken'ichi Ohmichi6ea3f982015-11-09 12:41:13 +000020from tempest.common import identity
David Patersonce781492014-09-18 01:07:01 -040021from tempest import config
David Patersonce781492014-09-18 01:07:01 -040022from tempest import test
23
24LOG = logging.getLogger(__name__)
25CONF = config.CONF
26
David Patersonce781492014-09-18 01:07:01 -040027CONF_FLAVORS = None
28CONF_IMAGES = None
David Patersond6babc52014-10-14 00:11:56 -040029CONF_NETWORKS = []
30CONF_PRIV_NETWORK_NAME = None
31CONF_PUB_NETWORK = None
32CONF_PUB_ROUTER = None
33CONF_TENANTS = None
34CONF_USERS = None
David Patersonce781492014-09-18 01:07:01 -040035
36IS_CEILOMETER = None
37IS_CINDER = None
38IS_GLANCE = None
39IS_HEAT = None
40IS_NEUTRON = None
41IS_NOVA = None
42
43
44def init_conf():
David Patersonce781492014-09-18 01:07:01 -040045 global CONF_FLAVORS
46 global CONF_IMAGES
David Patersond6babc52014-10-14 00:11:56 -040047 global CONF_NETWORKS
48 global CONF_PRIV_NETWORK
49 global CONF_PRIV_NETWORK_NAME
50 global CONF_PUB_NETWORK
51 global CONF_PUB_ROUTER
52 global CONF_TENANTS
53 global CONF_USERS
David Patersonce781492014-09-18 01:07:01 -040054 global IS_CEILOMETER
55 global IS_CINDER
56 global IS_GLANCE
57 global IS_HEAT
58 global IS_NEUTRON
59 global IS_NOVA
60
David Patersonce781492014-09-18 01:07:01 -040061 IS_CEILOMETER = CONF.service_available.ceilometer
62 IS_CINDER = CONF.service_available.cinder
63 IS_GLANCE = CONF.service_available.glance
64 IS_HEAT = CONF.service_available.heat
65 IS_NEUTRON = CONF.service_available.neutron
66 IS_NOVA = CONF.service_available.nova
67
David Patersond6babc52014-10-14 00:11:56 -040068 CONF_FLAVORS = [CONF.compute.flavor_ref, CONF.compute.flavor_ref_alt]
69 CONF_IMAGES = [CONF.compute.image_ref, CONF.compute.image_ref_alt]
70 CONF_PRIV_NETWORK_NAME = CONF.compute.fixed_network_name
71 CONF_PUB_NETWORK = CONF.network.public_network_id
72 CONF_PUB_ROUTER = CONF.network.public_router_id
David Paterson07661de2015-10-29 20:15:04 -070073 CONF_TENANTS = [CONF.auth.admin_tenant_name,
David Patersond6babc52014-10-14 00:11:56 -040074 CONF.identity.tenant_name,
75 CONF.identity.alt_tenant_name]
David Paterson07661de2015-10-29 20:15:04 -070076 CONF_USERS = [CONF.auth.admin_username, CONF.identity.username,
David Patersond6babc52014-10-14 00:11:56 -040077 CONF.identity.alt_username]
78
79 if IS_NEUTRON:
David Paterson82234022015-04-12 14:07:40 -040080 CONF_PRIV_NETWORK = _get_network_id(CONF.compute.fixed_network_name,
Ghanshyam41711d32016-02-17 17:11:22 +090081 CONF.auth.admin_tenant_name)
David Patersond6babc52014-10-14 00:11:56 -040082 CONF_NETWORKS = [CONF_PUB_NETWORK, CONF_PRIV_NETWORK]
83
84
David Paterson82234022015-04-12 14:07:40 -040085def _get_network_id(net_name, tenant_name):
Andrea Frittoli (andreaf)290b3e12015-10-08 10:25:02 +010086 am = credentials.AdminManager()
John Warren94d8faf2015-09-15 12:22:24 -040087 net_cl = am.networks_client
Daniel Melladob04da902015-11-20 17:43:12 +010088 tn_cl = am.tenants_client
David Patersond6babc52014-10-14 00:11:56 -040089
David Kranz34e88122014-12-11 15:24:05 -050090 networks = net_cl.list_networks()
Daniel Melladob04da902015-11-20 17:43:12 +010091 tenant = identity.get_tenant_by_name(tn_cl, tenant_name)
David Patersond6babc52014-10-14 00:11:56 -040092 t_id = tenant['id']
93 n_id = None
94 for net in networks['networks']:
David Paterson82234022015-04-12 14:07:40 -040095 if (net['tenant_id'] == t_id and net['name'] == net_name):
David Patersond6babc52014-10-14 00:11:56 -040096 n_id = net['id']
97 break
98 return n_id
99
David Patersonce781492014-09-18 01:07:01 -0400100
101class BaseService(object):
102 def __init__(self, kwargs):
103 self.client = None
104 for key, value in kwargs.items():
105 setattr(self, key, value)
106
David Paterson82234022015-04-12 14:07:40 -0400107 self.tenant_filter = {}
108 if hasattr(self, 'tenant_id'):
109 self.tenant_filter['tenant_id'] = self.tenant_id
110
David Patersonce781492014-09-18 01:07:01 -0400111 def _filter_by_tenant_id(self, item_list):
112 if (item_list is None
113 or len(item_list) == 0
114 or not hasattr(self, 'tenant_id')
115 or self.tenant_id is None
116 or 'tenant_id' not in item_list[0]):
117 return item_list
118
David Patersond6babc52014-10-14 00:11:56 -0400119 return [item for item in item_list
120 if item['tenant_id'] == self.tenant_id]
David Patersonce781492014-09-18 01:07:01 -0400121
122 def list(self):
123 pass
124
125 def delete(self):
126 pass
127
128 def dry_run(self):
129 pass
130
131 def save_state(self):
132 pass
133
134 def run(self):
135 if self.is_dry_run:
136 self.dry_run()
137 elif self.is_save_state:
138 self.save_state()
139 else:
140 self.delete()
141
142
143class SnapshotService(BaseService):
144
145 def __init__(self, manager, **kwargs):
146 super(SnapshotService, self).__init__(kwargs)
147 self.client = manager.snapshots_client
148
149 def list(self):
150 client = self.client
David Paterson07661de2015-10-29 20:15:04 -0700151 snaps = client.list_snapshots()['snapshots']
David Patersonce781492014-09-18 01:07:01 -0400152 LOG.debug("List count, %s Snapshots" % len(snaps))
153 return snaps
154
155 def delete(self):
156 snaps = self.list()
157 client = self.client
158 for snap in snaps:
159 try:
160 client.delete_snapshot(snap['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400161 except Exception:
162 LOG.exception("Delete Snapshot exception.")
David Patersonce781492014-09-18 01:07:01 -0400163
164 def dry_run(self):
165 snaps = self.list()
166 self.data['snapshots'] = snaps
167
168
169class ServerService(BaseService):
170 def __init__(self, manager, **kwargs):
171 super(ServerService, self).__init__(kwargs)
172 self.client = manager.servers_client
David Paterson07661de2015-10-29 20:15:04 -0700173 self.server_groups_client = manager.server_groups_client
David Patersonce781492014-09-18 01:07:01 -0400174
175 def list(self):
176 client = self.client
David Kranzae99b9a2015-02-16 13:37:01 -0500177 servers_body = client.list_servers()
David Patersonce781492014-09-18 01:07:01 -0400178 servers = servers_body['servers']
179 LOG.debug("List count, %s Servers" % len(servers))
180 return servers
181
182 def delete(self):
183 client = self.client
184 servers = self.list()
185 for server in servers:
186 try:
187 client.delete_server(server['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400188 except Exception:
189 LOG.exception("Delete Server exception.")
David Patersonce781492014-09-18 01:07:01 -0400190
191 def dry_run(self):
192 servers = self.list()
193 self.data['servers'] = servers
194
195
196class ServerGroupService(ServerService):
197
198 def list(self):
David Paterson07661de2015-10-29 20:15:04 -0700199 client = self.server_groups_client
ghanshyam2dc13452015-08-24 17:39:25 +0900200 sgs = client.list_server_groups()['server_groups']
David Patersonce781492014-09-18 01:07:01 -0400201 LOG.debug("List count, %s Server Groups" % len(sgs))
202 return sgs
203
204 def delete(self):
205 client = self.client
206 sgs = self.list()
207 for sg in sgs:
208 try:
209 client.delete_server_group(sg['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400210 except Exception:
211 LOG.exception("Delete Server Group exception.")
David Patersonce781492014-09-18 01:07:01 -0400212
213 def dry_run(self):
214 sgs = self.list()
215 self.data['server_groups'] = sgs
216
217
218class StackService(BaseService):
219 def __init__(self, manager, **kwargs):
220 super(StackService, self).__init__(kwargs)
221 self.client = manager.orchestration_client
222
223 def list(self):
224 client = self.client
Anusha Ramineniab6c3a32015-08-18 08:33:09 +0530225 stacks = client.list_stacks()['stacks']
David Patersonce781492014-09-18 01:07:01 -0400226 LOG.debug("List count, %s Stacks" % len(stacks))
227 return stacks
228
229 def delete(self):
230 client = self.client
231 stacks = self.list()
232 for stack in stacks:
233 try:
234 client.delete_stack(stack['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400235 except Exception:
236 LOG.exception("Delete Stack exception.")
David Patersonce781492014-09-18 01:07:01 -0400237
238 def dry_run(self):
239 stacks = self.list()
240 self.data['stacks'] = stacks
241
242
243class KeyPairService(BaseService):
244 def __init__(self, manager, **kwargs):
245 super(KeyPairService, self).__init__(kwargs)
246 self.client = manager.keypairs_client
247
248 def list(self):
249 client = self.client
ghanshyamdee01f22015-08-17 11:41:47 +0900250 keypairs = client.list_keypairs()['keypairs']
David Patersonce781492014-09-18 01:07:01 -0400251 LOG.debug("List count, %s Keypairs" % len(keypairs))
252 return keypairs
253
254 def delete(self):
255 client = self.client
256 keypairs = self.list()
257 for k in keypairs:
258 try:
259 name = k['keypair']['name']
260 client.delete_keypair(name)
David Patersone41ebca2015-04-09 05:40:12 -0400261 except Exception:
262 LOG.exception("Delete Keypairs exception.")
David Patersonce781492014-09-18 01:07:01 -0400263
264 def dry_run(self):
265 keypairs = self.list()
266 self.data['keypairs'] = keypairs
267
268
269class SecurityGroupService(BaseService):
270 def __init__(self, manager, **kwargs):
271 super(SecurityGroupService, self).__init__(kwargs)
John Warrenf2345512015-12-10 13:39:30 -0500272 self.client = manager.compute_security_groups_client
David Patersonce781492014-09-18 01:07:01 -0400273
274 def list(self):
275 client = self.client
ghanshyamb610b772015-08-24 17:29:38 +0900276 secgrps = client.list_security_groups()['security_groups']
David Patersonce781492014-09-18 01:07:01 -0400277 secgrp_del = [grp for grp in secgrps if grp['name'] != 'default']
278 LOG.debug("List count, %s Security Groups" % len(secgrp_del))
279 return secgrp_del
280
281 def delete(self):
282 client = self.client
283 secgrp_del = self.list()
284 for g in secgrp_del:
285 try:
286 client.delete_security_group(g['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400287 except Exception:
288 LOG.exception("Delete Security Groups exception.")
David Patersonce781492014-09-18 01:07:01 -0400289
290 def dry_run(self):
291 secgrp_del = self.list()
292 self.data['security_groups'] = secgrp_del
293
294
295class FloatingIpService(BaseService):
296 def __init__(self, manager, **kwargs):
297 super(FloatingIpService, self).__init__(kwargs)
John Warrene74890a2015-11-11 15:18:01 -0500298 self.client = manager.compute_floating_ips_client
David Patersonce781492014-09-18 01:07:01 -0400299
300 def list(self):
301 client = self.client
ghanshyam9a3a9a22015-08-18 17:03:55 +0900302 floating_ips = client.list_floating_ips()['floating_ips']
David Patersonce781492014-09-18 01:07:01 -0400303 LOG.debug("List count, %s Floating IPs" % len(floating_ips))
304 return floating_ips
305
306 def delete(self):
307 client = self.client
308 floating_ips = self.list()
309 for f in floating_ips:
310 try:
311 client.delete_floating_ip(f['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400312 except Exception:
313 LOG.exception("Delete Floating IPs exception.")
David Patersonce781492014-09-18 01:07:01 -0400314
315 def dry_run(self):
316 floating_ips = self.list()
317 self.data['floating_ips'] = floating_ips
318
319
320class VolumeService(BaseService):
321 def __init__(self, manager, **kwargs):
322 super(VolumeService, self).__init__(kwargs)
323 self.client = manager.volumes_client
324
325 def list(self):
326 client = self.client
John Warren6177c9e2015-08-19 20:00:17 +0000327 vols = client.list_volumes()['volumes']
David Patersonce781492014-09-18 01:07:01 -0400328 LOG.debug("List count, %s Volumes" % len(vols))
329 return vols
330
331 def delete(self):
332 client = self.client
333 vols = self.list()
334 for v in vols:
335 try:
336 client.delete_volume(v['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400337 except Exception:
338 LOG.exception("Delete Volume exception.")
David Patersonce781492014-09-18 01:07:01 -0400339
340 def dry_run(self):
341 vols = self.list()
342 self.data['volumes'] = vols
343
344
David Paterson35c8df02015-04-05 04:35:31 -0400345class VolumeQuotaService(BaseService):
346 def __init__(self, manager, **kwargs):
347 super(VolumeQuotaService, self).__init__(kwargs)
348 self.client = manager.volume_quotas_client
349
350 def delete(self):
351 client = self.client
352 try:
353 client.delete_quota_set(self.tenant_id)
David Patersone41ebca2015-04-09 05:40:12 -0400354 except Exception:
355 LOG.exception("Delete Volume Quotas exception.")
David Paterson35c8df02015-04-05 04:35:31 -0400356
357 def dry_run(self):
ghanshyam08a73f92015-08-31 17:32:49 +0900358 quotas = self.client.show_quota_usage(self.tenant_id)['quota_set']
David Paterson35c8df02015-04-05 04:35:31 -0400359 self.data['volume_quotas'] = quotas
360
361
362class NovaQuotaService(BaseService):
363 def __init__(self, manager, **kwargs):
364 super(NovaQuotaService, self).__init__(kwargs)
365 self.client = manager.quotas_client
366 self.limits_client = manager.limits_client
367
368 def delete(self):
369 client = self.client
370 try:
371 client.delete_quota_set(self.tenant_id)
David Patersone41ebca2015-04-09 05:40:12 -0400372 except Exception:
373 LOG.exception("Delete Quotas exception.")
David Paterson35c8df02015-04-05 04:35:31 -0400374
375 def dry_run(self):
376 client = self.limits_client
ghanshyam8a599492015-08-24 15:55:59 +0900377 quotas = client.show_limits()['limits']
Ken'ichi Ohmichib93e6762015-06-15 07:11:29 +0000378 self.data['compute_quotas'] = quotas['absolute']
David Paterson35c8df02015-04-05 04:35:31 -0400379
380
David Patersonce781492014-09-18 01:07:01 -0400381# Begin network service classes
382class NetworkService(BaseService):
383 def __init__(self, manager, **kwargs):
384 super(NetworkService, self).__init__(kwargs)
385 self.client = manager.network_client
John Warren94d8faf2015-09-15 12:22:24 -0400386 self.networks_client = manager.networks_client
John Warren3961acd2015-10-02 14:38:53 -0400387 self.subnets_client = manager.subnets_client
John Warren49c0fe52015-10-22 12:35:54 -0400388 self.ports_client = manager.ports_client
John Warrenfbf2a892015-11-17 12:36:14 -0500389 self.floating_ips_client = manager.floating_ips_client
John Warren6d0083a2015-11-30 18:12:30 -0500390 self.metering_labels_client = manager.metering_labels_client
John Warrendd20b3e2015-12-03 13:11:28 -0500391 self.metering_label_rules_client = manager.metering_label_rules_client
John Warrenf9606e92015-12-10 12:12:42 -0500392 self.security_groups_client = manager.security_groups_client
ghanshyama25c4192016-03-11 18:38:12 +0900393 self.routers_client = manager.routers_client
David Patersonce781492014-09-18 01:07:01 -0400394
David Patersond6babc52014-10-14 00:11:56 -0400395 def _filter_by_conf_networks(self, item_list):
396 if not item_list or not all(('network_id' in i for i in item_list)):
397 return item_list
398
399 return [item for item in item_list if item['network_id']
400 not in CONF_NETWORKS]
401
David Patersonce781492014-09-18 01:07:01 -0400402 def list(self):
John Warren94d8faf2015-09-15 12:22:24 -0400403 client = self.networks_client
David Paterson82234022015-04-12 14:07:40 -0400404 networks = client.list_networks(**self.tenant_filter)
405 networks = networks['networks']
David Patersonce781492014-09-18 01:07:01 -0400406 # filter out networks declared in tempest.conf
407 if self.is_preserve:
408 networks = [network for network in networks
David Patersond6babc52014-10-14 00:11:56 -0400409 if network['id'] not in CONF_NETWORKS]
David Patersonce781492014-09-18 01:07:01 -0400410 LOG.debug("List count, %s Networks" % networks)
411 return networks
412
413 def delete(self):
John Warren94d8faf2015-09-15 12:22:24 -0400414 client = self.networks_client
David Patersonce781492014-09-18 01:07:01 -0400415 networks = self.list()
416 for n in networks:
417 try:
418 client.delete_network(n['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400419 except Exception:
420 LOG.exception("Delete Network exception.")
David Patersonce781492014-09-18 01:07:01 -0400421
422 def dry_run(self):
423 networks = self.list()
424 self.data['networks'] = networks
425
426
David Patersonce781492014-09-18 01:07:01 -0400427class NetworkFloatingIpService(NetworkService):
428
429 def list(self):
John Warrenfbf2a892015-11-17 12:36:14 -0500430 client = self.floating_ips_client
David Paterson82234022015-04-12 14:07:40 -0400431 flips = client.list_floatingips(**self.tenant_filter)
David Patersonce781492014-09-18 01:07:01 -0400432 flips = flips['floatingips']
David Patersonce781492014-09-18 01:07:01 -0400433 LOG.debug("List count, %s Network Floating IPs" % len(flips))
434 return flips
435
436 def delete(self):
437 client = self.client
438 flips = self.list()
439 for flip in flips:
440 try:
441 client.delete_floatingip(flip['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400442 except Exception:
443 LOG.exception("Delete Network Floating IP exception.")
David Patersonce781492014-09-18 01:07:01 -0400444
445 def dry_run(self):
446 flips = self.list()
447 self.data['floating_ips'] = flips
448
449
450class NetworkRouterService(NetworkService):
451
452 def list(self):
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000453 client = self.routers_client
David Paterson82234022015-04-12 14:07:40 -0400454 routers = client.list_routers(**self.tenant_filter)
David Patersonce781492014-09-18 01:07:01 -0400455 routers = routers['routers']
David Patersonce781492014-09-18 01:07:01 -0400456 if self.is_preserve:
457 routers = [router for router in routers
458 if router['id'] != CONF_PUB_ROUTER]
459
460 LOG.debug("List count, %s Routers" % len(routers))
461 return routers
462
463 def delete(self):
Ken'ichi Ohmichie35f4722015-12-22 04:57:11 +0000464 client = self.routers_client
David Patersonce781492014-09-18 01:07:01 -0400465 routers = self.list()
466 for router in routers:
467 try:
468 rid = router['id']
David Paterson82234022015-04-12 14:07:40 -0400469 ports = [port for port
470 in client.list_router_interfaces(rid)['ports']
471 if port["device_owner"] == "network:router_interface"]
David Patersonce781492014-09-18 01:07:01 -0400472 for port in ports:
piyush11078694aca952015-12-17 12:54:44 +0530473 client.remove_router_interface(rid, port_id=port['id'])
David Patersond6babc52014-10-14 00:11:56 -0400474 client.delete_router(rid)
David Patersone41ebca2015-04-09 05:40:12 -0400475 except Exception:
476 LOG.exception("Delete Router exception.")
David Patersonce781492014-09-18 01:07:01 -0400477
478 def dry_run(self):
479 routers = self.list()
480 self.data['routers'] = routers
481
482
483class NetworkHealthMonitorService(NetworkService):
484
485 def list(self):
486 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500487 hms = client.list_health_monitors()
David Patersonce781492014-09-18 01:07:01 -0400488 hms = hms['health_monitors']
489 hms = self._filter_by_tenant_id(hms)
490 LOG.debug("List count, %s Health Monitors" % len(hms))
491 return hms
492
493 def delete(self):
494 client = self.client
495 hms = self.list()
496 for hm in hms:
497 try:
498 client.delete_health_monitor(hm['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400499 except Exception:
500 LOG.exception("Delete Health Monitor exception.")
David Patersonce781492014-09-18 01:07:01 -0400501
502 def dry_run(self):
503 hms = self.list()
504 self.data['health_monitors'] = hms
505
506
507class NetworkMemberService(NetworkService):
508
509 def list(self):
510 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500511 members = client.list_members()
David Patersonce781492014-09-18 01:07:01 -0400512 members = members['members']
513 members = self._filter_by_tenant_id(members)
514 LOG.debug("List count, %s Members" % len(members))
515 return members
516
517 def delete(self):
518 client = self.client
519 members = self.list()
520 for member in members:
521 try:
522 client.delete_member(member['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400523 except Exception:
524 LOG.exception("Delete Member exception.")
David Patersonce781492014-09-18 01:07:01 -0400525
526 def dry_run(self):
527 members = self.list()
528 self.data['members'] = members
529
530
531class NetworkVipService(NetworkService):
532
533 def list(self):
534 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500535 vips = client.list_vips()
David Patersonce781492014-09-18 01:07:01 -0400536 vips = vips['vips']
537 vips = self._filter_by_tenant_id(vips)
538 LOG.debug("List count, %s VIPs" % len(vips))
539 return vips
540
541 def delete(self):
542 client = self.client
543 vips = self.list()
544 for vip in vips:
545 try:
546 client.delete_vip(vip['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400547 except Exception:
548 LOG.exception("Delete VIP exception.")
David Patersonce781492014-09-18 01:07:01 -0400549
550 def dry_run(self):
551 vips = self.list()
552 self.data['vips'] = vips
553
554
555class NetworkPoolService(NetworkService):
556
557 def list(self):
558 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500559 pools = client.list_pools()
David Patersonce781492014-09-18 01:07:01 -0400560 pools = pools['pools']
561 pools = self._filter_by_tenant_id(pools)
562 LOG.debug("List count, %s Pools" % len(pools))
563 return pools
564
565 def delete(self):
566 client = self.client
567 pools = self.list()
568 for pool in pools:
569 try:
570 client.delete_pool(pool['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400571 except Exception:
572 LOG.exception("Delete Pool exception.")
David Patersonce781492014-09-18 01:07:01 -0400573
574 def dry_run(self):
575 pools = self.list()
576 self.data['pools'] = pools
577
578
Alexander Gubanov13379bb2015-05-19 18:57:32 +0300579class NetworkMeteringLabelRuleService(NetworkService):
David Patersonce781492014-09-18 01:07:01 -0400580
581 def list(self):
John Warrendd20b3e2015-12-03 13:11:28 -0500582 client = self.metering_label_rules_client
David Kranz34e88122014-12-11 15:24:05 -0500583 rules = client.list_metering_label_rules()
David Patersonce781492014-09-18 01:07:01 -0400584 rules = rules['metering_label_rules']
585 rules = self._filter_by_tenant_id(rules)
586 LOG.debug("List count, %s Metering Label Rules" % len(rules))
587 return rules
588
589 def delete(self):
John Warrendd20b3e2015-12-03 13:11:28 -0500590 client = self.metering_label_rules_client
David Patersonce781492014-09-18 01:07:01 -0400591 rules = self.list()
592 for rule in rules:
593 try:
594 client.delete_metering_label_rule(rule['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400595 except Exception:
596 LOG.exception("Delete Metering Label Rule exception.")
David Patersonce781492014-09-18 01:07:01 -0400597
598 def dry_run(self):
599 rules = self.list()
600 self.data['rules'] = rules
601
602
Alexander Gubanov13379bb2015-05-19 18:57:32 +0300603class NetworkMeteringLabelService(NetworkService):
David Patersonce781492014-09-18 01:07:01 -0400604
605 def list(self):
John Warren6d0083a2015-11-30 18:12:30 -0500606 client = self.metering_labels_client
David Kranz34e88122014-12-11 15:24:05 -0500607 labels = client.list_metering_labels()
David Patersonce781492014-09-18 01:07:01 -0400608 labels = labels['metering_labels']
609 labels = self._filter_by_tenant_id(labels)
610 LOG.debug("List count, %s Metering Labels" % len(labels))
611 return labels
612
613 def delete(self):
John Warren6d0083a2015-11-30 18:12:30 -0500614 client = self.metering_labels_client
David Patersonce781492014-09-18 01:07:01 -0400615 labels = self.list()
616 for label in labels:
617 try:
618 client.delete_metering_label(label['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400619 except Exception:
620 LOG.exception("Delete Metering Label exception.")
David Patersonce781492014-09-18 01:07:01 -0400621
622 def dry_run(self):
623 labels = self.list()
624 self.data['labels'] = labels
625
626
627class NetworkPortService(NetworkService):
628
629 def list(self):
John Warren49c0fe52015-10-22 12:35:54 -0400630 client = self.ports_client
David Paterson82234022015-04-12 14:07:40 -0400631 ports = [port for port in
632 client.list_ports(**self.tenant_filter)['ports']
633 if port["device_owner"] == "" or
634 port["device_owner"].startswith("compute:")]
635
David Patersond6babc52014-10-14 00:11:56 -0400636 if self.is_preserve:
637 ports = self._filter_by_conf_networks(ports)
David Paterson82234022015-04-12 14:07:40 -0400638
David Patersonce781492014-09-18 01:07:01 -0400639 LOG.debug("List count, %s Ports" % len(ports))
640 return ports
641
642 def delete(self):
John Warren49c0fe52015-10-22 12:35:54 -0400643 client = self.ports_client
David Patersonce781492014-09-18 01:07:01 -0400644 ports = self.list()
645 for port in ports:
646 try:
647 client.delete_port(port['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400648 except Exception:
649 LOG.exception("Delete Port exception.")
David Patersonce781492014-09-18 01:07:01 -0400650
651 def dry_run(self):
652 ports = self.list()
653 self.data['ports'] = ports
654
655
David Paterson82234022015-04-12 14:07:40 -0400656class NetworkSecGroupService(NetworkService):
657 def list(self):
John Warrenf9606e92015-12-10 12:12:42 -0500658 client = self.security_groups_client
David Paterson82234022015-04-12 14:07:40 -0400659 filter = self.tenant_filter
660 # cannot delete default sec group so never show it.
661 secgroups = [secgroup for secgroup in
662 client.list_security_groups(**filter)['security_groups']
663 if secgroup['name'] != 'default']
664
665 if self.is_preserve:
666 secgroups = self._filter_by_conf_networks(secgroups)
667 LOG.debug("List count, %s securtiy_groups" % len(secgroups))
668 return secgroups
669
670 def delete(self):
671 client = self.client
672 secgroups = self.list()
673 for secgroup in secgroups:
674 try:
675 client.delete_secgroup(secgroup['id'])
676 except Exception:
677 LOG.exception("Delete security_group exception.")
678
679 def dry_run(self):
680 secgroups = self.list()
681 self.data['secgroups'] = secgroups
682
683
David Patersonce781492014-09-18 01:07:01 -0400684class NetworkSubnetService(NetworkService):
685
686 def list(self):
John Warren3961acd2015-10-02 14:38:53 -0400687 client = self.subnets_client
David Paterson82234022015-04-12 14:07:40 -0400688 subnets = client.list_subnets(**self.tenant_filter)
David Patersonce781492014-09-18 01:07:01 -0400689 subnets = subnets['subnets']
David Patersond6babc52014-10-14 00:11:56 -0400690 if self.is_preserve:
691 subnets = self._filter_by_conf_networks(subnets)
David Patersonce781492014-09-18 01:07:01 -0400692 LOG.debug("List count, %s Subnets" % len(subnets))
693 return subnets
694
695 def delete(self):
John Warren3961acd2015-10-02 14:38:53 -0400696 client = self.subnets_client
David Patersonce781492014-09-18 01:07:01 -0400697 subnets = self.list()
698 for subnet in subnets:
699 try:
700 client.delete_subnet(subnet['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400701 except Exception:
702 LOG.exception("Delete Subnet exception.")
David Patersonce781492014-09-18 01:07:01 -0400703
704 def dry_run(self):
705 subnets = self.list()
706 self.data['subnets'] = subnets
707
708
709# Telemetry services
710class TelemetryAlarmService(BaseService):
711 def __init__(self, manager, **kwargs):
712 super(TelemetryAlarmService, self).__init__(kwargs)
713 self.client = manager.telemetry_client
714
715 def list(self):
716 client = self.client
David Kranz20d06f42015-02-09 14:54:15 -0500717 alarms = client.list_alarms()
David Patersonce781492014-09-18 01:07:01 -0400718 LOG.debug("List count, %s Alarms" % len(alarms))
719 return alarms
720
721 def delete(self):
722 client = self.client
723 alarms = self.list()
724 for alarm in alarms:
725 try:
726 client.delete_alarm(alarm['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400727 except Exception:
728 LOG.exception("Delete Alarms exception.")
David Patersonce781492014-09-18 01:07:01 -0400729
730 def dry_run(self):
731 alarms = self.list()
732 self.data['alarms'] = alarms
733
734
735# begin global services
736class FlavorService(BaseService):
737 def __init__(self, manager, **kwargs):
738 super(FlavorService, self).__init__(kwargs)
739 self.client = manager.flavors_client
740
741 def list(self):
742 client = self.client
ghanshyam19973be2015-08-18 15:46:42 +0900743 flavors = client.list_flavors({"is_public": None})['flavors']
David Patersonce781492014-09-18 01:07:01 -0400744 if not self.is_save_state:
745 # recreate list removing saved flavors
746 flavors = [flavor for flavor in flavors if flavor['id']
747 not in self.saved_state_json['flavors'].keys()]
748
749 if self.is_preserve:
750 flavors = [flavor for flavor in flavors
751 if flavor['id'] not in CONF_FLAVORS]
752 LOG.debug("List count, %s Flavors after reconcile" % len(flavors))
753 return flavors
754
755 def delete(self):
756 client = self.client
757 flavors = self.list()
758 for flavor in flavors:
759 try:
760 client.delete_flavor(flavor['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400761 except Exception:
762 LOG.exception("Delete Flavor exception.")
David Patersonce781492014-09-18 01:07:01 -0400763
764 def dry_run(self):
765 flavors = self.list()
766 self.data['flavors'] = flavors
767
768 def save_state(self):
769 flavors = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500770 self.data['flavors'] = {}
David Patersonce781492014-09-18 01:07:01 -0400771 for flavor in flavors:
gordon chungc15f1bc2015-02-23 18:00:41 -0500772 self.data['flavors'][flavor['id']] = flavor['name']
David Patersonce781492014-09-18 01:07:01 -0400773
774
775class ImageService(BaseService):
776 def __init__(self, manager, **kwargs):
777 super(ImageService, self).__init__(kwargs)
Ghanshyamae76c122015-12-22 13:41:35 +0900778 self.client = manager.compute_images_client
David Patersonce781492014-09-18 01:07:01 -0400779
780 def list(self):
781 client = self.client
ghanshyam1756e0b2015-08-18 19:19:05 +0900782 images = client.list_images({"all_tenants": True})['images']
David Patersonce781492014-09-18 01:07:01 -0400783 if not self.is_save_state:
784 images = [image for image in images if image['id']
785 not in self.saved_state_json['images'].keys()]
786 if self.is_preserve:
787 images = [image for image in images
788 if image['id'] not in CONF_IMAGES]
789 LOG.debug("List count, %s Images after reconcile" % len(images))
790 return images
791
792 def delete(self):
793 client = self.client
794 images = self.list()
795 for image in images:
796 try:
797 client.delete_image(image['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400798 except Exception:
799 LOG.exception("Delete Image exception.")
David Patersonce781492014-09-18 01:07:01 -0400800
801 def dry_run(self):
802 images = self.list()
803 self.data['images'] = images
804
805 def save_state(self):
gordon chungc15f1bc2015-02-23 18:00:41 -0500806 self.data['images'] = {}
David Paterson82234022015-04-12 14:07:40 -0400807 images = self.list()
David Patersonce781492014-09-18 01:07:01 -0400808 for image in images:
gordon chungc15f1bc2015-02-23 18:00:41 -0500809 self.data['images'][image['id']] = image['name']
David Patersonce781492014-09-18 01:07:01 -0400810
811
812class IdentityService(BaseService):
813 def __init__(self, manager, **kwargs):
814 super(IdentityService, self).__init__(kwargs)
815 self.client = manager.identity_client
816
817
Daniel Mellado82c83a52015-12-09 15:16:49 +0000818class UserService(BaseService):
819
820 def __init__(self, manager, **kwargs):
821 super(UserService, self).__init__(kwargs)
822 self.client = manager.users_client
David Patersonce781492014-09-18 01:07:01 -0400823
824 def list(self):
Daniel Mellado82c83a52015-12-09 15:16:49 +0000825 users = self.client.list_users()['users']
David Patersonce781492014-09-18 01:07:01 -0400826
827 if not self.is_save_state:
828 users = [user for user in users if user['id']
829 not in self.saved_state_json['users'].keys()]
830
831 if self.is_preserve:
832 users = [user for user in users if user['name']
833 not in CONF_USERS]
834
835 elif not self.is_save_state: # Never delete admin user
836 users = [user for user in users if user['name'] !=
David Paterson07661de2015-10-29 20:15:04 -0700837 CONF.auth.admin_username]
David Patersonce781492014-09-18 01:07:01 -0400838
839 LOG.debug("List count, %s Users after reconcile" % len(users))
840 return users
841
842 def delete(self):
David Patersonce781492014-09-18 01:07:01 -0400843 users = self.list()
844 for user in users:
845 try:
Daniel Mellado82c83a52015-12-09 15:16:49 +0000846 self.client.delete_user(user['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400847 except Exception:
848 LOG.exception("Delete User exception.")
David Patersonce781492014-09-18 01:07:01 -0400849
850 def dry_run(self):
851 users = self.list()
852 self.data['users'] = users
853
854 def save_state(self):
855 users = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500856 self.data['users'] = {}
David Patersonce781492014-09-18 01:07:01 -0400857 for user in users:
gordon chungc15f1bc2015-02-23 18:00:41 -0500858 self.data['users'][user['id']] = user['name']
David Patersonce781492014-09-18 01:07:01 -0400859
860
Daniel Melladob83ea562015-12-18 09:12:49 +0000861class RoleService(BaseService):
David Patersonce781492014-09-18 01:07:01 -0400862
Daniel Mellado6b16b922015-12-07 12:43:08 +0000863 def __init__(self, manager, **kwargs):
864 super(RoleService, self).__init__(kwargs)
865 self.client = manager.roles_client
866
David Patersonce781492014-09-18 01:07:01 -0400867 def list(self):
David Patersonce781492014-09-18 01:07:01 -0400868 try:
Daniel Mellado6b16b922015-12-07 12:43:08 +0000869 roles = self.client.list_roles()['roles']
David Patersonce781492014-09-18 01:07:01 -0400870 # reconcile roles with saved state and never list admin role
871 if not self.is_save_state:
872 roles = [role for role in roles if
873 (role['id'] not in
874 self.saved_state_json['roles'].keys()
875 and role['name'] != CONF.identity.admin_role)]
876 LOG.debug("List count, %s Roles after reconcile" % len(roles))
877 return roles
David Patersone41ebca2015-04-09 05:40:12 -0400878 except Exception:
879 LOG.exception("Cannot retrieve Roles.")
David Patersonce781492014-09-18 01:07:01 -0400880 return []
881
882 def delete(self):
David Patersonce781492014-09-18 01:07:01 -0400883 roles = self.list()
884 for role in roles:
885 try:
Daniel Mellado6b16b922015-12-07 12:43:08 +0000886 self.client.delete_role(role['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400887 except Exception:
888 LOG.exception("Delete Role exception.")
David Patersonce781492014-09-18 01:07:01 -0400889
890 def dry_run(self):
891 roles = self.list()
892 self.data['roles'] = roles
893
894 def save_state(self):
895 roles = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500896 self.data['roles'] = {}
David Patersonce781492014-09-18 01:07:01 -0400897 for role in roles:
gordon chungc15f1bc2015-02-23 18:00:41 -0500898 self.data['roles'][role['id']] = role['name']
David Patersonce781492014-09-18 01:07:01 -0400899
900
Daniel Melladob83ea562015-12-18 09:12:49 +0000901class TenantService(BaseService):
David Patersonce781492014-09-18 01:07:01 -0400902
Daniel Melladob04da902015-11-20 17:43:12 +0100903 def __init__(self, manager, **kwargs):
904 super(TenantService, self).__init__(kwargs)
905 self.client = manager.tenants_client
906
David Patersonce781492014-09-18 01:07:01 -0400907 def list(self):
Daniel Melladob04da902015-11-20 17:43:12 +0100908 tenants = self.client.list_tenants()['tenants']
David Patersonce781492014-09-18 01:07:01 -0400909 if not self.is_save_state:
910 tenants = [tenant for tenant in tenants if (tenant['id']
911 not in self.saved_state_json['tenants'].keys()
David Paterson07661de2015-10-29 20:15:04 -0700912 and tenant['name'] != CONF.auth.admin_tenant_name)]
David Patersonce781492014-09-18 01:07:01 -0400913
914 if self.is_preserve:
915 tenants = [tenant for tenant in tenants if tenant['name']
916 not in CONF_TENANTS]
917
918 LOG.debug("List count, %s Tenants after reconcile" % len(tenants))
919 return tenants
920
921 def delete(self):
David Patersonce781492014-09-18 01:07:01 -0400922 tenants = self.list()
923 for tenant in tenants:
924 try:
Daniel Melladob04da902015-11-20 17:43:12 +0100925 self.client.delete_tenant(tenant['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400926 except Exception:
927 LOG.exception("Delete Tenant exception.")
David Patersonce781492014-09-18 01:07:01 -0400928
929 def dry_run(self):
930 tenants = self.list()
931 self.data['tenants'] = tenants
932
933 def save_state(self):
934 tenants = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500935 self.data['tenants'] = {}
David Patersonce781492014-09-18 01:07:01 -0400936 for tenant in tenants:
gordon chungc15f1bc2015-02-23 18:00:41 -0500937 self.data['tenants'][tenant['id']] = tenant['name']
David Patersonce781492014-09-18 01:07:01 -0400938
939
940class DomainService(BaseService):
941
942 def __init__(self, manager, **kwargs):
943 super(DomainService, self).__init__(kwargs)
Daniel Mellado91a26b62016-02-11 11:13:04 +0000944 self.client = manager.domains_client
David Patersonce781492014-09-18 01:07:01 -0400945
946 def list(self):
947 client = self.client
Thomas Bechtold48268a02015-08-30 19:37:46 +0200948 domains = client.list_domains()['domains']
David Patersonce781492014-09-18 01:07:01 -0400949 if not self.is_save_state:
950 domains = [domain for domain in domains if domain['id']
951 not in self.saved_state_json['domains'].keys()]
952
953 LOG.debug("List count, %s Domains after reconcile" % len(domains))
954 return domains
955
956 def delete(self):
957 client = self.client
958 domains = self.list()
959 for domain in domains:
960 try:
961 client.update_domain(domain['id'], enabled=False)
962 client.delete_domain(domain['id'])
David Patersone41ebca2015-04-09 05:40:12 -0400963 except Exception:
964 LOG.exception("Delete Domain exception.")
David Patersonce781492014-09-18 01:07:01 -0400965
966 def dry_run(self):
967 domains = self.list()
968 self.data['domains'] = domains
969
970 def save_state(self):
971 domains = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500972 self.data['domains'] = {}
David Patersonce781492014-09-18 01:07:01 -0400973 for domain in domains:
gordon chungc15f1bc2015-02-23 18:00:41 -0500974 self.data['domains'][domain['id']] = domain['name']
David Patersonce781492014-09-18 01:07:01 -0400975
976
977def get_tenant_cleanup_services():
978 tenant_services = []
David Patersonce781492014-09-18 01:07:01 -0400979 if IS_CEILOMETER:
980 tenant_services.append(TelemetryAlarmService)
981 if IS_NOVA:
982 tenant_services.append(ServerService)
983 tenant_services.append(KeyPairService)
984 tenant_services.append(SecurityGroupService)
985 tenant_services.append(ServerGroupService)
986 if not IS_NEUTRON:
987 tenant_services.append(FloatingIpService)
David Paterson35c8df02015-04-05 04:35:31 -0400988 tenant_services.append(NovaQuotaService)
David Patersonce781492014-09-18 01:07:01 -0400989 if IS_HEAT:
990 tenant_services.append(StackService)
991 if IS_NEUTRON:
David Paterson82234022015-04-12 14:07:40 -0400992 tenant_services.append(NetworkFloatingIpService)
David Patersonce781492014-09-18 01:07:01 -0400993 if test.is_extension_enabled('metering', 'network'):
Alexander Gubanov13379bb2015-05-19 18:57:32 +0300994 tenant_services.append(NetworkMeteringLabelRuleService)
995 tenant_services.append(NetworkMeteringLabelService)
David Patersonce781492014-09-18 01:07:01 -0400996 tenant_services.append(NetworkRouterService)
David Patersonce781492014-09-18 01:07:01 -0400997 tenant_services.append(NetworkPortService)
998 tenant_services.append(NetworkSubnetService)
999 tenant_services.append(NetworkService)
David Paterson82234022015-04-12 14:07:40 -04001000 tenant_services.append(NetworkSecGroupService)
David Patersonce781492014-09-18 01:07:01 -04001001 if IS_CINDER:
1002 tenant_services.append(SnapshotService)
1003 tenant_services.append(VolumeService)
David Paterson35c8df02015-04-05 04:35:31 -04001004 tenant_services.append(VolumeQuotaService)
David Patersonce781492014-09-18 01:07:01 -04001005 return tenant_services
1006
1007
1008def get_global_cleanup_services():
1009 global_services = []
1010 if IS_NOVA:
1011 global_services.append(FlavorService)
1012 if IS_GLANCE:
1013 global_services.append(ImageService)
1014 global_services.append(UserService)
1015 global_services.append(TenantService)
1016 global_services.append(DomainService)
1017 global_services.append(RoleService)
1018 return global_services