]> review.fuel-infra Code Review - tools/sustaining.git/commitdiff
Extend output of search option 74/41674/1
authorVladimir Khlyunev <vkhlyunev@mirantis.com>
Thu, 14 Jan 2021 13:18:05 +0000 (17:18 +0400)
committerVladimir Khlyunev <vkhlyunev@mirantis.com>
Thu, 14 Jan 2021 13:18:05 +0000 (17:18 +0400)
Change-Id: Id14e09e10aa65bb9a4632e78e14137f332d816f9

os_cloud_cleaner/cleaner.py
os_cloud_cleaner/ignorelist.txt
os_cloud_cleaner/os_connector.py
os_cloud_cleaner/shell.py

index 438fab0c52f53d7ade785a56d1e6965a06de22ef..15484d132065a70224fc4f0c2d2b15abe14bcbfb 100644 (file)
@@ -1,6 +1,7 @@
 from __future__ import unicode_literals
 
 import os
+from collections import OrderedDict
 from datetime import datetime
 
 from os_connector import OpenStackActions
@@ -120,22 +121,65 @@ class Cleaner:
     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,
index 800b503567bb68182ca41b4920aec8c87d60a79d..a1b46a4d9c590a6e0fbb517aec460cd15faf3bd7 100644 (file)
@@ -30,8 +30,10 @@ d92fc584-371b-4c0b-aa85-9c5c49292129 # sre-router
 83bada1a-3a04-413f-b3ef-d0f26adf69e2 # dstremkouski-convert-qcow2-raw
 0d0665c2-c684-4a66-a224-72462ccb016d # dstremkouski-500G-stripe
 0601a251-940f-4489-b5d3-4ed58d9d2727 # dstremkouski-VW-jumphost
+da6ff39c-01cc-4323-9c76-ab7fc243fae4 # dstremkouski-jumphost-eu
 d0eb9a28-8ea1-4728-9fcc-5e89d1fd773d # dstremkouski-500G
 d32349f4-74eb-4acb-a7a4-b9ae32029000 # windows-vw-jump
+48a15d0c-5c48-45dc-b8db-13462239278c # sre-monitoring
 # Subnets
 4e248805-d684-4411-bb3f-143ec8da5bad # cvp-subnet-internal-2
 7d7e65ba-d6cf-458f-b963-50614fac5e00 # baremetal-subnet
index 4c2c93eff0d9f364cbf9537a7feccdccf6642f6c..c531e73279fbdcce56685bc4960b5d984691be87 100644 (file)
@@ -126,6 +126,13 @@ class OpenStackActions(object):
         servers = self.nova.servers.list()
         return servers
 
+    def get_server_name_by_uuid(self, uuid):
+        try:
+            server = self.nova.servers.get(uuid)
+            return server.name
+        except NovaNotFoundException:
+            return None
+
     def get_keystone_endpoints(self):
         endpoints = self.keystone.endpoints.list()
         return endpoints
index 8686f51d7a567b59bafc366e09d22808a0fa76dd..1f9361d0ff1e415d021060534fb03269e3040ca6 100644 (file)
@@ -16,8 +16,9 @@ def do_search(name, only_uuids):
     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:
@@ -25,13 +26,13 @@ def do_search(name, only_uuids):
                 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
 
 
@@ -65,8 +66,8 @@ search_subparser.add_argument('--only-uuids', '-i',
 # 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')