58 lines
1.9 KiB
Python
58 lines
1.9 KiB
Python
# Copyright (c) 2015 Ansible, Inc.
|
|
# All Rights Reserved
|
|
|
|
from awx.main.models import Instance, InstanceGroup
|
|
from django.core.management.base import BaseCommand
|
|
|
|
|
|
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
|
|
"""
|
|
|
|
def handle(self, *args, **options):
|
|
super(Command, self).__init__()
|
|
|
|
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((fmt + ']').format(instance_group))
|
|
for x in instance_group.instances.all():
|
|
color = '\033[92m'
|
|
if x.capacity == 0:
|
|
color = '\033[91m'
|
|
if x.enabled is False:
|
|
color = '\033[90m[DISABLED] '
|
|
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((fmt + '\033[0m').format(x, x.version or '?'))
|
|
print('')
|