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