blob: eb6f1437ddcb392dfb15343971e86ad4512032b3 [file] [log] [blame]
David Patersond6babc52014-10-14 00:11:56 -04001#!/usr/bin/env python
2
David Patersonce781492014-09-18 01:07:01 -04003# Copyright 2014 Dell Inc.
4#
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#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
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
David Patersond6babc52014-10-14 00:11:56 -040019from tempest import clients
David Patersonce781492014-09-18 01:07:01 -040020from tempest import config
David Patersonce781492014-09-18 01:07:01 -040021from tempest import test
22
23LOG = logging.getLogger(__name__)
24CONF = config.CONF
25
David Patersonce781492014-09-18 01:07:01 -040026CONF_FLAVORS = None
27CONF_IMAGES = None
David Patersond6babc52014-10-14 00:11:56 -040028CONF_NETWORKS = []
29CONF_PRIV_NETWORK_NAME = None
30CONF_PUB_NETWORK = None
31CONF_PUB_ROUTER = None
32CONF_TENANTS = None
33CONF_USERS = None
David Patersonce781492014-09-18 01:07:01 -040034
35IS_CEILOMETER = None
36IS_CINDER = None
37IS_GLANCE = None
38IS_HEAT = None
39IS_NEUTRON = None
40IS_NOVA = None
41
42
43def init_conf():
David Patersonce781492014-09-18 01:07:01 -040044 global CONF_FLAVORS
45 global CONF_IMAGES
David Patersond6babc52014-10-14 00:11:56 -040046 global CONF_NETWORKS
47 global CONF_PRIV_NETWORK
48 global CONF_PRIV_NETWORK_NAME
49 global CONF_PUB_NETWORK
50 global CONF_PUB_ROUTER
51 global CONF_TENANTS
52 global CONF_USERS
David Patersonce781492014-09-18 01:07:01 -040053 global IS_CEILOMETER
54 global IS_CINDER
55 global IS_GLANCE
56 global IS_HEAT
57 global IS_NEUTRON
58 global IS_NOVA
59
David Patersonce781492014-09-18 01:07:01 -040060 IS_CEILOMETER = CONF.service_available.ceilometer
61 IS_CINDER = CONF.service_available.cinder
62 IS_GLANCE = CONF.service_available.glance
63 IS_HEAT = CONF.service_available.heat
64 IS_NEUTRON = CONF.service_available.neutron
65 IS_NOVA = CONF.service_available.nova
66
David Patersond6babc52014-10-14 00:11:56 -040067 CONF_FLAVORS = [CONF.compute.flavor_ref, CONF.compute.flavor_ref_alt]
68 CONF_IMAGES = [CONF.compute.image_ref, CONF.compute.image_ref_alt]
69 CONF_PRIV_NETWORK_NAME = CONF.compute.fixed_network_name
70 CONF_PUB_NETWORK = CONF.network.public_network_id
71 CONF_PUB_ROUTER = CONF.network.public_router_id
72 CONF_TENANTS = [CONF.identity.admin_tenant_name,
73 CONF.identity.tenant_name,
74 CONF.identity.alt_tenant_name]
75 CONF_USERS = [CONF.identity.admin_username, CONF.identity.username,
76 CONF.identity.alt_username]
77
78 if IS_NEUTRON:
79 CONF_PRIV_NETWORK = _get_priv_net_id(CONF.compute.fixed_network_name,
80 CONF.identity.tenant_name)
81 CONF_NETWORKS = [CONF_PUB_NETWORK, CONF_PRIV_NETWORK]
82
83
84def _get_priv_net_id(prv_net_name, tenant_name):
85 am = clients.AdminManager()
86 net_cl = am.network_client
87 id_cl = am.identity_client
88
David Kranz34e88122014-12-11 15:24:05 -050089 networks = net_cl.list_networks()
David Patersond6babc52014-10-14 00:11:56 -040090 tenant = id_cl.get_tenant_by_name(tenant_name)
91 t_id = tenant['id']
92 n_id = None
93 for net in networks['networks']:
94 if (net['tenant_id'] == t_id and net['name'] == prv_net_name):
95 n_id = net['id']
96 break
97 return n_id
98
David Patersonce781492014-09-18 01:07:01 -040099
100class BaseService(object):
101 def __init__(self, kwargs):
102 self.client = None
103 for key, value in kwargs.items():
104 setattr(self, key, value)
105
106 def _filter_by_tenant_id(self, item_list):
107 if (item_list is None
108 or len(item_list) == 0
109 or not hasattr(self, 'tenant_id')
110 or self.tenant_id is None
111 or 'tenant_id' not in item_list[0]):
112 return item_list
113
David Patersond6babc52014-10-14 00:11:56 -0400114 return [item for item in item_list
115 if item['tenant_id'] == self.tenant_id]
David Patersonce781492014-09-18 01:07:01 -0400116
117 def list(self):
118 pass
119
120 def delete(self):
121 pass
122
123 def dry_run(self):
124 pass
125
126 def save_state(self):
127 pass
128
129 def run(self):
130 if self.is_dry_run:
131 self.dry_run()
132 elif self.is_save_state:
133 self.save_state()
134 else:
135 self.delete()
136
137
138class SnapshotService(BaseService):
139
140 def __init__(self, manager, **kwargs):
141 super(SnapshotService, self).__init__(kwargs)
142 self.client = manager.snapshots_client
143
144 def list(self):
145 client = self.client
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000146 snaps = client.list_snapshots()
David Patersonce781492014-09-18 01:07:01 -0400147 LOG.debug("List count, %s Snapshots" % len(snaps))
148 return snaps
149
150 def delete(self):
151 snaps = self.list()
152 client = self.client
153 for snap in snaps:
154 try:
155 client.delete_snapshot(snap['id'])
156 except Exception as e:
157 LOG.exception("Delete Snapshot exception: %s" % e)
158 pass
159
160 def dry_run(self):
161 snaps = self.list()
162 self.data['snapshots'] = snaps
163
164
165class ServerService(BaseService):
166 def __init__(self, manager, **kwargs):
167 super(ServerService, self).__init__(kwargs)
168 self.client = manager.servers_client
169
170 def list(self):
171 client = self.client
David Kranzae99b9a2015-02-16 13:37:01 -0500172 servers_body = client.list_servers()
David Patersonce781492014-09-18 01:07:01 -0400173 servers = servers_body['servers']
174 LOG.debug("List count, %s Servers" % len(servers))
175 return servers
176
177 def delete(self):
178 client = self.client
179 servers = self.list()
180 for server in servers:
181 try:
182 client.delete_server(server['id'])
183 except Exception as e:
184 LOG.exception("Delete Server exception: %s" % e)
185 pass
186
187 def dry_run(self):
188 servers = self.list()
189 self.data['servers'] = servers
190
191
192class ServerGroupService(ServerService):
193
194 def list(self):
195 client = self.client
David Kranzae99b9a2015-02-16 13:37:01 -0500196 sgs = client.list_server_groups()
David Patersonce781492014-09-18 01:07:01 -0400197 LOG.debug("List count, %s Server Groups" % len(sgs))
198 return sgs
199
200 def delete(self):
201 client = self.client
202 sgs = self.list()
203 for sg in sgs:
204 try:
205 client.delete_server_group(sg['id'])
206 except Exception as e:
207 LOG.exception("Delete Server Group exception: %s" % e)
208 pass
209
210 def dry_run(self):
211 sgs = self.list()
212 self.data['server_groups'] = sgs
213
214
215class StackService(BaseService):
216 def __init__(self, manager, **kwargs):
217 super(StackService, self).__init__(kwargs)
218 self.client = manager.orchestration_client
219
220 def list(self):
221 client = self.client
David Kranz8ad924b2015-01-16 16:50:18 -0500222 stacks = client.list_stacks()
David Patersonce781492014-09-18 01:07:01 -0400223 LOG.debug("List count, %s Stacks" % len(stacks))
224 return stacks
225
226 def delete(self):
227 client = self.client
228 stacks = self.list()
229 for stack in stacks:
230 try:
231 client.delete_stack(stack['id'])
232 except Exception as e:
233 LOG.exception("Delete Stack exception: %s " % e)
234 pass
235
236 def dry_run(self):
237 stacks = self.list()
238 self.data['stacks'] = stacks
239
240
241class KeyPairService(BaseService):
242 def __init__(self, manager, **kwargs):
243 super(KeyPairService, self).__init__(kwargs)
244 self.client = manager.keypairs_client
245
246 def list(self):
247 client = self.client
David Kranz173f0e02015-02-06 13:47:57 -0500248 keypairs = client.list_keypairs()
David Patersonce781492014-09-18 01:07:01 -0400249 LOG.debug("List count, %s Keypairs" % len(keypairs))
250 return keypairs
251
252 def delete(self):
253 client = self.client
254 keypairs = self.list()
255 for k in keypairs:
256 try:
257 name = k['keypair']['name']
258 client.delete_keypair(name)
259 except Exception as e:
260 LOG.exception("Delete Keypairs exception: %s" % e)
261 pass
262
263 def dry_run(self):
264 keypairs = self.list()
265 self.data['keypairs'] = keypairs
266
267
268class SecurityGroupService(BaseService):
269 def __init__(self, manager, **kwargs):
270 super(SecurityGroupService, self).__init__(kwargs)
271 self.client = manager.security_groups_client
272
273 def list(self):
274 client = self.client
David Kranz9964b4e2015-02-06 15:45:29 -0500275 secgrps = client.list_security_groups()
David Patersonce781492014-09-18 01:07:01 -0400276 secgrp_del = [grp for grp in secgrps if grp['name'] != 'default']
277 LOG.debug("List count, %s Security Groups" % len(secgrp_del))
278 return secgrp_del
279
280 def delete(self):
281 client = self.client
282 secgrp_del = self.list()
283 for g in secgrp_del:
284 try:
285 client.delete_security_group(g['id'])
286 except Exception as e:
287 LOG.exception("Delete Security Groups exception: %s" % e)
288
289 def dry_run(self):
290 secgrp_del = self.list()
291 self.data['security_groups'] = secgrp_del
292
293
294class FloatingIpService(BaseService):
295 def __init__(self, manager, **kwargs):
296 super(FloatingIpService, self).__init__(kwargs)
297 self.client = manager.floating_ips_client
298
299 def list(self):
300 client = self.client
David Kranze4e3b412015-02-10 10:50:42 -0500301 floating_ips = client.list_floating_ips()
David Patersonce781492014-09-18 01:07:01 -0400302 LOG.debug("List count, %s Floating IPs" % len(floating_ips))
303 return floating_ips
304
305 def delete(self):
306 client = self.client
307 floating_ips = self.list()
308 for f in floating_ips:
309 try:
310 client.delete_floating_ip(f['id'])
311 except Exception as e:
312 LOG.exception("Delete Floating IPs exception: %s" % e)
313 pass
314
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
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000327 vols = client.list_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'])
337 except Exception as e:
338 LOG.exception("Delete Volume exception: %s" % e)
339 pass
340
341 def dry_run(self):
342 vols = self.list()
343 self.data['volumes'] = vols
344
345
David Paterson35c8df02015-04-05 04:35:31 -0400346class VolumeQuotaService(BaseService):
347 def __init__(self, manager, **kwargs):
348 super(VolumeQuotaService, self).__init__(kwargs)
349 self.client = manager.volume_quotas_client
350
351 def delete(self):
352 client = self.client
353 try:
354 client.delete_quota_set(self.tenant_id)
355 except Exception as e:
356 LOG.exception("Delete Volume Quotas exception: %s" % e)
357 pass
358
359 def dry_run(self):
360 quotas = self.client.show_quota_usage(self.tenant_id)
361 self.data['volume_quotas'] = quotas
362
363
364class NovaQuotaService(BaseService):
365 def __init__(self, manager, **kwargs):
366 super(NovaQuotaService, self).__init__(kwargs)
367 self.client = manager.quotas_client
368 self.limits_client = manager.limits_client
369
370 def delete(self):
371 client = self.client
372 try:
373 client.delete_quota_set(self.tenant_id)
374 except Exception as e:
375 LOG.exception("Delete Quotas exception: %s" % e)
376 pass
377
378 def dry_run(self):
379 client = self.limits_client
380 quotas = client.get_absolute_limits()
381 self.data['compute_quotas'] = quotas
382
383
David Patersonce781492014-09-18 01:07:01 -0400384# Begin network service classes
385class NetworkService(BaseService):
386 def __init__(self, manager, **kwargs):
387 super(NetworkService, self).__init__(kwargs)
388 self.client = manager.network_client
389
David Patersond6babc52014-10-14 00:11:56 -0400390 def _filter_by_conf_networks(self, item_list):
391 if not item_list or not all(('network_id' in i for i in item_list)):
392 return item_list
393
394 return [item for item in item_list if item['network_id']
395 not in CONF_NETWORKS]
396
David Patersonce781492014-09-18 01:07:01 -0400397 def list(self):
398 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500399 networks = client.list_networks()
David Patersonce781492014-09-18 01:07:01 -0400400 networks = self._filter_by_tenant_id(networks['networks'])
401 # filter out networks declared in tempest.conf
402 if self.is_preserve:
403 networks = [network for network in networks
David Patersond6babc52014-10-14 00:11:56 -0400404 if network['id'] not in CONF_NETWORKS]
David Patersonce781492014-09-18 01:07:01 -0400405 LOG.debug("List count, %s Networks" % networks)
406 return networks
407
408 def delete(self):
409 client = self.client
410 networks = self.list()
411 for n in networks:
412 try:
413 client.delete_network(n['id'])
414 except Exception as e:
415 LOG.exception("Delete Network exception: %s" % e)
416 pass
417
418 def dry_run(self):
419 networks = self.list()
420 self.data['networks'] = networks
421
422
423class NetworkIpSecPolicyService(NetworkService):
424
425 def list(self):
426 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500427 ipsecpols = client.list_ipsecpolicies()
David Patersonce781492014-09-18 01:07:01 -0400428 ipsecpols = ipsecpols['ipsecpolicies']
429 ipsecpols = self._filter_by_tenant_id(ipsecpols)
430 LOG.debug("List count, %s IP Security Policies" % len(ipsecpols))
431 return ipsecpols
432
433 def delete(self):
434 client = self.client
435 ipsecpols = self.list()
436 for ipsecpol in ipsecpols:
437 try:
438 client.delete_ipsecpolicy(ipsecpol['id'])
439 except Exception as e:
440 LOG.exception("Delete IP Securty Policy exception: %s" % e)
441 pass
442
443 def dry_run(self):
444 ipsecpols = self.list()
445 self.data['ip_security_policies'] = ipsecpols
446
447
448class NetworkFwPolicyService(NetworkService):
449
450 def list(self):
451 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500452 fwpols = client.list_firewall_policies()
David Patersonce781492014-09-18 01:07:01 -0400453 fwpols = fwpols['firewall_policies']
454 fwpols = self._filter_by_tenant_id(fwpols)
455 LOG.debug("List count, %s Firewall Policies" % len(fwpols))
456 return fwpols
457
458 def delete(self):
459 client = self.client
460 fwpols = self.list()
461 for fwpol in fwpols:
462 try:
463 client.delete_firewall_policy(fwpol['id'])
464 except Exception as e:
465 LOG.exception("Delete Firewall Policy exception: %s" % e)
466 pass
467
468 def dry_run(self):
469 fwpols = self.list()
470 self.data['firewall_policies'] = fwpols
471
472
473class NetworkFwRulesService(NetworkService):
474
475 def list(self):
476 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500477 fwrules = client.list_firewall_rules()
David Patersonce781492014-09-18 01:07:01 -0400478 fwrules = fwrules['firewall_rules']
479 fwrules = self._filter_by_tenant_id(fwrules)
480 LOG.debug("List count, %s Firewall Rules" % len(fwrules))
481 return fwrules
482
483 def delete(self):
484 client = self.client
485 fwrules = self.list()
486 for fwrule in fwrules:
487 try:
488 client.delete_firewall_rule(fwrule['id'])
489 except Exception as e:
490 LOG.exception("Delete Firewall Rule exception: %s" % e)
491 pass
492
493 def dry_run(self):
494 fwrules = self.list()
495 self.data['firewall_rules'] = fwrules
496
497
498class NetworkIkePolicyService(NetworkService):
499
500 def list(self):
501 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500502 ikepols = client.list_ikepolicies()
David Patersonce781492014-09-18 01:07:01 -0400503 ikepols = ikepols['ikepolicies']
504 ikepols = self._filter_by_tenant_id(ikepols)
505 LOG.debug("List count, %s IKE Policies" % len(ikepols))
506 return ikepols
507
508 def delete(self):
509 client = self.client
510 ikepols = self.list()
511 for ikepol in ikepols:
512 try:
513 client.delete_firewall_rule(ikepol['id'])
514 except Exception as e:
515 LOG.exception("Delete IKE Policy exception: %s" % e)
516 pass
517
518 def dry_run(self):
519 ikepols = self.list()
520 self.data['ike_policies'] = ikepols
521
522
523class NetworkVpnServiceService(NetworkService):
524
525 def list(self):
526 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500527 vpnsrvs = client.list_vpnservices()
David Patersonce781492014-09-18 01:07:01 -0400528 vpnsrvs = vpnsrvs['vpnservices']
529 vpnsrvs = self._filter_by_tenant_id(vpnsrvs)
530 LOG.debug("List count, %s VPN Services" % len(vpnsrvs))
531 return vpnsrvs
532
533 def delete(self):
534 client = self.client
535 vpnsrvs = self.list()
536 for vpnsrv in vpnsrvs:
537 try:
538 client.delete_vpnservice(vpnsrv['id'])
539 except Exception as e:
540 LOG.exception("Delete VPN Service exception: %s" % e)
541 pass
542
543 def dry_run(self):
544 vpnsrvs = self.list()
545 self.data['vpn_services'] = vpnsrvs
546
547
548class NetworkFloatingIpService(NetworkService):
549
550 def list(self):
551 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500552 flips = client.list_floatingips()
David Patersonce781492014-09-18 01:07:01 -0400553 flips = flips['floatingips']
554 flips = self._filter_by_tenant_id(flips)
555 LOG.debug("List count, %s Network Floating IPs" % len(flips))
556 return flips
557
558 def delete(self):
559 client = self.client
560 flips = self.list()
561 for flip in flips:
562 try:
563 client.delete_floatingip(flip['id'])
564 except Exception as e:
565 LOG.exception("Delete Network Floating IP exception: %s" % e)
566 pass
567
568 def dry_run(self):
569 flips = self.list()
570 self.data['floating_ips'] = flips
571
572
573class NetworkRouterService(NetworkService):
574
575 def list(self):
576 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500577 routers = client.list_routers()
David Patersonce781492014-09-18 01:07:01 -0400578 routers = routers['routers']
579 routers = self._filter_by_tenant_id(routers)
580 if self.is_preserve:
581 routers = [router for router in routers
582 if router['id'] != CONF_PUB_ROUTER]
583
584 LOG.debug("List count, %s Routers" % len(routers))
585 return routers
586
587 def delete(self):
588 client = self.client
589 routers = self.list()
590 for router in routers:
591 try:
592 rid = router['id']
David Kranz34e88122014-12-11 15:24:05 -0500593 ports = client.list_router_interfaces(rid)
David Patersonce781492014-09-18 01:07:01 -0400594 ports = ports['ports']
595 for port in ports:
596 subid = port['fixed_ips'][0]['subnet_id']
597 client.remove_router_interface_with_subnet_id(rid, subid)
David Patersond6babc52014-10-14 00:11:56 -0400598 client.delete_router(rid)
David Patersonce781492014-09-18 01:07:01 -0400599 except Exception as e:
600 LOG.exception("Delete Router exception: %s" % e)
601 pass
602
603 def dry_run(self):
604 routers = self.list()
605 self.data['routers'] = routers
606
607
608class NetworkHealthMonitorService(NetworkService):
609
610 def list(self):
611 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500612 hms = client.list_health_monitors()
David Patersonce781492014-09-18 01:07:01 -0400613 hms = hms['health_monitors']
614 hms = self._filter_by_tenant_id(hms)
615 LOG.debug("List count, %s Health Monitors" % len(hms))
616 return hms
617
618 def delete(self):
619 client = self.client
620 hms = self.list()
621 for hm in hms:
622 try:
623 client.delete_health_monitor(hm['id'])
624 except Exception as e:
625 LOG.exception("Delete Health Monitor exception: %s" % e)
626 pass
627
628 def dry_run(self):
629 hms = self.list()
630 self.data['health_monitors'] = hms
631
632
633class NetworkMemberService(NetworkService):
634
635 def list(self):
636 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500637 members = client.list_members()
David Patersonce781492014-09-18 01:07:01 -0400638 members = members['members']
639 members = self._filter_by_tenant_id(members)
640 LOG.debug("List count, %s Members" % len(members))
641 return members
642
643 def delete(self):
644 client = self.client
645 members = self.list()
646 for member in members:
647 try:
648 client.delete_member(member['id'])
649 except Exception as e:
650 LOG.exception("Delete Member exception: %s" % e)
651 pass
652
653 def dry_run(self):
654 members = self.list()
655 self.data['members'] = members
656
657
658class NetworkVipService(NetworkService):
659
660 def list(self):
661 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500662 vips = client.list_vips()
David Patersonce781492014-09-18 01:07:01 -0400663 vips = vips['vips']
664 vips = self._filter_by_tenant_id(vips)
665 LOG.debug("List count, %s VIPs" % len(vips))
666 return vips
667
668 def delete(self):
669 client = self.client
670 vips = self.list()
671 for vip in vips:
672 try:
673 client.delete_vip(vip['id'])
674 except Exception as e:
675 LOG.exception("Delete VIP exception: %s" % e)
676 pass
677
678 def dry_run(self):
679 vips = self.list()
680 self.data['vips'] = vips
681
682
683class NetworkPoolService(NetworkService):
684
685 def list(self):
686 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500687 pools = client.list_pools()
David Patersonce781492014-09-18 01:07:01 -0400688 pools = pools['pools']
689 pools = self._filter_by_tenant_id(pools)
690 LOG.debug("List count, %s Pools" % len(pools))
691 return pools
692
693 def delete(self):
694 client = self.client
695 pools = self.list()
696 for pool in pools:
697 try:
698 client.delete_pool(pool['id'])
699 except Exception as e:
700 LOG.exception("Delete Pool exception: %s" % e)
701 pass
702
703 def dry_run(self):
704 pools = self.list()
705 self.data['pools'] = pools
706
707
Alexander Gubanov13379bb2015-05-19 18:57:32 +0300708class NetworkMeteringLabelRuleService(NetworkService):
David Patersonce781492014-09-18 01:07:01 -0400709
710 def list(self):
711 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500712 rules = client.list_metering_label_rules()
David Patersonce781492014-09-18 01:07:01 -0400713 rules = rules['metering_label_rules']
714 rules = self._filter_by_tenant_id(rules)
715 LOG.debug("List count, %s Metering Label Rules" % len(rules))
716 return rules
717
718 def delete(self):
719 client = self.client
720 rules = self.list()
721 for rule in rules:
722 try:
723 client.delete_metering_label_rule(rule['id'])
724 except Exception as e:
725 LOG.exception("Delete Metering Label Rule exception: %s" % e)
726 pass
727
728 def dry_run(self):
729 rules = self.list()
730 self.data['rules'] = rules
731
732
Alexander Gubanov13379bb2015-05-19 18:57:32 +0300733class NetworkMeteringLabelService(NetworkService):
David Patersonce781492014-09-18 01:07:01 -0400734
735 def list(self):
736 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500737 labels = client.list_metering_labels()
David Patersonce781492014-09-18 01:07:01 -0400738 labels = labels['metering_labels']
739 labels = self._filter_by_tenant_id(labels)
740 LOG.debug("List count, %s Metering Labels" % len(labels))
741 return labels
742
743 def delete(self):
744 client = self.client
745 labels = self.list()
746 for label in labels:
747 try:
748 client.delete_metering_label(label['id'])
749 except Exception as e:
750 LOG.exception("Delete Metering Label exception: %s" % e)
751 pass
752
753 def dry_run(self):
754 labels = self.list()
755 self.data['labels'] = labels
756
757
758class NetworkPortService(NetworkService):
759
760 def list(self):
761 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500762 ports = client.list_ports()
David Patersonce781492014-09-18 01:07:01 -0400763 ports = ports['ports']
764 ports = self._filter_by_tenant_id(ports)
David Patersond6babc52014-10-14 00:11:56 -0400765 if self.is_preserve:
766 ports = self._filter_by_conf_networks(ports)
David Patersonce781492014-09-18 01:07:01 -0400767 LOG.debug("List count, %s Ports" % len(ports))
768 return ports
769
770 def delete(self):
771 client = self.client
772 ports = self.list()
773 for port in ports:
774 try:
775 client.delete_port(port['id'])
776 except Exception as e:
777 LOG.exception("Delete Port exception: %s" % e)
778 pass
779
780 def dry_run(self):
781 ports = self.list()
782 self.data['ports'] = ports
783
784
785class NetworkSubnetService(NetworkService):
786
787 def list(self):
788 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500789 subnets = client.list_subnets()
David Patersonce781492014-09-18 01:07:01 -0400790 subnets = subnets['subnets']
791 subnets = self._filter_by_tenant_id(subnets)
David Patersond6babc52014-10-14 00:11:56 -0400792 if self.is_preserve:
793 subnets = self._filter_by_conf_networks(subnets)
David Patersonce781492014-09-18 01:07:01 -0400794 LOG.debug("List count, %s Subnets" % len(subnets))
795 return subnets
796
797 def delete(self):
798 client = self.client
799 subnets = self.list()
800 for subnet in subnets:
801 try:
802 client.delete_subnet(subnet['id'])
803 except Exception as e:
804 LOG.exception("Delete Subnet exception: %s" % e)
805 pass
806
807 def dry_run(self):
808 subnets = self.list()
809 self.data['subnets'] = subnets
810
811
812# Telemetry services
813class TelemetryAlarmService(BaseService):
814 def __init__(self, manager, **kwargs):
815 super(TelemetryAlarmService, self).__init__(kwargs)
816 self.client = manager.telemetry_client
817
818 def list(self):
819 client = self.client
David Kranz20d06f42015-02-09 14:54:15 -0500820 alarms = client.list_alarms()
David Patersonce781492014-09-18 01:07:01 -0400821 LOG.debug("List count, %s Alarms" % len(alarms))
822 return alarms
823
824 def delete(self):
825 client = self.client
826 alarms = self.list()
827 for alarm in alarms:
828 try:
829 client.delete_alarm(alarm['id'])
830 except Exception as e:
831 LOG.exception("Delete Alarms exception: %s" % e)
832 pass
833
834 def dry_run(self):
835 alarms = self.list()
836 self.data['alarms'] = alarms
837
838
839# begin global services
840class FlavorService(BaseService):
841 def __init__(self, manager, **kwargs):
842 super(FlavorService, self).__init__(kwargs)
843 self.client = manager.flavors_client
844
845 def list(self):
846 client = self.client
David Kranz2fa77b22015-02-09 11:39:50 -0500847 flavors = client.list_flavors({"is_public": None})
David Patersonce781492014-09-18 01:07:01 -0400848 if not self.is_save_state:
849 # recreate list removing saved flavors
850 flavors = [flavor for flavor in flavors if flavor['id']
851 not in self.saved_state_json['flavors'].keys()]
852
853 if self.is_preserve:
854 flavors = [flavor for flavor in flavors
855 if flavor['id'] not in CONF_FLAVORS]
856 LOG.debug("List count, %s Flavors after reconcile" % len(flavors))
857 return flavors
858
859 def delete(self):
860 client = self.client
861 flavors = self.list()
862 for flavor in flavors:
863 try:
864 client.delete_flavor(flavor['id'])
865 except Exception as e:
866 LOG.exception("Delete Flavor exception: %s" % e)
867 pass
868
869 def dry_run(self):
870 flavors = self.list()
871 self.data['flavors'] = flavors
872
873 def save_state(self):
874 flavors = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500875 self.data['flavors'] = {}
David Patersonce781492014-09-18 01:07:01 -0400876 for flavor in flavors:
gordon chungc15f1bc2015-02-23 18:00:41 -0500877 self.data['flavors'][flavor['id']] = flavor['name']
David Patersonce781492014-09-18 01:07:01 -0400878
879
880class ImageService(BaseService):
881 def __init__(self, manager, **kwargs):
882 super(ImageService, self).__init__(kwargs)
883 self.client = manager.images_client
884
885 def list(self):
886 client = self.client
David Kranz34f18782015-01-06 13:43:55 -0500887 images = client.list_images({"all_tenants": True})
David Patersonce781492014-09-18 01:07:01 -0400888 if not self.is_save_state:
889 images = [image for image in images if image['id']
890 not in self.saved_state_json['images'].keys()]
891 if self.is_preserve:
892 images = [image for image in images
893 if image['id'] not in CONF_IMAGES]
894 LOG.debug("List count, %s Images after reconcile" % len(images))
895 return images
896
897 def delete(self):
898 client = self.client
899 images = self.list()
900 for image in images:
901 try:
902 client.delete_image(image['id'])
903 except Exception as e:
904 LOG.exception("Delete Image exception: %s" % e)
905 pass
906
907 def dry_run(self):
908 images = self.list()
909 self.data['images'] = images
910
911 def save_state(self):
912 images = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500913 self.data['images'] = {}
David Patersonce781492014-09-18 01:07:01 -0400914 for image in images:
gordon chungc15f1bc2015-02-23 18:00:41 -0500915 self.data['images'][image['id']] = image['name']
David Patersonce781492014-09-18 01:07:01 -0400916
917
918class IdentityService(BaseService):
919 def __init__(self, manager, **kwargs):
920 super(IdentityService, self).__init__(kwargs)
921 self.client = manager.identity_client
922
923
924class UserService(IdentityService):
925
926 def list(self):
927 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -0500928 users = client.get_users()
David Patersonce781492014-09-18 01:07:01 -0400929
930 if not self.is_save_state:
931 users = [user for user in users if user['id']
932 not in self.saved_state_json['users'].keys()]
933
934 if self.is_preserve:
935 users = [user for user in users if user['name']
936 not in CONF_USERS]
937
938 elif not self.is_save_state: # Never delete admin user
939 users = [user for user in users if user['name'] !=
940 CONF.identity.admin_username]
941
942 LOG.debug("List count, %s Users after reconcile" % len(users))
943 return users
944
945 def delete(self):
946 client = self.client
947 users = self.list()
948 for user in users:
949 try:
950 client.delete_user(user['id'])
951 except Exception as e:
952 LOG.exception("Delete User exception: %s" % e)
953 pass
954
955 def dry_run(self):
956 users = self.list()
957 self.data['users'] = users
958
959 def save_state(self):
960 users = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500961 self.data['users'] = {}
David Patersonce781492014-09-18 01:07:01 -0400962 for user in users:
gordon chungc15f1bc2015-02-23 18:00:41 -0500963 self.data['users'][user['id']] = user['name']
David Patersonce781492014-09-18 01:07:01 -0400964
965
966class RoleService(IdentityService):
967
968 def list(self):
969 client = self.client
970 try:
David Kranzb7afa922014-12-30 10:56:26 -0500971 roles = client.list_roles()
David Patersonce781492014-09-18 01:07:01 -0400972 # reconcile roles with saved state and never list admin role
973 if not self.is_save_state:
974 roles = [role for role in roles if
975 (role['id'] not in
976 self.saved_state_json['roles'].keys()
977 and role['name'] != CONF.identity.admin_role)]
978 LOG.debug("List count, %s Roles after reconcile" % len(roles))
979 return roles
980 except Exception as ex:
981 LOG.exception("Cannot retrieve Roles, exception: %s" % ex)
982 return []
983
984 def delete(self):
985 client = self.client
986 roles = self.list()
987 for role in roles:
988 try:
989 client.delete_role(role['id'])
990 except Exception as e:
991 LOG.exception("Delete Role exception: %s" % e)
992 pass
993
994 def dry_run(self):
995 roles = self.list()
996 self.data['roles'] = roles
997
998 def save_state(self):
999 roles = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -05001000 self.data['roles'] = {}
David Patersonce781492014-09-18 01:07:01 -04001001 for role in roles:
gordon chungc15f1bc2015-02-23 18:00:41 -05001002 self.data['roles'][role['id']] = role['name']
David Patersonce781492014-09-18 01:07:01 -04001003
1004
1005class TenantService(IdentityService):
1006
1007 def list(self):
1008 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -05001009 tenants = client.list_tenants()
David Patersonce781492014-09-18 01:07:01 -04001010 if not self.is_save_state:
1011 tenants = [tenant for tenant in tenants if (tenant['id']
1012 not in self.saved_state_json['tenants'].keys()
1013 and tenant['name'] != CONF.identity.admin_tenant_name)]
1014
1015 if self.is_preserve:
1016 tenants = [tenant for tenant in tenants if tenant['name']
1017 not in CONF_TENANTS]
1018
1019 LOG.debug("List count, %s Tenants after reconcile" % len(tenants))
1020 return tenants
1021
1022 def delete(self):
1023 client = self.client
1024 tenants = self.list()
1025 for tenant in tenants:
1026 try:
1027 client.delete_tenant(tenant['id'])
1028 except Exception as e:
1029 LOG.exception("Delete Tenant exception: %s" % e)
1030 pass
1031
1032 def dry_run(self):
1033 tenants = self.list()
1034 self.data['tenants'] = tenants
1035
1036 def save_state(self):
1037 tenants = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -05001038 self.data['tenants'] = {}
David Patersonce781492014-09-18 01:07:01 -04001039 for tenant in tenants:
gordon chungc15f1bc2015-02-23 18:00:41 -05001040 self.data['tenants'][tenant['id']] = tenant['name']
David Patersonce781492014-09-18 01:07:01 -04001041
1042
1043class DomainService(BaseService):
1044
1045 def __init__(self, manager, **kwargs):
1046 super(DomainService, self).__init__(kwargs)
1047 self.client = manager.identity_v3_client
1048
1049 def list(self):
1050 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -05001051 domains = client.list_domains()
David Patersonce781492014-09-18 01:07:01 -04001052 if not self.is_save_state:
1053 domains = [domain for domain in domains if domain['id']
1054 not in self.saved_state_json['domains'].keys()]
1055
1056 LOG.debug("List count, %s Domains after reconcile" % len(domains))
1057 return domains
1058
1059 def delete(self):
1060 client = self.client
1061 domains = self.list()
1062 for domain in domains:
1063 try:
1064 client.update_domain(domain['id'], enabled=False)
1065 client.delete_domain(domain['id'])
1066 except Exception as e:
1067 LOG.exception("Delete Domain exception: %s" % e)
1068 pass
1069
1070 def dry_run(self):
1071 domains = self.list()
1072 self.data['domains'] = domains
1073
1074 def save_state(self):
1075 domains = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -05001076 self.data['domains'] = {}
David Patersonce781492014-09-18 01:07:01 -04001077 for domain in domains:
gordon chungc15f1bc2015-02-23 18:00:41 -05001078 self.data['domains'][domain['id']] = domain['name']
David Patersonce781492014-09-18 01:07:01 -04001079
1080
1081def get_tenant_cleanup_services():
1082 tenant_services = []
1083
1084 if IS_CEILOMETER:
1085 tenant_services.append(TelemetryAlarmService)
1086 if IS_NOVA:
1087 tenant_services.append(ServerService)
1088 tenant_services.append(KeyPairService)
1089 tenant_services.append(SecurityGroupService)
1090 tenant_services.append(ServerGroupService)
1091 if not IS_NEUTRON:
1092 tenant_services.append(FloatingIpService)
David Paterson35c8df02015-04-05 04:35:31 -04001093 tenant_services.append(NovaQuotaService)
David Patersonce781492014-09-18 01:07:01 -04001094 if IS_HEAT:
1095 tenant_services.append(StackService)
1096 if IS_NEUTRON:
1097 if test.is_extension_enabled('vpnaas', 'network'):
1098 tenant_services.append(NetworkIpSecPolicyService)
1099 tenant_services.append(NetworkIkePolicyService)
1100 tenant_services.append(NetworkVpnServiceService)
1101 if test.is_extension_enabled('fwaas', 'network'):
1102 tenant_services.append(NetworkFwPolicyService)
1103 tenant_services.append(NetworkFwRulesService)
1104 if test.is_extension_enabled('lbaas', 'network'):
1105 tenant_services.append(NetworkHealthMonitorService)
1106 tenant_services.append(NetworkMemberService)
1107 tenant_services.append(NetworkVipService)
1108 tenant_services.append(NetworkPoolService)
1109 if test.is_extension_enabled('metering', 'network'):
Alexander Gubanov13379bb2015-05-19 18:57:32 +03001110 tenant_services.append(NetworkMeteringLabelRuleService)
1111 tenant_services.append(NetworkMeteringLabelService)
David Patersonce781492014-09-18 01:07:01 -04001112 tenant_services.append(NetworkRouterService)
1113 tenant_services.append(NetworkFloatingIpService)
1114 tenant_services.append(NetworkPortService)
1115 tenant_services.append(NetworkSubnetService)
1116 tenant_services.append(NetworkService)
1117 if IS_CINDER:
1118 tenant_services.append(SnapshotService)
1119 tenant_services.append(VolumeService)
David Paterson35c8df02015-04-05 04:35:31 -04001120 tenant_services.append(VolumeQuotaService)
David Patersonce781492014-09-18 01:07:01 -04001121 return tenant_services
1122
1123
1124def get_global_cleanup_services():
1125 global_services = []
1126 if IS_NOVA:
1127 global_services.append(FlavorService)
1128 if IS_GLANCE:
1129 global_services.append(ImageService)
1130 global_services.append(UserService)
1131 global_services.append(TenantService)
1132 global_services.append(DomainService)
1133 global_services.append(RoleService)
1134 return global_services