From 6eb406ac393c6432ff2a01c767defff6f9d727e8 Mon Sep 17 00:00:00 2001 From: Ryan Petrello Date: Wed, 29 Aug 2018 11:24:42 -0400 Subject: [PATCH] make awx-manage instance_list easier to read and more useful --- .../management/commands/list_instances.py | 50 +++++++++++++++---- 1 file changed, 41 insertions(+), 9 deletions(-) diff --git a/awx/main/management/commands/list_instances.py b/awx/main/management/commands/list_instances.py index d2f11b6e14..8291240ff1 100644 --- a/awx/main/management/commands/list_instances.py +++ b/awx/main/management/commands/list_instances.py @@ -6,6 +6,22 @@ from django.core.management.base import BaseCommand import six +class Ungrouped(object): + + name = 'ungrouped' + policy_instance_percentage = None + policy_instance_minimum = None + controller = None + + @property + def instances(self): + return Instance.objects.filter(rampart_groups__isnull=True) + + @property + def capacity(self): + return sum([x.capacity for x in self.instances]) + + class Command(BaseCommand): """List instances from the Tower database """ @@ -13,12 +29,28 @@ class Command(BaseCommand): def handle(self, *args, **options): super(Command, self).__init__() - for instance in Instance.objects.all(): - print(six.text_type( - "hostname: {0.hostname}; created: {0.created}; " - "heartbeat: {0.modified}; capacity: {0.capacity}").format(instance)) - for instance_group in InstanceGroup.objects.all(): - print(six.text_type( - "Instance Group: {0.name}; created: {0.created}; " - "capacity: {0.capacity}; members: {1}").format(instance_group, - [x.hostname for x in instance_group.instances.all()])) + groups = list(InstanceGroup.objects.all()) + ungrouped = Ungrouped() + if len(ungrouped.instances): + groups.append(ungrouped) + + for instance_group in groups: + fmt = '[{0.name} capacity={0.capacity}' + if instance_group.policy_instance_percentage: + fmt += ' policy={0.policy_instance_percentage}%' + if instance_group.policy_instance_minimum: + fmt += ' policy>={0.policy_instance_minimum}' + if instance_group.controller: + fmt += ' controller={0.controller.name}' + print(six.text_type(fmt + ']').format(instance_group)) + for x in instance_group.instances.all(): + color = '\033[92m' + if x.capacity == 0 or x.enabled is False: + color = '\033[91m' + fmt = '\t' + color + '{0.hostname} capacity={0.capacity} version={1}' + if x.last_isolated_check: + fmt += ' last_isolated_check="{0.last_isolated_check:%Y-%m-%d %H:%M:%S}"' + if x.capacity: + fmt += ' heartbeat="{0.modified:%Y-%m-%d %H:%M:%S}"' + print(six.text_type(fmt + '\033[0m').format(x, x.version or '?')) + print('')