Add a new register_peers management command

and alter provision_instance to accept hop nodes.
This commit is contained in:
Jeff Bradberry 2021-12-17 14:28:33 -05:00
parent f340f491dc
commit 4449555abe
2 changed files with 36 additions and 6 deletions

View File

@ -13,19 +13,19 @@ class Command(BaseCommand):
Register this instance with the database for HA tracking.
"""
help = 'Add instance to the database. ' 'Specify `--hostname` to use this command.'
help = "Add instance to the database. Specify `--hostname` to use this command."
def add_arguments(self, parser):
parser.add_argument('--hostname', dest='hostname', type=str, help='Hostname used during provisioning')
parser.add_argument('--node_type', type=str, default="hybrid", choices=["control", "execution", "hybrid"], help='Instance Node type')
parser.add_argument('--uuid', type=str, help='Instance UUID')
parser.add_argument('--hostname', dest='hostname', type=str, help="Hostname used during provisioning")
parser.add_argument('--node_type', type=str, default='hybrid', choices=['control', 'execution', 'hop', 'hybrid'], help="Instance Node type")
parser.add_argument('--uuid', type=str, help="Instance UUID")
def _register_hostname(self, hostname, node_type, uuid):
if not hostname:
return
(changed, instance) = Instance.objects.register(hostname=hostname, node_type=node_type, uuid=uuid)
if changed:
print('Successfully registered instance {}'.format(hostname))
print("Successfully registered instance {}".format(hostname))
else:
print("Instance already registered {}".format(instance.hostname))
self.changed = changed
@ -37,4 +37,4 @@ class Command(BaseCommand):
self.changed = False
self._register_hostname(options.get('hostname'), options.get('node_type'), options.get('uuid'))
if self.changed:
print('(changed: True)')
print("(changed: True)")

View File

@ -0,0 +1,30 @@
from django.core.management.base import BaseCommand, CommandError
from awx.main.models import Instance, InstanceLink
class Command(BaseCommand):
"""
Internal tower command.
Register the peers of a receptor node.
"""
def add_arguments(self, parser):
parser.add_argument('source', type=str, help="")
parser.add_argument('--peers', type=str, nargs='+', required=True, help="")
def handle(self, **options):
nodes = Instance.objects.in_bulk(field_name='hostname')
if options['source'] not in nodes:
raise CommandError()
missing_peers = set(options['peers']) - set(nodes)
if missing_peers:
raise CommandError()
results = 0
for target in options['peers']:
instance, created = InstanceLink.objects.get_or_create(source=nodes[options['source']], target=nodes[target])
if created:
results += 1
print(f"{results} new peer links added to the database.")