diff --git a/awx/main/tests/unit/utils/test_reload.py b/awx/main/tests/unit/utils/test_reload.py index 83466c9cc8..26f2d42ece 100644 --- a/awx/main/tests/unit/utils/test_reload.py +++ b/awx/main/tests/unit/utils/test_reload.py @@ -3,10 +3,15 @@ from awx.main.utils import reload def test_produce_supervisor_command(mocker): - with mocker.patch.object(reload.subprocess, 'Popen'): + communicate_mock = mocker.MagicMock(return_value=('Everything is fine', '')) + mock_process = mocker.MagicMock() + mock_process.communicate = communicate_mock + Popen_mock = mocker.MagicMock(return_value=mock_process) + with mocker.patch.object(reload.subprocess, 'Popen', Popen_mock): reload._supervisor_service_command(['beat', 'callback', 'fact'], "restart") reload.subprocess.Popen.assert_called_once_with( - ['supervisorctl', 'restart', 'tower-processes:receiver', 'tower-processes:factcacher']) + ['supervisorctl', 'restart', 'tower-processes:receiver', 'tower-processes:factcacher'], + stderr=-1, stdin=-1, stdout=-1) def test_routing_of_service_restarts_works(mocker): diff --git a/awx/main/utils/reload.py b/awx/main/utils/reload.py index 6a88062ab5..25a4d17a57 100644 --- a/awx/main/utils/reload.py +++ b/awx/main/utils/reload.py @@ -49,7 +49,15 @@ def _supervisor_service_command(service_internal_names, command): args.extend([command]) args.extend(programs) logger.debug('Issuing command to restart services, args={}'.format(args)) - subprocess.Popen(args) + supervisor_process = subprocess.Popen(args, stdin=subprocess.PIPE, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) + restart_stdout, restart_err = supervisor_process.communicate() + restart_code = supervisor_process.returncode + if restart_code or restart_err: + logger.error('supervisorctl restart errored with exit code `{}`, stdout:\n{}stderr:\n{}'.format( + restart_code, restart_stdout.strip(), restart_err.strip())) + else: + logger.info('supervisorctl restart finished, stdout:\n{}'.format(restart_stdout.strip())) def restart_local_services(service_internal_names):