from __future__ import unicode_literals
import os
+from collections import OrderedDict
from datetime import datetime
from os_connector import OpenStackActions
def search_non_heat_resources_by_name(self, name):
self.reset_cache()
resources = self.collect_os_non_stack_resources()
- servers = {server.id: server.name for server in resources['servers']
- if name in server.name and
- server.id not in self.ignorelist_uuids}
- volumes = {volume.id: volume.name for volume in resources['volumes']
- if name in volume.name and
- volume.id not in self.ignorelist_uuids}
- networks = {net['id']: net['name'] for net in resources['networks']
- if name in net['name'] and
- net['id'] not in self.ignorelist_uuids}
- subnets = {subnet['id']: subnet['name'] for subnet in
- resources['subnets']
- if name in subnet['name'] and
- subnet['id'] not in self.ignorelist_uuids}
- routers = {router['id']: router['name'] for router in
- resources['routers'] if name in router['name'] and
- router['id'] not in self.ignorelist_uuids}
+ # base fields: uuid, name, created_at
+ servers = []
+ for server in resources['servers']:
+ if name in server.name and server.id not in self.ignorelist_uuids:
+ data = OrderedDict()
+ data['uuid'] = server.id
+ data['name'] = server.name
+ data['created'] = server.created
+ servers.append(data)
+ volumes = []
+ for volume in resources['volumes']:
+ if name in volume.name and volume.id not in self.ignorelist_uuids:
+ attach_decs = []
+ for attachment in volume.attachments:
+ attach_template = "{server} as {device} since {date}"
+ server_name = self.os_conn.get_server_name_by_uuid(
+ attachment['server_id'])
+ if server_name:
+ attach_decs.append(attach_template.format(
+ server=server_name,
+ device=attachment['device'],
+ date=attachment['attached_at']))
+ else:
+ attach_decs.append(
+ "Attached to non-existing server {}! "
+ "Error in databases".format(
+ attachment['server_id']))
+ data = OrderedDict()
+ data['uuid'] = volume.id
+ data['name'] = volume.name
+ data['created_at'] = volume.created_at
+ data['attachments'] = '\n'.join(attach_decs)
+ volumes.append(data)
+ networks = []
+ for net in resources['networks']:
+ if name in net['name'] and net['id'] not in self.ignorelist_uuids:
+ data = OrderedDict()
+ data['uuid'] = net['id']
+ data['name'] = net['name']
+ data['created_at'] = net['created_at']
+ networks.append(data)
+ subnets = []
+ for subnet in resources['subnets']:
+ if name in subnet['name'] and \
+ subnet['id'] not in self.ignorelist_uuids:
+ data = OrderedDict()
+ data['uuid'] = subnet['id']
+ data['name'] = subnet['name']
+ data['created_at'] = subnet['created_at']
+ subnets.append(data)
+ routers = []
+ for router in resources['routers']:
+ if name in router['name'] and \
+ router['id'] not in self.ignorelist_uuids:
+ data = OrderedDict()
+ data['uuid'] = router['id']
+ data['name'] = router['name']
+ data['created_at'] = router['created_at']
+ routers.append(data)
return {'servers': servers,
'volumes': volumes,
keys_ordered = ['servers', 'subnets', 'networks', 'routers', 'volumes']
if only_uuids:
uuids = []
- for k in keys_ordered:
- uuids.extend(result[k].keys())
+ for key in keys_ordered:
+ for item in result[key]:
+ uuids.append(item['uuid'])
print " ".join(uuids)
else:
for key in keys_ordered:
continue
print key
table = PrettyTable()
- table.field_names = ["UUID", "Name"]
+ table.field_names = result[key][0].keys()
table.align = 'l'
# table.vertical_char = "#"
# table.horizontal_char = "#"
# table.left_padding_width = 0
- for uuid in result[key]:
- table.add_row([uuid, result[key][uuid]])
+ for value in result[key]:
+ table.add_row(value.values())
print table
# args = parser.parse_args("cleanup misc c32eade8-78a2-4cb2-a6a5-9b692a979620 0e429566-4566-41b3-8767-4d157aa90e38 37a8cdf7-0684-4fe8-860a-4ed7eedbe07c".split(" "))
# args = parser.parse_args("search -i -n pike-ci-dvr-tarask-test".split(" "))
# args = parser.parse_args("search -i".split(" "))
-# args = parser.parse_args("search".split(" "))
-args = parser.parse_args()
+args = parser.parse_args("search".split(" "))
+# args = parser.parse_args()
auth_url = args.os_auth_url or os.environ.get('OS_AUTH_URL')
username = args.os_username or os.environ.get('OS_USERNAME')