blob: 1ad12ebb9acd35f7d9b985fc14845a78951891aa [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
346# Begin network service classes
347class NetworkService(BaseService):
348 def __init__(self, manager, **kwargs):
349 super(NetworkService, self).__init__(kwargs)
350 self.client = manager.network_client
351
David Patersond6babc52014-10-14 00:11:56 -0400352 def _filter_by_conf_networks(self, item_list):
353 if not item_list or not all(('network_id' in i for i in item_list)):
354 return item_list
355
356 return [item for item in item_list if item['network_id']
357 not in CONF_NETWORKS]
358
David Patersonce781492014-09-18 01:07:01 -0400359 def list(self):
360 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500361 networks = client.list_networks()
David Patersonce781492014-09-18 01:07:01 -0400362 networks = self._filter_by_tenant_id(networks['networks'])
363 # filter out networks declared in tempest.conf
364 if self.is_preserve:
365 networks = [network for network in networks
David Patersond6babc52014-10-14 00:11:56 -0400366 if network['id'] not in CONF_NETWORKS]
David Patersonce781492014-09-18 01:07:01 -0400367 LOG.debug("List count, %s Networks" % networks)
368 return networks
369
370 def delete(self):
371 client = self.client
372 networks = self.list()
373 for n in networks:
374 try:
375 client.delete_network(n['id'])
376 except Exception as e:
377 LOG.exception("Delete Network exception: %s" % e)
378 pass
379
380 def dry_run(self):
381 networks = self.list()
382 self.data['networks'] = networks
383
384
385class NetworkIpSecPolicyService(NetworkService):
386
387 def list(self):
388 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500389 ipsecpols = client.list_ipsecpolicies()
David Patersonce781492014-09-18 01:07:01 -0400390 ipsecpols = ipsecpols['ipsecpolicies']
391 ipsecpols = self._filter_by_tenant_id(ipsecpols)
392 LOG.debug("List count, %s IP Security Policies" % len(ipsecpols))
393 return ipsecpols
394
395 def delete(self):
396 client = self.client
397 ipsecpols = self.list()
398 for ipsecpol in ipsecpols:
399 try:
400 client.delete_ipsecpolicy(ipsecpol['id'])
401 except Exception as e:
402 LOG.exception("Delete IP Securty Policy exception: %s" % e)
403 pass
404
405 def dry_run(self):
406 ipsecpols = self.list()
407 self.data['ip_security_policies'] = ipsecpols
408
409
410class NetworkFwPolicyService(NetworkService):
411
412 def list(self):
413 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500414 fwpols = client.list_firewall_policies()
David Patersonce781492014-09-18 01:07:01 -0400415 fwpols = fwpols['firewall_policies']
416 fwpols = self._filter_by_tenant_id(fwpols)
417 LOG.debug("List count, %s Firewall Policies" % len(fwpols))
418 return fwpols
419
420 def delete(self):
421 client = self.client
422 fwpols = self.list()
423 for fwpol in fwpols:
424 try:
425 client.delete_firewall_policy(fwpol['id'])
426 except Exception as e:
427 LOG.exception("Delete Firewall Policy exception: %s" % e)
428 pass
429
430 def dry_run(self):
431 fwpols = self.list()
432 self.data['firewall_policies'] = fwpols
433
434
435class NetworkFwRulesService(NetworkService):
436
437 def list(self):
438 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500439 fwrules = client.list_firewall_rules()
David Patersonce781492014-09-18 01:07:01 -0400440 fwrules = fwrules['firewall_rules']
441 fwrules = self._filter_by_tenant_id(fwrules)
442 LOG.debug("List count, %s Firewall Rules" % len(fwrules))
443 return fwrules
444
445 def delete(self):
446 client = self.client
447 fwrules = self.list()
448 for fwrule in fwrules:
449 try:
450 client.delete_firewall_rule(fwrule['id'])
451 except Exception as e:
452 LOG.exception("Delete Firewall Rule exception: %s" % e)
453 pass
454
455 def dry_run(self):
456 fwrules = self.list()
457 self.data['firewall_rules'] = fwrules
458
459
460class NetworkIkePolicyService(NetworkService):
461
462 def list(self):
463 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500464 ikepols = client.list_ikepolicies()
David Patersonce781492014-09-18 01:07:01 -0400465 ikepols = ikepols['ikepolicies']
466 ikepols = self._filter_by_tenant_id(ikepols)
467 LOG.debug("List count, %s IKE Policies" % len(ikepols))
468 return ikepols
469
470 def delete(self):
471 client = self.client
472 ikepols = self.list()
473 for ikepol in ikepols:
474 try:
475 client.delete_firewall_rule(ikepol['id'])
476 except Exception as e:
477 LOG.exception("Delete IKE Policy exception: %s" % e)
478 pass
479
480 def dry_run(self):
481 ikepols = self.list()
482 self.data['ike_policies'] = ikepols
483
484
485class NetworkVpnServiceService(NetworkService):
486
487 def list(self):
488 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500489 vpnsrvs = client.list_vpnservices()
David Patersonce781492014-09-18 01:07:01 -0400490 vpnsrvs = vpnsrvs['vpnservices']
491 vpnsrvs = self._filter_by_tenant_id(vpnsrvs)
492 LOG.debug("List count, %s VPN Services" % len(vpnsrvs))
493 return vpnsrvs
494
495 def delete(self):
496 client = self.client
497 vpnsrvs = self.list()
498 for vpnsrv in vpnsrvs:
499 try:
500 client.delete_vpnservice(vpnsrv['id'])
501 except Exception as e:
502 LOG.exception("Delete VPN Service exception: %s" % e)
503 pass
504
505 def dry_run(self):
506 vpnsrvs = self.list()
507 self.data['vpn_services'] = vpnsrvs
508
509
510class NetworkFloatingIpService(NetworkService):
511
512 def list(self):
513 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500514 flips = client.list_floatingips()
David Patersonce781492014-09-18 01:07:01 -0400515 flips = flips['floatingips']
516 flips = self._filter_by_tenant_id(flips)
517 LOG.debug("List count, %s Network Floating IPs" % len(flips))
518 return flips
519
520 def delete(self):
521 client = self.client
522 flips = self.list()
523 for flip in flips:
524 try:
525 client.delete_floatingip(flip['id'])
526 except Exception as e:
527 LOG.exception("Delete Network Floating IP exception: %s" % e)
528 pass
529
530 def dry_run(self):
531 flips = self.list()
532 self.data['floating_ips'] = flips
533
534
535class NetworkRouterService(NetworkService):
536
537 def list(self):
538 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500539 routers = client.list_routers()
David Patersonce781492014-09-18 01:07:01 -0400540 routers = routers['routers']
541 routers = self._filter_by_tenant_id(routers)
542 if self.is_preserve:
543 routers = [router for router in routers
544 if router['id'] != CONF_PUB_ROUTER]
545
546 LOG.debug("List count, %s Routers" % len(routers))
547 return routers
548
549 def delete(self):
550 client = self.client
551 routers = self.list()
552 for router in routers:
553 try:
554 rid = router['id']
David Kranz34e88122014-12-11 15:24:05 -0500555 ports = client.list_router_interfaces(rid)
David Patersonce781492014-09-18 01:07:01 -0400556 ports = ports['ports']
557 for port in ports:
558 subid = port['fixed_ips'][0]['subnet_id']
559 client.remove_router_interface_with_subnet_id(rid, subid)
David Patersond6babc52014-10-14 00:11:56 -0400560 client.delete_router(rid)
David Patersonce781492014-09-18 01:07:01 -0400561 except Exception as e:
562 LOG.exception("Delete Router exception: %s" % e)
563 pass
564
565 def dry_run(self):
566 routers = self.list()
567 self.data['routers'] = routers
568
569
570class NetworkHealthMonitorService(NetworkService):
571
572 def list(self):
573 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500574 hms = client.list_health_monitors()
David Patersonce781492014-09-18 01:07:01 -0400575 hms = hms['health_monitors']
576 hms = self._filter_by_tenant_id(hms)
577 LOG.debug("List count, %s Health Monitors" % len(hms))
578 return hms
579
580 def delete(self):
581 client = self.client
582 hms = self.list()
583 for hm in hms:
584 try:
585 client.delete_health_monitor(hm['id'])
586 except Exception as e:
587 LOG.exception("Delete Health Monitor exception: %s" % e)
588 pass
589
590 def dry_run(self):
591 hms = self.list()
592 self.data['health_monitors'] = hms
593
594
595class NetworkMemberService(NetworkService):
596
597 def list(self):
598 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500599 members = client.list_members()
David Patersonce781492014-09-18 01:07:01 -0400600 members = members['members']
601 members = self._filter_by_tenant_id(members)
602 LOG.debug("List count, %s Members" % len(members))
603 return members
604
605 def delete(self):
606 client = self.client
607 members = self.list()
608 for member in members:
609 try:
610 client.delete_member(member['id'])
611 except Exception as e:
612 LOG.exception("Delete Member exception: %s" % e)
613 pass
614
615 def dry_run(self):
616 members = self.list()
617 self.data['members'] = members
618
619
620class NetworkVipService(NetworkService):
621
622 def list(self):
623 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500624 vips = client.list_vips()
David Patersonce781492014-09-18 01:07:01 -0400625 vips = vips['vips']
626 vips = self._filter_by_tenant_id(vips)
627 LOG.debug("List count, %s VIPs" % len(vips))
628 return vips
629
630 def delete(self):
631 client = self.client
632 vips = self.list()
633 for vip in vips:
634 try:
635 client.delete_vip(vip['id'])
636 except Exception as e:
637 LOG.exception("Delete VIP exception: %s" % e)
638 pass
639
640 def dry_run(self):
641 vips = self.list()
642 self.data['vips'] = vips
643
644
645class NetworkPoolService(NetworkService):
646
647 def list(self):
648 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500649 pools = client.list_pools()
David Patersonce781492014-09-18 01:07:01 -0400650 pools = pools['pools']
651 pools = self._filter_by_tenant_id(pools)
652 LOG.debug("List count, %s Pools" % len(pools))
653 return pools
654
655 def delete(self):
656 client = self.client
657 pools = self.list()
658 for pool in pools:
659 try:
660 client.delete_pool(pool['id'])
661 except Exception as e:
662 LOG.exception("Delete Pool exception: %s" % e)
663 pass
664
665 def dry_run(self):
666 pools = self.list()
667 self.data['pools'] = pools
668
669
670class NetworMeteringLabelRuleService(NetworkService):
671
672 def list(self):
673 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500674 rules = client.list_metering_label_rules()
David Patersonce781492014-09-18 01:07:01 -0400675 rules = rules['metering_label_rules']
676 rules = self._filter_by_tenant_id(rules)
677 LOG.debug("List count, %s Metering Label Rules" % len(rules))
678 return rules
679
680 def delete(self):
681 client = self.client
682 rules = self.list()
683 for rule in rules:
684 try:
685 client.delete_metering_label_rule(rule['id'])
686 except Exception as e:
687 LOG.exception("Delete Metering Label Rule exception: %s" % e)
688 pass
689
690 def dry_run(self):
691 rules = self.list()
692 self.data['rules'] = rules
693
694
695class NetworMeteringLabelService(NetworkService):
696
697 def list(self):
698 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500699 labels = client.list_metering_labels()
David Patersonce781492014-09-18 01:07:01 -0400700 labels = labels['metering_labels']
701 labels = self._filter_by_tenant_id(labels)
702 LOG.debug("List count, %s Metering Labels" % len(labels))
703 return labels
704
705 def delete(self):
706 client = self.client
707 labels = self.list()
708 for label in labels:
709 try:
710 client.delete_metering_label(label['id'])
711 except Exception as e:
712 LOG.exception("Delete Metering Label exception: %s" % e)
713 pass
714
715 def dry_run(self):
716 labels = self.list()
717 self.data['labels'] = labels
718
719
720class NetworkPortService(NetworkService):
721
722 def list(self):
723 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500724 ports = client.list_ports()
David Patersonce781492014-09-18 01:07:01 -0400725 ports = ports['ports']
726 ports = self._filter_by_tenant_id(ports)
David Patersond6babc52014-10-14 00:11:56 -0400727 if self.is_preserve:
728 ports = self._filter_by_conf_networks(ports)
David Patersonce781492014-09-18 01:07:01 -0400729 LOG.debug("List count, %s Ports" % len(ports))
730 return ports
731
732 def delete(self):
733 client = self.client
734 ports = self.list()
735 for port in ports:
736 try:
737 client.delete_port(port['id'])
738 except Exception as e:
739 LOG.exception("Delete Port exception: %s" % e)
740 pass
741
742 def dry_run(self):
743 ports = self.list()
744 self.data['ports'] = ports
745
746
747class NetworkSubnetService(NetworkService):
748
749 def list(self):
750 client = self.client
David Kranz34e88122014-12-11 15:24:05 -0500751 subnets = client.list_subnets()
David Patersonce781492014-09-18 01:07:01 -0400752 subnets = subnets['subnets']
753 subnets = self._filter_by_tenant_id(subnets)
David Patersond6babc52014-10-14 00:11:56 -0400754 if self.is_preserve:
755 subnets = self._filter_by_conf_networks(subnets)
David Patersonce781492014-09-18 01:07:01 -0400756 LOG.debug("List count, %s Subnets" % len(subnets))
757 return subnets
758
759 def delete(self):
760 client = self.client
761 subnets = self.list()
762 for subnet in subnets:
763 try:
764 client.delete_subnet(subnet['id'])
765 except Exception as e:
766 LOG.exception("Delete Subnet exception: %s" % e)
767 pass
768
769 def dry_run(self):
770 subnets = self.list()
771 self.data['subnets'] = subnets
772
773
774# Telemetry services
775class TelemetryAlarmService(BaseService):
776 def __init__(self, manager, **kwargs):
777 super(TelemetryAlarmService, self).__init__(kwargs)
778 self.client = manager.telemetry_client
779
780 def list(self):
781 client = self.client
David Kranz20d06f42015-02-09 14:54:15 -0500782 alarms = client.list_alarms()
David Patersonce781492014-09-18 01:07:01 -0400783 LOG.debug("List count, %s Alarms" % len(alarms))
784 return alarms
785
786 def delete(self):
787 client = self.client
788 alarms = self.list()
789 for alarm in alarms:
790 try:
791 client.delete_alarm(alarm['id'])
792 except Exception as e:
793 LOG.exception("Delete Alarms exception: %s" % e)
794 pass
795
796 def dry_run(self):
797 alarms = self.list()
798 self.data['alarms'] = alarms
799
800
801# begin global services
802class FlavorService(BaseService):
803 def __init__(self, manager, **kwargs):
804 super(FlavorService, self).__init__(kwargs)
805 self.client = manager.flavors_client
806
807 def list(self):
808 client = self.client
David Kranz2fa77b22015-02-09 11:39:50 -0500809 flavors = client.list_flavors({"is_public": None})
David Patersonce781492014-09-18 01:07:01 -0400810 if not self.is_save_state:
811 # recreate list removing saved flavors
812 flavors = [flavor for flavor in flavors if flavor['id']
813 not in self.saved_state_json['flavors'].keys()]
814
815 if self.is_preserve:
816 flavors = [flavor for flavor in flavors
817 if flavor['id'] not in CONF_FLAVORS]
818 LOG.debug("List count, %s Flavors after reconcile" % len(flavors))
819 return flavors
820
821 def delete(self):
822 client = self.client
823 flavors = self.list()
824 for flavor in flavors:
825 try:
826 client.delete_flavor(flavor['id'])
827 except Exception as e:
828 LOG.exception("Delete Flavor exception: %s" % e)
829 pass
830
831 def dry_run(self):
832 flavors = self.list()
833 self.data['flavors'] = flavors
834
835 def save_state(self):
836 flavors = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500837 self.data['flavors'] = {}
David Patersonce781492014-09-18 01:07:01 -0400838 for flavor in flavors:
gordon chungc15f1bc2015-02-23 18:00:41 -0500839 self.data['flavors'][flavor['id']] = flavor['name']
David Patersonce781492014-09-18 01:07:01 -0400840
841
842class ImageService(BaseService):
843 def __init__(self, manager, **kwargs):
844 super(ImageService, self).__init__(kwargs)
845 self.client = manager.images_client
846
847 def list(self):
848 client = self.client
David Kranz34f18782015-01-06 13:43:55 -0500849 images = client.list_images({"all_tenants": True})
David Patersonce781492014-09-18 01:07:01 -0400850 if not self.is_save_state:
851 images = [image for image in images if image['id']
852 not in self.saved_state_json['images'].keys()]
853 if self.is_preserve:
854 images = [image for image in images
855 if image['id'] not in CONF_IMAGES]
856 LOG.debug("List count, %s Images after reconcile" % len(images))
857 return images
858
859 def delete(self):
860 client = self.client
861 images = self.list()
862 for image in images:
863 try:
864 client.delete_image(image['id'])
865 except Exception as e:
866 LOG.exception("Delete Image exception: %s" % e)
867 pass
868
869 def dry_run(self):
870 images = self.list()
871 self.data['images'] = images
872
873 def save_state(self):
874 images = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500875 self.data['images'] = {}
David Patersonce781492014-09-18 01:07:01 -0400876 for image in images:
gordon chungc15f1bc2015-02-23 18:00:41 -0500877 self.data['images'][image['id']] = image['name']
David Patersonce781492014-09-18 01:07:01 -0400878
879
880class IdentityService(BaseService):
881 def __init__(self, manager, **kwargs):
882 super(IdentityService, self).__init__(kwargs)
883 self.client = manager.identity_client
884
885
886class UserService(IdentityService):
887
888 def list(self):
889 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -0500890 users = client.get_users()
David Patersonce781492014-09-18 01:07:01 -0400891
892 if not self.is_save_state:
893 users = [user for user in users if user['id']
894 not in self.saved_state_json['users'].keys()]
895
896 if self.is_preserve:
897 users = [user for user in users if user['name']
898 not in CONF_USERS]
899
900 elif not self.is_save_state: # Never delete admin user
901 users = [user for user in users if user['name'] !=
902 CONF.identity.admin_username]
903
904 LOG.debug("List count, %s Users after reconcile" % len(users))
905 return users
906
907 def delete(self):
908 client = self.client
909 users = self.list()
910 for user in users:
911 try:
912 client.delete_user(user['id'])
913 except Exception as e:
914 LOG.exception("Delete User exception: %s" % e)
915 pass
916
917 def dry_run(self):
918 users = self.list()
919 self.data['users'] = users
920
921 def save_state(self):
922 users = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500923 self.data['users'] = {}
David Patersonce781492014-09-18 01:07:01 -0400924 for user in users:
gordon chungc15f1bc2015-02-23 18:00:41 -0500925 self.data['users'][user['id']] = user['name']
David Patersonce781492014-09-18 01:07:01 -0400926
927
928class RoleService(IdentityService):
929
930 def list(self):
931 client = self.client
932 try:
David Kranzb7afa922014-12-30 10:56:26 -0500933 roles = client.list_roles()
David Patersonce781492014-09-18 01:07:01 -0400934 # reconcile roles with saved state and never list admin role
935 if not self.is_save_state:
936 roles = [role for role in roles if
937 (role['id'] not in
938 self.saved_state_json['roles'].keys()
939 and role['name'] != CONF.identity.admin_role)]
940 LOG.debug("List count, %s Roles after reconcile" % len(roles))
941 return roles
942 except Exception as ex:
943 LOG.exception("Cannot retrieve Roles, exception: %s" % ex)
944 return []
945
946 def delete(self):
947 client = self.client
948 roles = self.list()
949 for role in roles:
950 try:
951 client.delete_role(role['id'])
952 except Exception as e:
953 LOG.exception("Delete Role exception: %s" % e)
954 pass
955
956 def dry_run(self):
957 roles = self.list()
958 self.data['roles'] = roles
959
960 def save_state(self):
961 roles = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -0500962 self.data['roles'] = {}
David Patersonce781492014-09-18 01:07:01 -0400963 for role in roles:
gordon chungc15f1bc2015-02-23 18:00:41 -0500964 self.data['roles'][role['id']] = role['name']
David Patersonce781492014-09-18 01:07:01 -0400965
966
967class TenantService(IdentityService):
968
969 def list(self):
970 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -0500971 tenants = client.list_tenants()
David Patersonce781492014-09-18 01:07:01 -0400972 if not self.is_save_state:
973 tenants = [tenant for tenant in tenants if (tenant['id']
974 not in self.saved_state_json['tenants'].keys()
975 and tenant['name'] != CONF.identity.admin_tenant_name)]
976
977 if self.is_preserve:
978 tenants = [tenant for tenant in tenants if tenant['name']
979 not in CONF_TENANTS]
980
981 LOG.debug("List count, %s Tenants after reconcile" % len(tenants))
982 return tenants
983
984 def delete(self):
985 client = self.client
986 tenants = self.list()
987 for tenant in tenants:
988 try:
989 client.delete_tenant(tenant['id'])
990 except Exception as e:
991 LOG.exception("Delete Tenant exception: %s" % e)
992 pass
993
994 def dry_run(self):
995 tenants = self.list()
996 self.data['tenants'] = tenants
997
998 def save_state(self):
999 tenants = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -05001000 self.data['tenants'] = {}
David Patersonce781492014-09-18 01:07:01 -04001001 for tenant in tenants:
gordon chungc15f1bc2015-02-23 18:00:41 -05001002 self.data['tenants'][tenant['id']] = tenant['name']
David Patersonce781492014-09-18 01:07:01 -04001003
1004
1005class DomainService(BaseService):
1006
1007 def __init__(self, manager, **kwargs):
1008 super(DomainService, self).__init__(kwargs)
1009 self.client = manager.identity_v3_client
1010
1011 def list(self):
1012 client = self.client
David Kranzb7afa922014-12-30 10:56:26 -05001013 domains = client.list_domains()
David Patersonce781492014-09-18 01:07:01 -04001014 if not self.is_save_state:
1015 domains = [domain for domain in domains if domain['id']
1016 not in self.saved_state_json['domains'].keys()]
1017
1018 LOG.debug("List count, %s Domains after reconcile" % len(domains))
1019 return domains
1020
1021 def delete(self):
1022 client = self.client
1023 domains = self.list()
1024 for domain in domains:
1025 try:
1026 client.update_domain(domain['id'], enabled=False)
1027 client.delete_domain(domain['id'])
1028 except Exception as e:
1029 LOG.exception("Delete Domain exception: %s" % e)
1030 pass
1031
1032 def dry_run(self):
1033 domains = self.list()
1034 self.data['domains'] = domains
1035
1036 def save_state(self):
1037 domains = self.list()
gordon chungc15f1bc2015-02-23 18:00:41 -05001038 self.data['domains'] = {}
David Patersonce781492014-09-18 01:07:01 -04001039 for domain in domains:
gordon chungc15f1bc2015-02-23 18:00:41 -05001040 self.data['domains'][domain['id']] = domain['name']
David Patersonce781492014-09-18 01:07:01 -04001041
1042
1043def get_tenant_cleanup_services():
1044 tenant_services = []
1045
1046 if IS_CEILOMETER:
1047 tenant_services.append(TelemetryAlarmService)
1048 if IS_NOVA:
1049 tenant_services.append(ServerService)
1050 tenant_services.append(KeyPairService)
1051 tenant_services.append(SecurityGroupService)
1052 tenant_services.append(ServerGroupService)
1053 if not IS_NEUTRON:
1054 tenant_services.append(FloatingIpService)
1055 if IS_HEAT:
1056 tenant_services.append(StackService)
1057 if IS_NEUTRON:
1058 if test.is_extension_enabled('vpnaas', 'network'):
1059 tenant_services.append(NetworkIpSecPolicyService)
1060 tenant_services.append(NetworkIkePolicyService)
1061 tenant_services.append(NetworkVpnServiceService)
1062 if test.is_extension_enabled('fwaas', 'network'):
1063 tenant_services.append(NetworkFwPolicyService)
1064 tenant_services.append(NetworkFwRulesService)
1065 if test.is_extension_enabled('lbaas', 'network'):
1066 tenant_services.append(NetworkHealthMonitorService)
1067 tenant_services.append(NetworkMemberService)
1068 tenant_services.append(NetworkVipService)
1069 tenant_services.append(NetworkPoolService)
1070 if test.is_extension_enabled('metering', 'network'):
1071 tenant_services.append(NetworMeteringLabelRuleService)
1072 tenant_services.append(NetworMeteringLabelService)
1073 tenant_services.append(NetworkRouterService)
1074 tenant_services.append(NetworkFloatingIpService)
1075 tenant_services.append(NetworkPortService)
1076 tenant_services.append(NetworkSubnetService)
1077 tenant_services.append(NetworkService)
1078 if IS_CINDER:
1079 tenant_services.append(SnapshotService)
1080 tenant_services.append(VolumeService)
1081 return tenant_services
1082
1083
1084def get_global_cleanup_services():
1085 global_services = []
1086 if IS_NOVA:
1087 global_services.append(FlavorService)
1088 if IS_GLANCE:
1089 global_services.append(ImageService)
1090 global_services.append(UserService)
1091 global_services.append(TenantService)
1092 global_services.append(DomainService)
1093 global_services.append(RoleService)
1094 return global_services