mirror of
https://github.com/ansible/awx.git
synced 2026-05-17 22:37:41 -02:30
Refactor some tower periodic tasks to label as awx
This commit is contained in:
@@ -193,7 +193,7 @@ class IsolatedManager(object):
|
|||||||
isolated_ssh_path = None
|
isolated_ssh_path = None
|
||||||
try:
|
try:
|
||||||
if getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', None):
|
if getattr(settings, 'AWX_ISOLATED_PRIVATE_KEY', None):
|
||||||
isolated_ssh_path = tempfile.mkdtemp(prefix='ansible_awx_isolated', dir=settings.AWX_PROOT_BASE_PATH)
|
isolated_ssh_path = tempfile.mkdtemp(prefix='awx_isolated', dir=settings.AWX_PROOT_BASE_PATH)
|
||||||
os.chmod(isolated_ssh_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
|
os.chmod(isolated_ssh_path, stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
|
||||||
isolated_key = os.path.join(isolated_ssh_path, '.isolated')
|
isolated_key = os.path.join(isolated_ssh_path, '.isolated')
|
||||||
ssh_sock = os.path.join(isolated_ssh_path, '.isolated_ssh_auth.sock')
|
ssh_sock = os.path.join(isolated_ssh_path, '.isolated_ssh_auth.sock')
|
||||||
|
|||||||
@@ -161,7 +161,7 @@ class TaskManager():
|
|||||||
job.save(update_fields=['status', 'job_explanation'])
|
job.save(update_fields=['status', 'job_explanation'])
|
||||||
connection.on_commit(lambda: job.websocket_emit_status('failed'))
|
connection.on_commit(lambda: job.websocket_emit_status('failed'))
|
||||||
|
|
||||||
# TODO: should we emit a status on the socket here similar to tasks.py tower_periodic_scheduler() ?
|
# TODO: should we emit a status on the socket here similar to tasks.py awx_periodic_scheduler() ?
|
||||||
#emit_websocket_notification('/socket.io/jobs', '', dict(id=))
|
#emit_websocket_notification('/socket.io/jobs', '', dict(id=))
|
||||||
|
|
||||||
# See comment in tasks.py::RunWorkflowJob::run()
|
# See comment in tasks.py::RunWorkflowJob::run()
|
||||||
|
|||||||
@@ -213,7 +213,7 @@ def cluster_node_heartbeat(self):
|
|||||||
|
|
||||||
|
|
||||||
@task(bind=True, base=LogErrorsTask)
|
@task(bind=True, base=LogErrorsTask)
|
||||||
def tower_isolated_heartbeat(self):
|
def awx_isolated_heartbeat(self):
|
||||||
local_hostname = settings.CLUSTER_HOST_ID
|
local_hostname = settings.CLUSTER_HOST_ID
|
||||||
logger.debug("Controlling node checking for any isolated management tasks.")
|
logger.debug("Controlling node checking for any isolated management tasks.")
|
||||||
poll_interval = settings.AWX_ISOLATED_PERIODIC_CHECK
|
poll_interval = settings.AWX_ISOLATED_PERIODIC_CHECK
|
||||||
@@ -237,7 +237,7 @@ def tower_isolated_heartbeat(self):
|
|||||||
|
|
||||||
|
|
||||||
@task(bind=True, queue='tower', base=LogErrorsTask)
|
@task(bind=True, queue='tower', base=LogErrorsTask)
|
||||||
def tower_periodic_scheduler(self):
|
def awx_periodic_scheduler(self):
|
||||||
run_now = now()
|
run_now = now()
|
||||||
state = TowerScheduleState.get_solo()
|
state = TowerScheduleState.get_solo()
|
||||||
last_run = state.schedule_last_run
|
last_run = state.schedule_last_run
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from django.utils.timezone import now, timedelta
|
|||||||
|
|
||||||
from awx.main.tasks import (
|
from awx.main.tasks import (
|
||||||
RunProjectUpdate, RunInventoryUpdate,
|
RunProjectUpdate, RunInventoryUpdate,
|
||||||
tower_isolated_heartbeat,
|
awx_isolated_heartbeat,
|
||||||
isolated_manager
|
isolated_manager
|
||||||
)
|
)
|
||||||
from awx.main.models import (
|
from awx.main.models import (
|
||||||
@@ -121,7 +121,7 @@ class TestIsolatedManagementTask:
|
|||||||
original_isolated_instance = needs_updating.instances.all().first()
|
original_isolated_instance = needs_updating.instances.all().first()
|
||||||
with mock.patch('awx.main.tasks.settings', MockSettings()):
|
with mock.patch('awx.main.tasks.settings', MockSettings()):
|
||||||
with mock.patch.object(isolated_manager.IsolatedManager, 'health_check') as check_mock:
|
with mock.patch.object(isolated_manager.IsolatedManager, 'health_check') as check_mock:
|
||||||
tower_isolated_heartbeat()
|
awx_isolated_heartbeat()
|
||||||
iso_instance = Instance.objects.get(hostname='isolated')
|
iso_instance = Instance.objects.get(hostname='isolated')
|
||||||
call_args, _ = check_mock.call_args
|
call_args, _ = check_mock.call_args
|
||||||
assert call_args[0][0] == iso_instance
|
assert call_args[0][0] == iso_instance
|
||||||
@@ -131,7 +131,7 @@ class TestIsolatedManagementTask:
|
|||||||
def test_does_not_take_action(self, control_instance, just_updated):
|
def test_does_not_take_action(self, control_instance, just_updated):
|
||||||
with mock.patch('awx.main.tasks.settings', MockSettings()):
|
with mock.patch('awx.main.tasks.settings', MockSettings()):
|
||||||
with mock.patch.object(isolated_manager.IsolatedManager, 'health_check') as check_mock:
|
with mock.patch.object(isolated_manager.IsolatedManager, 'health_check') as check_mock:
|
||||||
tower_isolated_heartbeat()
|
awx_isolated_heartbeat()
|
||||||
iso_instance = Instance.objects.get(hostname='isolated')
|
iso_instance = Instance.objects.get(hostname='isolated')
|
||||||
check_mock.assert_not_called()
|
check_mock.assert_not_called()
|
||||||
assert iso_instance.capacity == 103
|
assert iso_instance.capacity == 103
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ from datetime import timedelta
|
|||||||
|
|
||||||
@pytest.mark.parametrize("job_name,function_path", [
|
@pytest.mark.parametrize("job_name,function_path", [
|
||||||
('admin_checks', 'awx.main.tasks.run_administrative_checks'),
|
('admin_checks', 'awx.main.tasks.run_administrative_checks'),
|
||||||
('tower_scheduler', 'awx.main.tasks.tower_periodic_scheduler'),
|
('tower_scheduler', 'awx.main.tasks.awx_periodic_scheduler'),
|
||||||
])
|
])
|
||||||
def test_CELERYBEAT_SCHEDULE(mocker, job_name, function_path):
|
def test_CELERYBEAT_SCHEDULE(mocker, job_name, function_path):
|
||||||
assert job_name in settings.CELERYBEAT_SCHEDULE
|
assert job_name in settings.CELERYBEAT_SCHEDULE
|
||||||
|
|||||||
@@ -445,7 +445,7 @@ CELERY_ROUTES = {'awx.main.scheduler.tasks.run_task_manager': {'queue': 'tower',
|
|||||||
|
|
||||||
CELERYBEAT_SCHEDULE = {
|
CELERYBEAT_SCHEDULE = {
|
||||||
'tower_scheduler': {
|
'tower_scheduler': {
|
||||||
'task': 'awx.main.tasks.tower_periodic_scheduler',
|
'task': 'awx.main.tasks.awx_periodic_scheduler',
|
||||||
'schedule': timedelta(seconds=30),
|
'schedule': timedelta(seconds=30),
|
||||||
'options': {'expires': 20,}
|
'options': {'expires': 20,}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ CELERY_ROUTES['awx.main.tasks.cluster_node_heartbeat'] = {'queue': CLUSTER_HOST_
|
|||||||
# Production only runs this schedule on controlling nodes
|
# Production only runs this schedule on controlling nodes
|
||||||
# but development will just run it on all nodes
|
# but development will just run it on all nodes
|
||||||
CELERYBEAT_SCHEDULE['isolated_heartbeat'] = {
|
CELERYBEAT_SCHEDULE['isolated_heartbeat'] = {
|
||||||
'task': 'awx.main.tasks.tower_isolated_heartbeat',
|
'task': 'awx.main.tasks.awx_isolated_heartbeat',
|
||||||
'schedule': timedelta(seconds = AWX_ISOLATED_PERIODIC_CHECK),
|
'schedule': timedelta(seconds = AWX_ISOLATED_PERIODIC_CHECK),
|
||||||
'options': {'expires': AWX_ISOLATED_PERIODIC_CHECK * 2,}
|
'options': {'expires': AWX_ISOLATED_PERIODIC_CHECK * 2,}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user