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