From 3e29d447436560627fa43e10ddcc63633919c3ea Mon Sep 17 00:00:00 2001 From: "Gael Chamoulaud (Strider)" Date: Tue, 11 May 2021 10:37:32 +0200 Subject: [PATCH] Disable quiet mode run when using an Ansible Custom Callback This patch disables the Ansible execution quiet mode when running validations with a different Callback by passing --extra-env-vars ANSIBLE_STDOUT_CALLBACK=default in the command line. Change-Id: Ied50aaea240943b1eeba0c3c35b74bc7ccdb454c Signed-off-by: Gael Chamoulaud (Strider) --- validations_libs/cli/run.py | 16 +++++++++++--- validations_libs/tests/cli/test_run.py | 29 ++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/validations_libs/cli/run.py b/validations_libs/cli/run.py index a898dd32..65938d74 100644 --- a/validations_libs/cli/run.py +++ b/validations_libs/cli/run.py @@ -141,6 +141,15 @@ class Run(Command): v_actions = ValidationActions( validation_path=parsed_args.validation_dir) + # Ansible execution should be quiet while using the validations_json + # default callback and be verbose while passing ANSIBLE_SDTOUT_CALLBACK + # environment variable to Ansible through the --extra-env-vars argument + quiet_mode = True + extra_env_vars = parsed_args.extra_env_vars + if extra_env_vars: + if "ANSIBLE_STDOUT_CALLBACK" in extra_env_vars.keys(): + quiet_mode = False + extra_vars = parsed_args.extra_vars if parsed_args.extra_vars_file: try: @@ -161,9 +170,10 @@ class Run(Command): validations_dir=parsed_args.validation_dir, base_dir=parsed_args.ansible_base_dir, validation_name=parsed_args.validation_name, - extra_env_vars=parsed_args.extra_env_vars, - quiet=True, - ssh_user=parsed_args.ssh_user) + extra_env_vars=extra_env_vars, + quiet=quiet_mode, + ssh_user=parsed_args.ssh_user, + ) except RuntimeError as e: raise RuntimeError(e) diff --git a/validations_libs/tests/cli/test_run.py b/validations_libs/tests/cli/test_run.py index 7a34828a..78e16f87 100644 --- a/validations_libs/tests/cli/test_run.py +++ b/validations_libs/tests/cli/test_run.py @@ -181,6 +181,35 @@ class TestRun(BaseCommand): self.cmd.take_action(parsed_args) mock_run.assert_called_with(**run_called_args) + @mock.patch('getpass.getuser', + return_value='doe') + @mock.patch('validations_libs.validation_actions.ValidationActions.' + 'run_validations', + return_value=fakes.FAKE_SUCCESS_RUN) + def test_run_command_extra_env_vars_with_custom_callback(self, + mock_run, + mock_user): + run_called_args = { + 'inventory': 'localhost', + 'limit_hosts': None, + 'group': [], + 'extra_vars': None, + 'validations_dir': '/usr/share/ansible/validation-playbooks', + 'base_dir': '/usr/share/ansible/', + 'validation_name': ['foo'], + 'extra_env_vars': {'ANSIBLE_STDOUT_CALLBACK': 'default'}, + 'quiet': False, + 'ssh_user': 'doe'} + + arglist = ['--validation', 'foo', + '--extra-env-vars', 'ANSIBLE_STDOUT_CALLBACK=default'] + verifylist = [('validation_name', ['foo']), + ('extra_env_vars', {'ANSIBLE_STDOUT_CALLBACK': 'default'})] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + self.cmd.take_action(parsed_args) + mock_run.assert_called_with(**run_called_args) + @mock.patch('getpass.getuser', return_value='doe') @mock.patch('validations_libs.validation_actions.ValidationActions.'