mirror of
https://github.com/ansible/awx.git
synced 2026-05-08 01:47:35 -02:30
Fix bug that would run --worker-info health checks on control or hybrid nodes (#11161)
* Fix bug that would run health check on control nodes * Prevent running execution node health check against main cluster nodes
This commit is contained in:
@@ -438,6 +438,9 @@ def execution_node_health_check(node):
|
|||||||
logger.warn(f'Instance record for {node} missing, could not check capacity.')
|
logger.warn(f'Instance record for {node} missing, could not check capacity.')
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if instance.node_type != 'execution':
|
||||||
|
raise RuntimeError(f'Execution node health check ran against {instance.node_type} node {instance.hostname}')
|
||||||
|
|
||||||
data = worker_info(node, work_type='ansible-runner' if instance.node_type == 'execution' else 'local')
|
data = worker_info(node, work_type='ansible-runner' if instance.node_type == 'execution' else 'local')
|
||||||
|
|
||||||
prior_capacity = instance.capacity
|
prior_capacity = instance.capacity
|
||||||
@@ -3023,7 +3026,7 @@ class AWXReceptorJob:
|
|||||||
if self.unit_id is not None and settings.RECEPTOR_RELEASE_WORK:
|
if self.unit_id is not None and settings.RECEPTOR_RELEASE_WORK:
|
||||||
receptor_ctl.simple_command(f"work release {self.unit_id}")
|
receptor_ctl.simple_command(f"work release {self.unit_id}")
|
||||||
# If an error occured without the job itself failing, it could be a broken instance
|
# If an error occured without the job itself failing, it could be a broken instance
|
||||||
if self.work_type == 'ansible-runner' and res is None or getattr(res, 'rc', None) is None:
|
if self.work_type == 'ansible-runner' and ((res is None) or (getattr(res, 'rc', None) is None)):
|
||||||
execution_node_health_check(self.task.instance.execution_node)
|
execution_node_health_check(self.task.instance.execution_node)
|
||||||
|
|
||||||
def _run_internal(self, receptor_ctl):
|
def _run_internal(self, receptor_ctl):
|
||||||
|
|||||||
@@ -2,8 +2,8 @@ import pytest
|
|||||||
from unittest import mock
|
from unittest import mock
|
||||||
import os
|
import os
|
||||||
|
|
||||||
from awx.main.tasks import RunProjectUpdate, RunInventoryUpdate
|
from awx.main.tasks import RunProjectUpdate, RunInventoryUpdate, execution_node_health_check
|
||||||
from awx.main.models import ProjectUpdate, InventoryUpdate, InventorySource
|
from awx.main.models import ProjectUpdate, InventoryUpdate, InventorySource, Instance
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@@ -15,6 +15,15 @@ def scm_revision_file(tmpdir_factory):
|
|||||||
return os.path.join(revision_file.dirname, 'revision.txt')
|
return os.path.join(revision_file.dirname, 'revision.txt')
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.django_db
|
||||||
|
@pytest.mark.parametrize('node_type', ('control', 'hybrid'))
|
||||||
|
def test_no_worker_info_on_AWX_nodes(node_type):
|
||||||
|
hostname = 'us-south-3-compute.invalid'
|
||||||
|
Instance.objects.create(hostname=hostname, node_type=node_type)
|
||||||
|
with pytest.raises(RuntimeError):
|
||||||
|
execution_node_health_check(hostname)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
class TestDependentInventoryUpdate:
|
class TestDependentInventoryUpdate:
|
||||||
def test_dependent_inventory_updates_is_called(self, scm_inventory_source, scm_revision_file):
|
def test_dependent_inventory_updates_is_called(self, scm_inventory_source, scm_revision_file):
|
||||||
|
|||||||
Reference in New Issue
Block a user