blob: a0bbb700b22342175527a7c9d0d35586745f3c76 [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
David Patersond6babc52014-10-14 00:11:56 -040017from tempest import clients
David Patersonce781492014-09-18 01:07:01 -040018from tempest import config
19from tempest.openstack.common import log as logging
20from tempest import test
21
22LOG = logging.getLogger(__name__)
23CONF = config.CONF
24
David Patersonce781492014-09-18 01:07:01 -040025CONF_FLAVORS = None
26CONF_IMAGES = None
David Patersond6babc52014-10-14 00:11:56 -040027CONF_NETWORKS = []
28CONF_PRIV_NETWORK_NAME = None
29CONF_PUB_NETWORK = None
30CONF_PUB_ROUTER = None
31CONF_TENANTS = None
32CONF_USERS = None
David Patersonce781492014-09-18 01:07:01 -040033
34IS_CEILOMETER = None
35IS_CINDER = None
36IS_GLANCE = None
37IS_HEAT = None
38IS_NEUTRON = None
39IS_NOVA = None
40
41
42def init_conf():
David Patersonce781492014-09-18 01:07:01 -040043 global CONF_FLAVORS
44 global CONF_IMAGES
David Patersond6babc52014-10-14 00:11:56 -040045 global CONF_NETWORKS
46 global CONF_PRIV_NETWORK
47 global CONF_PRIV_NETWORK_NAME
48 global CONF_PUB_NETWORK
49 global CONF_PUB_ROUTER
50 global CONF_TENANTS
51 global CONF_USERS
David Patersonce781492014-09-18 01:07:01 -040052 global IS_CEILOMETER
53 global IS_CINDER
54 global IS_GLANCE
55 global IS_HEAT
56 global IS_NEUTRON
57 global IS_NOVA
58
David Patersonce781492014-09-18 01:07:01 -040059 IS_CEILOMETER = CONF.service_available.ceilometer
60 IS_CINDER = CONF.service_available.cinder
61 IS_GLANCE = CONF.service_available.glance
62 IS_HEAT = CONF.service_available.heat
63 IS_NEUTRON = CONF.service_available.neutron
64 IS_NOVA = CONF.service_available.nova
65
David Patersond6babc52014-10-14 00:11:56 -040066 CONF_FLAVORS = [CONF.compute.flavor_ref, CONF.compute.flavor_ref_alt]
67 CONF_IMAGES = [CONF.compute.image_ref, CONF.compute.image_ref_alt]
68 CONF_PRIV_NETWORK_NAME = CONF.compute.fixed_network_name
69 CONF_PUB_NETWORK = CONF.network.public_network_id
70 CONF_PUB_ROUTER = CONF.network.public_router_id
71 CONF_TENANTS = [CONF.identity.admin_tenant_name,
72 CONF.identity.tenant_name,
73 CONF.identity.alt_tenant_name]
74 CONF_USERS = [CONF.identity.admin_username, CONF.identity.username,
75 CONF.identity.alt_username]
76
77 if IS_NEUTRON:
78 CONF_PRIV_NETWORK = _get_priv_net_id(CONF.compute.fixed_network_name,
79 CONF.identity.tenant_name)
80 CONF_NETWORKS = [CONF_PUB_NETWORK, CONF_PRIV_NETWORK]
81
82
83def _get_priv_net_id(prv_net_name, tenant_name):
84 am = clients.AdminManager()
85 net_cl = am.network_client
86 id_cl = am.identity_client
87
David Kranz34e88122014-12-11 15:24:05 -050088 networks = net_cl.list_networks()
David Patersond6babc52014-10-14 00:11:56 -040089 tenant = id_cl.get_tenant_by_name(tenant_name)
90 t_id = tenant['id']
91 n_id = None
92 for net in networks['networks']:
93 if (net['tenant_id'] == t_id and net['name'] == prv_net_name):
94 n_id = net['id']
95 break
96 return n_id
97
David Patersonce781492014-09-18 01:07:01 -040098
99class BaseService(object):
100 def __init__(self, kwargs):
101 self.client = None
102 for key, value in kwargs.items():
103 setattr(self, key, value)
104
105 def _filter_by_tenant_id(self, item_list):
106 if (item_list is None
107 or len(item_list) == 0
108 or not hasattr(self, 'tenant_id')
109 or self.tenant_id is None
110 or 'tenant_id' not in item_list[0]):
111 return item_list
112
David Patersond6babc52014-10-14 00:11:56 -0400113 return [item for item in item_list
114 if item['tenant_id'] == self.tenant_id]
David Patersonce781492014-09-18 01:07:01 -0400115
116 def list(self):
117 pass
118
119 def delete(self):
120 pass
121
122 def dry_run(self):
123 pass
124
125 def save_state(self):
126 pass
127
128 def run(self):
129 if self.is_dry_run:
130 self.dry_run()
131 elif self.is_save_state:
132 self.save_state()
133 else:
134 self.delete()
135
136
137class SnapshotService(BaseService):
138
139 def __init__(self, manager, **kwargs):
140 super(SnapshotService, self).__init__(kwargs)
141 self.client = manager.snapshots_client
142
143 def list(self):
144 client = self.client
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000145 snaps = client.list_snapshots()
David Patersonce781492014-09-18 01:07:01 -0400146 LOG.debug("List count, %s Snapshots" % len(snaps))
147 return snaps
148
149 def delete(self):
150 snaps = self.list()
151 client = self.client
152 for snap in snaps:
153 try:
154 client.delete_snapshot(snap['id'])
155 except Exception as e:
156 LOG.exception("Delete Snapshot exception: %s" % e)
157 pass
158
159 def dry_run(self):
160 snaps = self.list()
161 self.data['snapshots'] = snaps
162
163
164class ServerService(BaseService):
165 def __init__(self, manager, **kwargs):
166 super(ServerService, self).__init__(kwargs)
167 self.client = manager.servers_client
168
169 def list(self):
170 client = self.client
171 _, servers_body = client.list_servers()
172 servers = servers_body['servers']
173 LOG.debug("List count, %s Servers" % len(servers))
174 return servers
175
176 def delete(self):
177 client = self.client
178 servers = self.list()
179 for server in servers:
180 try:
181 client.delete_server(server['id'])
182 except Exception as e:
183 LOG.exception("Delete Server exception: %s" % e)
184 pass
185
186 def dry_run(self):
187 servers = self.list()
188 self.data['servers'] = servers
189
190
191class ServerGroupService(ServerService):
192
193 def list(self):
194 client = self.client
195 _, sgs = client.list_server_groups()
196 LOG.debug("List count, %s Server Groups" % len(sgs))
197 return sgs
198
199 def delete(self):
200 client = self.client
201 sgs = self.list()
202 for sg in sgs:
203 try:
204 client.delete_server_group(sg['id'])
205 except Exception as e:
206 LOG.exception("Delete Server Group exception: %s" % e)
207 pass
208
209 def dry_run(self):
210 sgs = self.list()
211 self.data['server_groups'] = sgs
212
213
214class StackService(BaseService):
215 def __init__(self, manager, **kwargs):
216 super(StackService, self).__init__(kwargs)
217 self.client = manager.orchestration_client
218
219 def list(self):
220 client = self.client
David Kranz8ad924b2015-01-16 16:50:18 -0500221 stacks = client.list_stacks()
David Patersonce781492014-09-18 01:07:01 -0400222 LOG.debug("List count, %s Stacks" % len(stacks))
223 return stacks
224
225 def delete(self):
226 client = self.client
227 stacks = self.list()
228 for stack in stacks:
229 try:
230 client.delete_stack(stack['id'])
231 except Exception as e:
232 LOG.exception("Delete Stack exception: %s " % e)
233 pass
234
235 def dry_run(self):
236 stacks = self.list()
237 self.data['stacks'] = stacks
238
239
240class KeyPairService(BaseService):
241 def __init__(self, manager, **kwargs):
242 super(KeyPairService, self).__init__(kwargs)
243 self.client = manager.keypairs_client
244
245 def list(self):
246 client = self.client
247 _, keypairs = client.list_keypairs()
248 LOG.debug("List count, %s Keypairs" % len(keypairs))
249 return keypairs
250
251 def delete(self):
252 client = self.client
253 keypairs = self.list()
254 for k in keypairs:
255 try:
256 name = k['keypair']['name']
257 client.delete_keypair(name)
258 except Exception as e:
259 LOG.exception("Delete Keypairs exception: %s" % e)
260 pass
261
262 def dry_run(self):
263 keypairs = self.list()
264 self.data['keypairs'] = keypairs
265
266
267class SecurityGroupService(BaseService):
268 def __init__(self, manager, **kwargs):
269 super(SecurityGroupService, self).__init__(kwargs)
270 self.client = manager.security_groups_client
271
272 def list(self):
273 client = self.client
274 _, secgrps = client.list_security_groups()
275 secgrp_del = [grp for grp in secgrps if grp['name'] != 'default']
276 LOG.debug("List count, %s Security Groups" % len(secgrp_del))
277 return secgrp_del
278
279 def delete(self):
280 client = self.client
281 secgrp_del = self.list()
282 for g in secgrp_del:
283 try:
284 client.delete_security_group(g['id'])
285 except Exception as e:
286 LOG.exception("Delete Security Groups exception: %s" % e)
287
288 def dry_run(self):
289 secgrp_del = self.list()
290 self.data['security_groups'] = secgrp_del
291
292
293class FloatingIpService(BaseService):
294 def __init__(self, manager, **kwargs):
295 super(FloatingIpService, self).__init__(kwargs)
296 self.client = manager.floating_ips_client
297
298 def list(self):
299 client = self.client
300 _, floating_ips = client.list_floating_ips()
301 LOG.debug("List count, %s Floating IPs" % len(floating_ips))
302 return floating_ips
303
304 def delete(self):
305 client = self.client
306 floating_ips = self.list()
307 for f in floating_ips:
308 try:
309 client.delete_floating_ip(f['id'])
310 except Exception as e:
311 LOG.exception("Delete Floating IPs exception: %s" % e)
312 pass
313
314 def dry_run(self):
315 floating_ips = self.list()
316 self.data['floating_ips'] = floating_ips
317
318
319class VolumeService(BaseService):
320 def __init__(self, manager, **kwargs):
321 super(VolumeService, self).__init__(kwargs)
322 self.client = manager.volumes_client
323
324 def list(self):
325 client = self.client
Joseph Lanoux6809bab2014-12-18 14:57:18 +0000326 vols = client.list_volumes()
David Patersonce781492014-09-18 01:07:01 -0400327 LOG.debug("List count, %s Volumes" % len(vols))
328 return vols
329
330 def delete(self):
331 client = self.client
332 vols = self.list()
333 for v in vols:
334 try:
335 client.delete_volume(v['id'])
336 except Exception as e:
337 LOG.exception("Delete Volume exception: %s" % e)
338 pass
339
340 def dry_run(self):
341 vols = self.list()
342 self.data['volumes'] = vols
343
344
345# Begin network service classes
346class NetworkService(BaseService):
347 def __init__(self, manager, **kwargs):
348 super(NetworkService, self).__init__(kwargs)
349 self.client = manager.network_client
350
David Patersond6babc52014-10-14 00:11:56 -0400351 def _filter_by_conf_networks(self, item_list):
352 if not item_list or not all(('network_id' in i for i in item_list)):
353 return item_list
354
355 return [item for item in item_list if item['network_id']
356 not in CONF_NETWORKS]
357
David Patersonce781492014-09-18 01:07:01 -0400358 def list(self):
359 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500360 networks = client.list_networks()
David Patersonce781492014-09-18 01:07:01 -0400361 networks = self._filter_by_tenant_id(networks['networks'])
362 # filter out networks declared in tempest.conf
363 if self.is_preserve:
364 networks = [network for network in networks
David Patersond6babc52014-10-14 00:11:56 -0400365 if network['id'] not in CONF_NETWORKS]
David Patersonce781492014-09-18 01:07:01 -0400366 LOG.debug("List count, %s Networks" % networks)
367 return networks
368
369 def delete(self):
370 client = self.client
371 networks = self.list()
372 for n in networks:
373 try:
374 client.delete_network(n['id'])
375 except Exception as e:
376 LOG.exception("Delete Network exception: %s" % e)
377 pass
378
379 def dry_run(self):
380 networks = self.list()
381 self.data['networks'] = networks
382
383
384class NetworkIpSecPolicyService(NetworkService):
385
386 def list(self):
387 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500388 ipsecpols = client.list_ipsecpolicies()
David Patersonce781492014-09-18 01:07:01 -0400389 ipsecpols = ipsecpols['ipsecpolicies']
390 ipsecpols = self._filter_by_tenant_id(ipsecpols)
391 LOG.debug("List count, %s IP Security Policies" % len(ipsecpols))
392 return ipsecpols
393
394 def delete(self):
395 client = self.client
396 ipsecpols = self.list()
397 for ipsecpol in ipsecpols:
398 try:
399 client.delete_ipsecpolicy(ipsecpol['id'])
400 except Exception as e:
401 LOG.exception("Delete IP Securty Policy exception: %s" % e)
402 pass
403
404 def dry_run(self):
405 ipsecpols = self.list()
406 self.data['ip_security_policies'] = ipsecpols
407
408
409class NetworkFwPolicyService(NetworkService):
410
411 def list(self):
412 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500413 fwpols = client.list_firewall_policies()
David Patersonce781492014-09-18 01:07:01 -0400414 fwpols = fwpols['firewall_policies']
415 fwpols = self._filter_by_tenant_id(fwpols)
416 LOG.debug("List count, %s Firewall Policies" % len(fwpols))
417 return fwpols
418
419 def delete(self):
420 client = self.client
421 fwpols = self.list()
422 for fwpol in fwpols:
423 try:
424 client.delete_firewall_policy(fwpol['id'])
425 except Exception as e:
426 LOG.exception("Delete Firewall Policy exception: %s" % e)
427 pass
428
429 def dry_run(self):
430 fwpols = self.list()
431 self.data['firewall_policies'] = fwpols
432
433
434class NetworkFwRulesService(NetworkService):
435
436 def list(self):
437 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500438 fwrules = client.list_firewall_rules()
David Patersonce781492014-09-18 01:07:01 -0400439 fwrules = fwrules['firewall_rules']
440 fwrules = self._filter_by_tenant_id(fwrules)
441 LOG.debug("List count, %s Firewall Rules" % len(fwrules))
442 return fwrules
443
444 def delete(self):
445 client = self.client
446 fwrules = self.list()
447 for fwrule in fwrules:
448 try:
449 client.delete_firewall_rule(fwrule['id'])
450 except Exception as e:
451 LOG.exception("Delete Firewall Rule exception: %s" % e)
452 pass
453
454 def dry_run(self):
455 fwrules = self.list()
456 self.data['firewall_rules'] = fwrules
457
458
459class NetworkIkePolicyService(NetworkService):
460
461 def list(self):
462 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500463 ikepols = client.list_ikepolicies()
David Patersonce781492014-09-18 01:07:01 -0400464 ikepols = ikepols['ikepolicies']
465 ikepols = self._filter_by_tenant_id(ikepols)
466 LOG.debug("List count, %s IKE Policies" % len(ikepols))
467 return ikepols
468
469 def delete(self):
470 client = self.client
471 ikepols = self.list()
472 for ikepol in ikepols:
473 try:
474 client.delete_firewall_rule(ikepol['id'])
475 except Exception as e:
476 LOG.exception("Delete IKE Policy exception: %s" % e)
477 pass
478
479 def dry_run(self):
480 ikepols = self.list()
481 self.data['ike_policies'] = ikepols
482
483
484class NetworkVpnServiceService(NetworkService):
485
486 def list(self):
487 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500488 vpnsrvs = client.list_vpnservices()
David Patersonce781492014-09-18 01:07:01 -0400489 vpnsrvs = vpnsrvs['vpnservices']
490 vpnsrvs = self._filter_by_tenant_id(vpnsrvs)
491 LOG.debug("List count, %s VPN Services" % len(vpnsrvs))
492 return vpnsrvs
493
494 def delete(self):
495 client = self.client
496 vpnsrvs = self.list()
497 for vpnsrv in vpnsrvs:
498 try:
499 client.delete_vpnservice(vpnsrv['id'])
500 except Exception as e:
501 LOG.exception("Delete VPN Service exception: %s" % e)
502 pass
503
504 def dry_run(self):
505 vpnsrvs = self.list()
506 self.data['vpn_services'] = vpnsrvs
507
508
509class NetworkFloatingIpService(NetworkService):
510
511 def list(self):
512 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500513 flips = client.list_floatingips()
David Patersonce781492014-09-18 01:07:01 -0400514 flips = flips['floatingips']
515 flips = self._filter_by_tenant_id(flips)
516 LOG.debug("List count, %s Network Floating IPs" % len(flips))
517 return flips
518
519 def delete(self):
520 client = self.client
521 flips = self.list()
522 for flip in flips:
523 try:
524 client.delete_floatingip(flip['id'])
525 except Exception as e:
526 LOG.exception("Delete Network Floating IP exception: %s" % e)
527 pass
528
529 def dry_run(self):
530 flips = self.list()
531 self.data['floating_ips'] = flips
532
533
534class NetworkRouterService(NetworkService):
535
536 def list(self):
537 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500538 routers = client.list_routers()
David Patersonce781492014-09-18 01:07:01 -0400539 routers = routers['routers']
540 routers = self._filter_by_tenant_id(routers)
541 if self.is_preserve:
542 routers = [router for router in routers
543 if router['id'] != CONF_PUB_ROUTER]
544
545 LOG.debug("List count, %s Routers" % len(routers))
546 return routers
547
548 def delete(self):
549 client = self.client
550 routers = self.list()
551 for router in routers:
552 try:
553 rid = router['id']
David Kranz34e88122014-12-11 15:24:05 -0500554 ports = client.list_router_interfaces(rid)
David Patersonce781492014-09-18 01:07:01 -0400555 ports = ports['ports']
556 for port in ports:
557 subid = port['fixed_ips'][0]['subnet_id']
558 client.remove_router_interface_with_subnet_id(rid, subid)
David Patersond6babc52014-10-14 00:11:56 -0400559 client.delete_router(rid)
David Patersonce781492014-09-18 01:07:01 -0400560 except Exception as e:
561 LOG.exception("Delete Router exception: %s" % e)
562 pass
563
564 def dry_run(self):
565 routers = self.list()
566 self.data['routers'] = routers
567
568
569class NetworkHealthMonitorService(NetworkService):
570
571 def list(self):
572 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500573 hms = client.list_health_monitors()
David Patersonce781492014-09-18 01:07:01 -0400574 hms = hms['health_monitors']
575 hms = self._filter_by_tenant_id(hms)
576 LOG.debug("List count, %s Health Monitors" % len(hms))
577 return hms
578
579 def delete(self):
580 client = self.client
581 hms = self.list()
582 for hm in hms:
583 try:
584 client.delete_health_monitor(hm['id'])
585 except Exception as e:
586 LOG.exception("Delete Health Monitor exception: %s" % e)
587 pass
588
589 def dry_run(self):
590 hms = self.list()
591 self.data['health_monitors'] = hms
592
593
594class NetworkMemberService(NetworkService):
595
596 def list(self):
597 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500598 members = client.list_members()
David Patersonce781492014-09-18 01:07:01 -0400599 members = members['members']
600 members = self._filter_by_tenant_id(members)
601 LOG.debug("List count, %s Members" % len(members))
602 return members
603
604 def delete(self):
605 client = self.client
606 members = self.list()
607 for member in members:
608 try:
609 client.delete_member(member['id'])
610 except Exception as e:
611 LOG.exception("Delete Member exception: %s" % e)
612 pass
613
614 def dry_run(self):
615 members = self.list()
616 self.data['members'] = members
617
618
619class NetworkVipService(NetworkService):
620
621 def list(self):
622 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500623 vips = client.list_vips()
David Patersonce781492014-09-18 01:07:01 -0400624 vips = vips['vips']
625 vips = self._filter_by_tenant_id(vips)
626 LOG.debug("List count, %s VIPs" % len(vips))
627 return vips
628
629 def delete(self):
630 client = self.client
631 vips = self.list()
632 for vip in vips:
633 try:
634 client.delete_vip(vip['id'])
635 except Exception as e:
636 LOG.exception("Delete VIP exception: %s" % e)
637 pass
638
639 def dry_run(self):
640 vips = self.list()
641 self.data['vips'] = vips
642
643
644class NetworkPoolService(NetworkService):
645
646 def list(self):
647 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500648 pools = client.list_pools()
David Patersonce781492014-09-18 01:07:01 -0400649 pools = pools['pools']
650 pools = self._filter_by_tenant_id(pools)
651 LOG.debug("List count, %s Pools" % len(pools))
652 return pools
653
654 def delete(self):
655 client = self.client
656 pools = self.list()
657 for pool in pools:
658 try:
659 client.delete_pool(pool['id'])
660 except Exception as e:
661 LOG.exception("Delete Pool exception: %s" % e)
662 pass
663
664 def dry_run(self):
665 pools = self.list()
666 self.data['pools'] = pools
667
668
669class NetworMeteringLabelRuleService(NetworkService):
670
671 def list(self):
672 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500673 rules = client.list_metering_label_rules()
David Patersonce781492014-09-18 01:07:01 -0400674 rules = rules['metering_label_rules']
675 rules = self._filter_by_tenant_id(rules)
676 LOG.debug("List count, %s Metering Label Rules" % len(rules))
677 return rules
678
679 def delete(self):
680 client = self.client
681 rules = self.list()
682 for rule in rules:
683 try:
684 client.delete_metering_label_rule(rule['id'])
685 except Exception as e:
686 LOG.exception("Delete Metering Label Rule exception: %s" % e)
687 pass
688
689 def dry_run(self):
690 rules = self.list()
691 self.data['rules'] = rules
692
693
694class NetworMeteringLabelService(NetworkService):
695
696 def list(self):
697 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500698 labels = client.list_metering_labels()
David Patersonce781492014-09-18 01:07:01 -0400699 labels = labels['metering_labels']
700 labels = self._filter_by_tenant_id(labels)
701 LOG.debug("List count, %s Metering Labels" % len(labels))
702 return labels
703
704 def delete(self):
705 client = self.client
706 labels = self.list()
707 for label in labels:
708 try:
709 client.delete_metering_label(label['id'])
710 except Exception as e:
711 LOG.exception("Delete Metering Label exception: %s" % e)
712 pass
713
714 def dry_run(self):
715 labels = self.list()
716 self.data['labels'] = labels
717
718
719class NetworkPortService(NetworkService):
720
721 def list(self):
722 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500723 ports = client.list_ports()
David Patersonce781492014-09-18 01:07:01 -0400724 ports = ports['ports']
725 ports = self._filter_by_tenant_id(ports)
David Patersond6babc52014-10-14 00:11:56 -0400726 if self.is_preserve:
727 ports = self._filter_by_conf_networks(ports)
David Patersonce781492014-09-18 01:07:01 -0400728 LOG.debug("List count, %s Ports" % len(ports))
729 return ports
730
731 def delete(self):
732 client = self.client
733 ports = self.list()
734 for port in ports:
735 try:
736 client.delete_port(port['id'])
737 except Exception as e:
738 LOG.exception("Delete Port exception: %s" % e)
739 pass
740
741 def dry_run(self):
742 ports = self.list()
743 self.data['ports'] = ports
744
745
746class NetworkSubnetService(NetworkService):
747
748 def list(self):
749 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500750 subnets = client.list_subnets()
David Patersonce781492014-09-18 01:07:01 -0400751 subnets = subnets['subnets']
752 subnets = self._filter_by_tenant_id(subnets)
David Patersond6babc52014-10-14 00:11:56 -0400753 if self.is_preserve:
754 subnets = self._filter_by_conf_networks(subnets)
David Patersonce781492014-09-18 01:07:01 -0400755 LOG.debug("List count, %s Subnets" % len(subnets))
756 return subnets
757
758 def delete(self):
759 client = self.client
760 subnets = self.list()
761 for subnet in subnets:
762 try:
763 client.delete_subnet(subnet['id'])
764 except Exception as e:
765 LOG.exception("Delete Subnet exception: %s" % e)
766 pass
767
768 def dry_run(self):
769 subnets = self.list()
770 self.data['subnets'] = subnets
771
772
773# Telemetry services
774class TelemetryAlarmService(BaseService):
775 def __init__(self, manager, **kwargs):
776 super(TelemetryAlarmService, self).__init__(kwargs)
777 self.client = manager.telemetry_client
778
779 def list(self):
780 client = self.client
781 _, alarms = client.list_alarms()
782 LOG.debug("List count, %s Alarms" % len(alarms))
783 return alarms
784
785 def delete(self):
786 client = self.client
787 alarms = self.list()
788 for alarm in alarms:
789 try:
790 client.delete_alarm(alarm['id'])
791 except Exception as e:
792 LOG.exception("Delete Alarms exception: %s" % e)
793 pass
794
795 def dry_run(self):
796 alarms = self.list()
797 self.data['alarms'] = alarms
798
799
800# begin global services
801class FlavorService(BaseService):
802 def __init__(self, manager, **kwargs):
803 super(FlavorService, self).__init__(kwargs)
804 self.client = manager.flavors_client
805
806 def list(self):
807 client = self.client
808 _, flavors = client.list_flavors({"is_public": None})
809 if not self.is_save_state:
810 # recreate list removing saved flavors
811 flavors = [flavor for flavor in flavors if flavor['id']
812 not in self.saved_state_json['flavors'].keys()]
813
814 if self.is_preserve:
815 flavors = [flavor for flavor in flavors
816 if flavor['id'] not in CONF_FLAVORS]
817 LOG.debug("List count, %s Flavors after reconcile" % len(flavors))
818 return flavors
819
820 def delete(self):
821 client = self.client
822 flavors = self.list()
823 for flavor in flavors:
824 try:
825 client.delete_flavor(flavor['id'])
826 except Exception as e:
827 LOG.exception("Delete Flavor exception: %s" % e)
828 pass
829
830 def dry_run(self):
831 flavors = self.list()
832 self.data['flavors'] = flavors
833
834 def save_state(self):
835 flavors = self.list()
836 flavor_data = self.data['flavors'] = {}
837 for flavor in flavors:
838 flavor_data[flavor['id']] = flavor['name']
839
840
841class ImageService(BaseService):
842 def __init__(self, manager, **kwargs):
843 super(ImageService, self).__init__(kwargs)
844 self.client = manager.images_client
845
846 def list(self):
847 client = self.client
David Kranz34f18782015-01-06 13:43:55 -0500848 images = client.list_images({"all_tenants": True})
David Patersonce781492014-09-18 01:07:01 -0400849 if not self.is_save_state:
850 images = [image for image in images if image['id']
851 not in self.saved_state_json['images'].keys()]
852 if self.is_preserve:
853 images = [image for image in images
854 if image['id'] not in CONF_IMAGES]
855 LOG.debug("List count, %s Images after reconcile" % len(images))
856 return images
857
858 def delete(self):
859 client = self.client
860 images = self.list()
861 for image in images:
862 try:
863 client.delete_image(image['id'])
864 except Exception as e:
865 LOG.exception("Delete Image exception: %s" % e)
866 pass
867
868 def dry_run(self):
869 images = self.list()
870 self.data['images'] = images
871
872 def save_state(self):
873 images = self.list()
874 image_data = self.data['images'] = {}
875 for image in images:
876 image_data[image['id']] = image['name']
877
878
879class IdentityService(BaseService):
880 def __init__(self, manager, **kwargs):
881 super(IdentityService, self).__init__(kwargs)
882 self.client = manager.identity_client
883
884
885class UserService(IdentityService):
886
887 def list(self):
888 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -0500889 users = client.get_users()
David Patersonce781492014-09-18 01:07:01 -0400890
891 if not self.is_save_state:
892 users = [user for user in users if user['id']
893 not in self.saved_state_json['users'].keys()]
894
895 if self.is_preserve:
896 users = [user for user in users if user['name']
897 not in CONF_USERS]
898
899 elif not self.is_save_state: # Never delete admin user
900 users = [user for user in users if user['name'] !=
901 CONF.identity.admin_username]
902
903 LOG.debug("List count, %s Users after reconcile" % len(users))
904 return users
905
906 def delete(self):
907 client = self.client
908 users = self.list()
909 for user in users:
910 try:
911 client.delete_user(user['id'])
912 except Exception as e:
913 LOG.exception("Delete User exception: %s" % e)
914 pass
915
916 def dry_run(self):
917 users = self.list()
918 self.data['users'] = users
919
920 def save_state(self):
921 users = self.list()
922 user_data = self.data['users'] = {}
923 for user in users:
924 user_data[user['id']] = user['name']
925
926
927class RoleService(IdentityService):
928
929 def list(self):
930 client = self.client
931 try:
David Kranzb7afa922014-12-30 10:56:26 -0500932 roles = client.list_roles()
David Patersonce781492014-09-18 01:07:01 -0400933 # reconcile roles with saved state and never list admin role
934 if not self.is_save_state:
935 roles = [role for role in roles if
936 (role['id'] not in
937 self.saved_state_json['roles'].keys()
938 and role['name'] != CONF.identity.admin_role)]
939 LOG.debug("List count, %s Roles after reconcile" % len(roles))
940 return roles
941 except Exception as ex:
942 LOG.exception("Cannot retrieve Roles, exception: %s" % ex)
943 return []
944
945 def delete(self):
946 client = self.client
947 roles = self.list()
948 for role in roles:
949 try:
950 client.delete_role(role['id'])
951 except Exception as e:
952 LOG.exception("Delete Role exception: %s" % e)
953 pass
954
955 def dry_run(self):
956 roles = self.list()
957 self.data['roles'] = roles
958
959 def save_state(self):
960 roles = self.list()
961 role_data = self.data['roles'] = {}
962 for role in roles:
963 role_data[role['id']] = role['name']
964
965
966class TenantService(IdentityService):
967
968 def list(self):
969 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -0500970 tenants = client.list_tenants()
David Patersonce781492014-09-18 01:07:01 -0400971 if not self.is_save_state:
972 tenants = [tenant for tenant in tenants if (tenant['id']
973 not in self.saved_state_json['tenants'].keys()
974 and tenant['name'] != CONF.identity.admin_tenant_name)]
975
976 if self.is_preserve:
977 tenants = [tenant for tenant in tenants if tenant['name']
978 not in CONF_TENANTS]
979
980 LOG.debug("List count, %s Tenants after reconcile" % len(tenants))
981 return tenants
982
983 def delete(self):
984 client = self.client
985 tenants = self.list()
986 for tenant in tenants:
987 try:
988 client.delete_tenant(tenant['id'])
989 except Exception as e:
990 LOG.exception("Delete Tenant exception: %s" % e)
991 pass
992
993 def dry_run(self):
994 tenants = self.list()
995 self.data['tenants'] = tenants
996
997 def save_state(self):
998 tenants = self.list()
999 tenant_data = self.data['tenants'] = {}
1000 for tenant in tenants:
1001 tenant_data[tenant['id']] = tenant['name']
1002
1003
1004class DomainService(BaseService):
1005
1006 def __init__(self, manager, **kwargs):
1007 super(DomainService, self).__init__(kwargs)
1008 self.client = manager.identity_v3_client
1009
1010 def list(self):
1011 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -05001012 domains = client.list_domains()
David Patersonce781492014-09-18 01:07:01 -04001013 if not self.is_save_state:
1014 domains = [domain for domain in domains if domain['id']
1015 not in self.saved_state_json['domains'].keys()]
1016
1017 LOG.debug("List count, %s Domains after reconcile" % len(domains))
1018 return domains
1019
1020 def delete(self):
1021 client = self.client
1022 domains = self.list()
1023 for domain in domains:
1024 try:
1025 client.update_domain(domain['id'], enabled=False)
1026 client.delete_domain(domain['id'])
1027 except Exception as e:
1028 LOG.exception("Delete Domain exception: %s" % e)
1029 pass
1030
1031 def dry_run(self):
1032 domains = self.list()
1033 self.data['domains'] = domains
1034
1035 def save_state(self):
1036 domains = self.list()
1037 domain_data = self.data['domains'] = {}
1038 for domain in domains:
1039 domain_data[domain['id']] = domain['name']
1040
1041
1042def get_tenant_cleanup_services():
1043 tenant_services = []
1044
1045 if IS_CEILOMETER:
1046 tenant_services.append(TelemetryAlarmService)
1047 if IS_NOVA:
1048 tenant_services.append(ServerService)
1049 tenant_services.append(KeyPairService)
1050 tenant_services.append(SecurityGroupService)
1051 tenant_services.append(ServerGroupService)
1052 if not IS_NEUTRON:
1053 tenant_services.append(FloatingIpService)
1054 if IS_HEAT:
1055 tenant_services.append(StackService)
1056 if IS_NEUTRON:
1057 if test.is_extension_enabled('vpnaas', 'network'):
1058 tenant_services.append(NetworkIpSecPolicyService)
1059 tenant_services.append(NetworkIkePolicyService)
1060 tenant_services.append(NetworkVpnServiceService)
1061 if test.is_extension_enabled('fwaas', 'network'):
1062 tenant_services.append(NetworkFwPolicyService)
1063 tenant_services.append(NetworkFwRulesService)
1064 if test.is_extension_enabled('lbaas', 'network'):
1065 tenant_services.append(NetworkHealthMonitorService)
1066 tenant_services.append(NetworkMemberService)
1067 tenant_services.append(NetworkVipService)
1068 tenant_services.append(NetworkPoolService)
1069 if test.is_extension_enabled('metering', 'network'):
1070 tenant_services.append(NetworMeteringLabelRuleService)
1071 tenant_services.append(NetworMeteringLabelService)
1072 tenant_services.append(NetworkRouterService)
1073 tenant_services.append(NetworkFloatingIpService)
1074 tenant_services.append(NetworkPortService)
1075 tenant_services.append(NetworkSubnetService)
1076 tenant_services.append(NetworkService)
1077 if IS_CINDER:
1078 tenant_services.append(SnapshotService)
1079 tenant_services.append(VolumeService)
1080 return tenant_services
1081
1082
1083def get_global_cleanup_services():
1084 global_services = []
1085 if IS_NOVA:
1086 global_services.append(FlavorService)
1087 if IS_GLANCE:
1088 global_services.append(ImageService)
1089 global_services.append(UserService)
1090 global_services.append(TenantService)
1091 global_services.append(DomainService)
1092 global_services.append(RoleService)
1093 return global_services