diff --git a/awx/main/management/commands/provision_instance.py b/awx/main/management/commands/provision_instance.py index b996db4125..7e1d01b4ba 100644 --- a/awx/main/management/commands/provision_instance.py +++ b/awx/main/management/commands/provision_instance.py @@ -35,7 +35,7 @@ class Command(BaseCommand): from awx.main.management.commands.register_queue import RegisterQueue - (changed, instance) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', uuid=settings.SYSTEM_UUID) + (changed, instance) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID) RegisterQueue(settings.DEFAULT_CONTROL_PLANE_QUEUE_NAME, 100, 0, [], is_container_group=False).register() RegisterQueue( settings.DEFAULT_EXECUTION_QUEUE_NAME, @@ -48,7 +48,7 @@ class Command(BaseCommand): max_concurrent_jobs=settings.DEFAULT_EXECUTION_QUEUE_MAX_CONCURRENT_JOBS, ).register() else: - (changed, instance) = Instance.objects.register(hostname=hostname, node_type=node_type, uuid=uuid) + (changed, instance) = Instance.objects.register(hostname=hostname, node_type=node_type, node_uuid=uuid) if changed: print("Successfully registered instance {}".format(hostname)) else: diff --git a/awx/main/managers.py b/awx/main/managers.py index b674049b0e..86ab328121 100644 --- a/awx/main/managers.py +++ b/awx/main/managers.py @@ -2,6 +2,7 @@ # All Rights Reserved. import logging +import uuid from django.db import models from django.conf import settings from django.db.models.functions import Lower @@ -114,7 +115,7 @@ class InstanceManager(models.Manager): return node[0] raise RuntimeError("No instance found with the current cluster host id") - def register(self, uuid=None, hostname=None, ip_address=None, node_type='hybrid', defaults=None): + def register(self, node_uuid=None, hostname=None, ip_address=None, node_type='hybrid', defaults=None): if not hostname: hostname = settings.CLUSTER_HOST_ID @@ -131,8 +132,8 @@ class InstanceManager(models.Manager): logger.warning("IP address {0} conflict detected, ip address unset for host {1}.".format(ip_address, other_hostname)) # Return existing instance that matches hostname or UUID (default to UUID) - if uuid is not None and uuid != UUID_DEFAULT and self.filter(uuid=uuid).exists(): - instance = self.filter(uuid=uuid) + if node_uuid is not None and node_uuid != UUID_DEFAULT and self.filter(uuid=node_uuid).exists(): + instance = self.filter(uuid=node_uuid) else: # if instance was not retrieved by uuid and hostname was, use the hostname instance = self.filter(hostname=hostname) @@ -170,9 +171,7 @@ class InstanceManager(models.Manager): } if defaults is not None: create_defaults.update(defaults) - uuid_option = {} - if uuid is not None: - uuid_option = {'uuid': uuid} + uuid_option = {'uuid': node_uuid if node_uuid is not None else uuid.uuid4()} if node_type == 'execution' and 'version' not in create_defaults: create_defaults['version'] = RECEPTOR_PENDING instance = self.create(hostname=hostname, ip_address=ip_address, node_type=node_type, **create_defaults, **uuid_option) diff --git a/awx/main/tasks/system.py b/awx/main/tasks/system.py index 12b1981a85..6fc42d371b 100644 --- a/awx/main/tasks/system.py +++ b/awx/main/tasks/system.py @@ -541,7 +541,7 @@ def cluster_node_heartbeat(dispatch_time=None, worker_tasks=None): logger.warning(f'Heartbeat skew - interval={(nowtime - last_last_seen).total_seconds():.4f}, expected={settings.CLUSTER_NODE_HEARTBEAT_PERIOD}') else: if settings.AWX_AUTO_DEPROVISION_INSTANCES: - (changed, this_inst) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', uuid=settings.SYSTEM_UUID) + (changed, this_inst) = Instance.objects.register(ip_address=os.environ.get('MY_POD_IP'), node_type='control', node_uuid=settings.SYSTEM_UUID) if changed: logger.warning(f'Recreated instance record {this_inst.hostname} after unexpected removal') this_inst.local_health_check()