Merge "Fix tempest cleanup"
This commit is contained in:
commit
66158e6e09
tempest/cmd
@ -197,7 +197,7 @@ class TempestCleanup(command.Command):
|
|||||||
**kwargs))
|
**kwargs))
|
||||||
kwargs = {'data': project_data,
|
kwargs = {'data': project_data,
|
||||||
'is_dry_run': is_dry_run,
|
'is_dry_run': is_dry_run,
|
||||||
'saved_state_json': None,
|
'saved_state_json': self.json_data,
|
||||||
'is_preserve': is_preserve,
|
'is_preserve': is_preserve,
|
||||||
'is_save_state': False,
|
'is_save_state': False,
|
||||||
'project_id': project_id}
|
'project_id': project_id}
|
||||||
@ -305,6 +305,10 @@ class TempestCleanup(command.Command):
|
|||||||
svc = service(admin_mgr, **kwargs)
|
svc = service(admin_mgr, **kwargs)
|
||||||
svc.run()
|
svc.run()
|
||||||
|
|
||||||
|
for service in self.project_services:
|
||||||
|
svc = service(admin_mgr, **kwargs)
|
||||||
|
svc.run()
|
||||||
|
|
||||||
with open(SAVED_STATE_JSON, 'w+') as f:
|
with open(SAVED_STATE_JSON, 'w+') as f:
|
||||||
f.write(json.dumps(data,
|
f.write(json.dumps(data,
|
||||||
sort_keys=True, indent=2, separators=(',', ': ')))
|
sort_keys=True, indent=2, separators=(',', ': ')))
|
||||||
|
@ -144,6 +144,10 @@ class SnapshotService(BaseService):
|
|||||||
def list(self):
|
def list(self):
|
||||||
client = self.client
|
client = self.client
|
||||||
snaps = client.list_snapshots()['snapshots']
|
snaps = client.list_snapshots()['snapshots']
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved snapshots
|
||||||
|
snaps = [snap for snap in snaps if snap['id']
|
||||||
|
not in self.saved_state_json['snapshots'].keys()]
|
||||||
LOG.debug("List count, %s Snapshots", len(snaps))
|
LOG.debug("List count, %s Snapshots", len(snaps))
|
||||||
return snaps
|
return snaps
|
||||||
|
|
||||||
@ -160,6 +164,12 @@ class SnapshotService(BaseService):
|
|||||||
snaps = self.list()
|
snaps = self.list()
|
||||||
self.data['snapshots'] = snaps
|
self.data['snapshots'] = snaps
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
snaps = self.list()
|
||||||
|
self.data['snapshots'] = {}
|
||||||
|
for snap in snaps:
|
||||||
|
self.data['snapshots'][snap['id']] = snap['name']
|
||||||
|
|
||||||
|
|
||||||
class ServerService(BaseService):
|
class ServerService(BaseService):
|
||||||
def __init__(self, manager, **kwargs):
|
def __init__(self, manager, **kwargs):
|
||||||
@ -171,6 +181,10 @@ class ServerService(BaseService):
|
|||||||
client = self.client
|
client = self.client
|
||||||
servers_body = client.list_servers()
|
servers_body = client.list_servers()
|
||||||
servers = servers_body['servers']
|
servers = servers_body['servers']
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved servers
|
||||||
|
servers = [server for server in servers if server['id']
|
||||||
|
not in self.saved_state_json['servers'].keys()]
|
||||||
LOG.debug("List count, %s Servers", len(servers))
|
LOG.debug("List count, %s Servers", len(servers))
|
||||||
return servers
|
return servers
|
||||||
|
|
||||||
@ -187,17 +201,27 @@ class ServerService(BaseService):
|
|||||||
servers = self.list()
|
servers = self.list()
|
||||||
self.data['servers'] = servers
|
self.data['servers'] = servers
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
servers = self.list()
|
||||||
|
self.data['servers'] = {}
|
||||||
|
for server in servers:
|
||||||
|
self.data['servers'][server['id']] = server['name']
|
||||||
|
|
||||||
|
|
||||||
class ServerGroupService(ServerService):
|
class ServerGroupService(ServerService):
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.server_groups_client
|
client = self.server_groups_client
|
||||||
sgs = client.list_server_groups()['server_groups']
|
sgs = client.list_server_groups()['server_groups']
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved server_groups
|
||||||
|
sgs = [sg for sg in sgs if sg['id']
|
||||||
|
not in self.saved_state_json['server_groups'].keys()]
|
||||||
LOG.debug("List count, %s Server Groups", len(sgs))
|
LOG.debug("List count, %s Server Groups", len(sgs))
|
||||||
return sgs
|
return sgs
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
client = self.client
|
client = self.server_groups_client
|
||||||
sgs = self.list()
|
sgs = self.list()
|
||||||
for sg in sgs:
|
for sg in sgs:
|
||||||
try:
|
try:
|
||||||
@ -209,6 +233,12 @@ class ServerGroupService(ServerService):
|
|||||||
sgs = self.list()
|
sgs = self.list()
|
||||||
self.data['server_groups'] = sgs
|
self.data['server_groups'] = sgs
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
sgs = self.list()
|
||||||
|
self.data['server_groups'] = {}
|
||||||
|
for sg in sgs:
|
||||||
|
self.data['server_groups'][sg['id']] = sg['name']
|
||||||
|
|
||||||
|
|
||||||
class KeyPairService(BaseService):
|
class KeyPairService(BaseService):
|
||||||
def __init__(self, manager, **kwargs):
|
def __init__(self, manager, **kwargs):
|
||||||
@ -218,6 +248,11 @@ class KeyPairService(BaseService):
|
|||||||
def list(self):
|
def list(self):
|
||||||
client = self.client
|
client = self.client
|
||||||
keypairs = client.list_keypairs()['keypairs']
|
keypairs = client.list_keypairs()['keypairs']
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved keypairs
|
||||||
|
keypairs = [keypair for keypair in keypairs
|
||||||
|
if keypair['keypair']['name']
|
||||||
|
not in self.saved_state_json['keypairs'].keys()]
|
||||||
LOG.debug("List count, %s Keypairs", len(keypairs))
|
LOG.debug("List count, %s Keypairs", len(keypairs))
|
||||||
return keypairs
|
return keypairs
|
||||||
|
|
||||||
@ -235,6 +270,13 @@ class KeyPairService(BaseService):
|
|||||||
keypairs = self.list()
|
keypairs = self.list()
|
||||||
self.data['keypairs'] = keypairs
|
self.data['keypairs'] = keypairs
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
keypairs = self.list()
|
||||||
|
self.data['keypairs'] = {}
|
||||||
|
for keypair in keypairs:
|
||||||
|
keypair = keypair['keypair']
|
||||||
|
self.data['keypairs'][keypair['name']] = keypair
|
||||||
|
|
||||||
|
|
||||||
class VolumeService(BaseService):
|
class VolumeService(BaseService):
|
||||||
def __init__(self, manager, **kwargs):
|
def __init__(self, manager, **kwargs):
|
||||||
@ -244,6 +286,10 @@ class VolumeService(BaseService):
|
|||||||
def list(self):
|
def list(self):
|
||||||
client = self.client
|
client = self.client
|
||||||
vols = client.list_volumes()['volumes']
|
vols = client.list_volumes()['volumes']
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved volumes
|
||||||
|
vols = [vol for vol in vols if vol['id']
|
||||||
|
not in self.saved_state_json['volumes'].keys()]
|
||||||
LOG.debug("List count, %s Volumes", len(vols))
|
LOG.debug("List count, %s Volumes", len(vols))
|
||||||
return vols
|
return vols
|
||||||
|
|
||||||
@ -260,6 +306,12 @@ class VolumeService(BaseService):
|
|||||||
vols = self.list()
|
vols = self.list()
|
||||||
self.data['volumes'] = vols
|
self.data['volumes'] = vols
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
vols = self.list()
|
||||||
|
self.data['volumes'] = {}
|
||||||
|
for vol in vols:
|
||||||
|
self.data['volumes'][vol['id']] = vol['name']
|
||||||
|
|
||||||
|
|
||||||
class VolumeQuotaService(BaseService):
|
class VolumeQuotaService(BaseService):
|
||||||
def __init__(self, manager, **kwargs):
|
def __init__(self, manager, **kwargs):
|
||||||
@ -299,9 +351,9 @@ class NovaQuotaService(BaseService):
|
|||||||
|
|
||||||
|
|
||||||
# Begin network service classes
|
# Begin network service classes
|
||||||
class NetworkService(BaseService):
|
class BaseNetworkService(BaseService):
|
||||||
def __init__(self, manager, **kwargs):
|
def __init__(self, manager, **kwargs):
|
||||||
super(NetworkService, self).__init__(kwargs)
|
super(BaseNetworkService, self).__init__(kwargs)
|
||||||
self.networks_client = manager.networks_client
|
self.networks_client = manager.networks_client
|
||||||
self.subnets_client = manager.subnets_client
|
self.subnets_client = manager.subnets_client
|
||||||
self.ports_client = manager.ports_client
|
self.ports_client = manager.ports_client
|
||||||
@ -318,10 +370,18 @@ class NetworkService(BaseService):
|
|||||||
return [item for item in item_list if item['network_id']
|
return [item for item in item_list if item['network_id']
|
||||||
not in CONF_NETWORKS]
|
not in CONF_NETWORKS]
|
||||||
|
|
||||||
|
|
||||||
|
class NetworkService(BaseNetworkService):
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.networks_client
|
client = self.networks_client
|
||||||
networks = client.list_networks(**self.tenant_filter)
|
networks = client.list_networks(**self.tenant_filter)
|
||||||
networks = networks['networks']
|
networks = networks['networks']
|
||||||
|
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved networks
|
||||||
|
networks = [network for network in networks if network['id']
|
||||||
|
not in self.saved_state_json['networks'].keys()]
|
||||||
# filter out networks declared in tempest.conf
|
# filter out networks declared in tempest.conf
|
||||||
if self.is_preserve:
|
if self.is_preserve:
|
||||||
networks = [network for network in networks
|
networks = [network for network in networks
|
||||||
@ -342,18 +402,29 @@ class NetworkService(BaseService):
|
|||||||
networks = self.list()
|
networks = self.list()
|
||||||
self.data['networks'] = networks
|
self.data['networks'] = networks
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
networks = self.list()
|
||||||
|
self.data['networks'] = {}
|
||||||
|
for network in networks:
|
||||||
|
self.data['networks'][network['id']] = network
|
||||||
|
|
||||||
class NetworkFloatingIpService(NetworkService):
|
|
||||||
|
class NetworkFloatingIpService(BaseNetworkService):
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.floating_ips_client
|
client = self.floating_ips_client
|
||||||
flips = client.list_floatingips(**self.tenant_filter)
|
flips = client.list_floatingips(**self.tenant_filter)
|
||||||
flips = flips['floatingips']
|
flips = flips['floatingips']
|
||||||
|
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved flips
|
||||||
|
flips = [flip for flip in flips if flip['id']
|
||||||
|
not in self.saved_state_json['floatingips'].keys()]
|
||||||
LOG.debug("List count, %s Network Floating IPs", len(flips))
|
LOG.debug("List count, %s Network Floating IPs", len(flips))
|
||||||
return flips
|
return flips
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
client = self.client
|
client = self.floating_ips_client
|
||||||
flips = self.list()
|
flips = self.list()
|
||||||
for flip in flips:
|
for flip in flips:
|
||||||
try:
|
try:
|
||||||
@ -363,15 +434,26 @@ class NetworkFloatingIpService(NetworkService):
|
|||||||
|
|
||||||
def dry_run(self):
|
def dry_run(self):
|
||||||
flips = self.list()
|
flips = self.list()
|
||||||
self.data['floating_ips'] = flips
|
self.data['floatingips'] = flips
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
flips = self.list()
|
||||||
|
self.data['floatingips'] = {}
|
||||||
|
for flip in flips:
|
||||||
|
self.data['floatingips'][flip['id']] = flip
|
||||||
|
|
||||||
|
|
||||||
class NetworkRouterService(NetworkService):
|
class NetworkRouterService(BaseNetworkService):
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.routers_client
|
client = self.routers_client
|
||||||
routers = client.list_routers(**self.tenant_filter)
|
routers = client.list_routers(**self.tenant_filter)
|
||||||
routers = routers['routers']
|
routers = routers['routers']
|
||||||
|
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved routers
|
||||||
|
routers = [router for router in routers if router['id']
|
||||||
|
not in self.saved_state_json['routers'].keys()]
|
||||||
if self.is_preserve:
|
if self.is_preserve:
|
||||||
routers = [router for router in routers
|
routers = [router for router in routers
|
||||||
if router['id'] != CONF_PUB_ROUTER]
|
if router['id'] != CONF_PUB_ROUTER]
|
||||||
@ -399,6 +481,12 @@ class NetworkRouterService(NetworkService):
|
|||||||
routers = self.list()
|
routers = self.list()
|
||||||
self.data['routers'] = routers
|
self.data['routers'] = routers
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
routers = self.list()
|
||||||
|
self.data['routers'] = {}
|
||||||
|
for router in routers:
|
||||||
|
self.data['routers'][router['id']] = router['name']
|
||||||
|
|
||||||
|
|
||||||
class NetworkMeteringLabelRuleService(NetworkService):
|
class NetworkMeteringLabelRuleService(NetworkService):
|
||||||
|
|
||||||
@ -407,6 +495,11 @@ class NetworkMeteringLabelRuleService(NetworkService):
|
|||||||
rules = client.list_metering_label_rules()
|
rules = client.list_metering_label_rules()
|
||||||
rules = rules['metering_label_rules']
|
rules = rules['metering_label_rules']
|
||||||
rules = self._filter_by_tenant_id(rules)
|
rules = self._filter_by_tenant_id(rules)
|
||||||
|
|
||||||
|
if not self.is_save_state:
|
||||||
|
saved_rules = self.saved_state_json['metering_label_rules'].keys()
|
||||||
|
# recreate list removing saved rules
|
||||||
|
rules = [rule for rule in rules if rule['id'] not in saved_rules]
|
||||||
LOG.debug("List count, %s Metering Label Rules", len(rules))
|
LOG.debug("List count, %s Metering Label Rules", len(rules))
|
||||||
return rules
|
return rules
|
||||||
|
|
||||||
@ -421,16 +514,27 @@ class NetworkMeteringLabelRuleService(NetworkService):
|
|||||||
|
|
||||||
def dry_run(self):
|
def dry_run(self):
|
||||||
rules = self.list()
|
rules = self.list()
|
||||||
self.data['rules'] = rules
|
self.data['metering_label_rules'] = rules
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
rules = self.list()
|
||||||
|
self.data['metering_label_rules'] = {}
|
||||||
|
for rule in rules:
|
||||||
|
self.data['metering_label_rules'][rule['id']] = rule
|
||||||
|
|
||||||
|
|
||||||
class NetworkMeteringLabelService(NetworkService):
|
class NetworkMeteringLabelService(BaseNetworkService):
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.metering_labels_client
|
client = self.metering_labels_client
|
||||||
labels = client.list_metering_labels()
|
labels = client.list_metering_labels()
|
||||||
labels = labels['metering_labels']
|
labels = labels['metering_labels']
|
||||||
labels = self._filter_by_tenant_id(labels)
|
labels = self._filter_by_tenant_id(labels)
|
||||||
|
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved labels
|
||||||
|
labels = [label for label in labels if label['id']
|
||||||
|
not in self.saved_state_json['metering_labels'].keys()]
|
||||||
LOG.debug("List count, %s Metering Labels", len(labels))
|
LOG.debug("List count, %s Metering Labels", len(labels))
|
||||||
return labels
|
return labels
|
||||||
|
|
||||||
@ -445,10 +549,16 @@ class NetworkMeteringLabelService(NetworkService):
|
|||||||
|
|
||||||
def dry_run(self):
|
def dry_run(self):
|
||||||
labels = self.list()
|
labels = self.list()
|
||||||
self.data['labels'] = labels
|
self.data['metering_labels'] = labels
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
labels = self.list()
|
||||||
|
self.data['metering_labels'] = {}
|
||||||
|
for label in labels:
|
||||||
|
self.data['metering_labels'][label['id']] = label['name']
|
||||||
|
|
||||||
|
|
||||||
class NetworkPortService(NetworkService):
|
class NetworkPortService(BaseNetworkService):
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.ports_client
|
client = self.ports_client
|
||||||
@ -457,6 +567,10 @@ class NetworkPortService(NetworkService):
|
|||||||
if port["device_owner"] == "" or
|
if port["device_owner"] == "" or
|
||||||
port["device_owner"].startswith("compute:")]
|
port["device_owner"].startswith("compute:")]
|
||||||
|
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved ports
|
||||||
|
ports = [port for port in ports if port['id']
|
||||||
|
not in self.saved_state_json['ports'].keys()]
|
||||||
if self.is_preserve:
|
if self.is_preserve:
|
||||||
ports = self._filter_by_conf_networks(ports)
|
ports = self._filter_by_conf_networks(ports)
|
||||||
|
|
||||||
@ -476,8 +590,14 @@ class NetworkPortService(NetworkService):
|
|||||||
ports = self.list()
|
ports = self.list()
|
||||||
self.data['ports'] = ports
|
self.data['ports'] = ports
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
ports = self.list()
|
||||||
|
self.data['ports'] = {}
|
||||||
|
for port in ports:
|
||||||
|
self.data['ports'][port['id']] = port['name']
|
||||||
|
|
||||||
class NetworkSecGroupService(NetworkService):
|
|
||||||
|
class NetworkSecGroupService(BaseNetworkService):
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.security_groups_client
|
client = self.security_groups_client
|
||||||
filter = self.tenant_filter
|
filter = self.tenant_filter
|
||||||
@ -486,31 +606,48 @@ class NetworkSecGroupService(NetworkService):
|
|||||||
client.list_security_groups(**filter)['security_groups']
|
client.list_security_groups(**filter)['security_groups']
|
||||||
if secgroup['name'] != 'default']
|
if secgroup['name'] != 'default']
|
||||||
|
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved security_groups
|
||||||
|
secgroups = [secgroup for secgroup in secgroups if secgroup['id']
|
||||||
|
not in self.saved_state_json['security_groups'].keys()
|
||||||
|
]
|
||||||
if self.is_preserve:
|
if self.is_preserve:
|
||||||
secgroups = self._filter_by_conf_networks(secgroups)
|
secgroups = [secgroup for secgroup in secgroups
|
||||||
|
if secgroup['security_group_rules'][0]['project_id']
|
||||||
|
not in CONF_PROJECTS]
|
||||||
LOG.debug("List count, %s security_groups", len(secgroups))
|
LOG.debug("List count, %s security_groups", len(secgroups))
|
||||||
return secgroups
|
return secgroups
|
||||||
|
|
||||||
def delete(self):
|
def delete(self):
|
||||||
client = self.client
|
client = self.security_groups_client
|
||||||
secgroups = self.list()
|
secgroups = self.list()
|
||||||
for secgroup in secgroups:
|
for secgroup in secgroups:
|
||||||
try:
|
try:
|
||||||
client.delete_secgroup(secgroup['id'])
|
client.delete_security_group(secgroup['id'])
|
||||||
except Exception:
|
except Exception:
|
||||||
LOG.exception("Delete security_group exception.")
|
LOG.exception("Delete security_group exception.")
|
||||||
|
|
||||||
def dry_run(self):
|
def dry_run(self):
|
||||||
secgroups = self.list()
|
secgroups = self.list()
|
||||||
self.data['secgroups'] = secgroups
|
self.data['security_groups'] = secgroups
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
secgroups = self.list()
|
||||||
|
self.data['security_groups'] = {}
|
||||||
|
for secgroup in secgroups:
|
||||||
|
self.data['security_groups'][secgroup['id']] = secgroup['name']
|
||||||
|
|
||||||
|
|
||||||
class NetworkSubnetService(NetworkService):
|
class NetworkSubnetService(BaseNetworkService):
|
||||||
|
|
||||||
def list(self):
|
def list(self):
|
||||||
client = self.subnets_client
|
client = self.subnets_client
|
||||||
subnets = client.list_subnets(**self.tenant_filter)
|
subnets = client.list_subnets(**self.tenant_filter)
|
||||||
subnets = subnets['subnets']
|
subnets = subnets['subnets']
|
||||||
|
if not self.is_save_state:
|
||||||
|
# recreate list removing saved subnets
|
||||||
|
subnets = [subnet for subnet in subnets if subnet['id']
|
||||||
|
not in self.saved_state_json['subnets'].keys()]
|
||||||
if self.is_preserve:
|
if self.is_preserve:
|
||||||
subnets = self._filter_by_conf_networks(subnets)
|
subnets = self._filter_by_conf_networks(subnets)
|
||||||
LOG.debug("List count, %s Subnets", len(subnets))
|
LOG.debug("List count, %s Subnets", len(subnets))
|
||||||
@ -529,6 +666,12 @@ class NetworkSubnetService(NetworkService):
|
|||||||
subnets = self.list()
|
subnets = self.list()
|
||||||
self.data['subnets'] = subnets
|
self.data['subnets'] = subnets
|
||||||
|
|
||||||
|
def save_state(self):
|
||||||
|
subnets = self.list()
|
||||||
|
self.data['subnets'] = {}
|
||||||
|
for subnet in subnets:
|
||||||
|
self.data['subnets'][subnet['id']] = subnet['name']
|
||||||
|
|
||||||
|
|
||||||
# begin global services
|
# begin global services
|
||||||
class FlavorService(BaseService):
|
class FlavorService(BaseService):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user