diff --git a/validations_libs/cli/run.py b/validations_libs/cli/run.py index 6f1f4bb1..fb29cb37 100644 --- a/validations_libs/cli/run.py +++ b/validations_libs/cli/run.py @@ -94,6 +94,15 @@ class Run(Command): "will override the other(s)") ) + parser.add_argument( + '--validation-log-dir', + dest='log_path', + default=constants.VALIDATIONS_LOG_BASEDIR, + help=( + "Path where the log files and artifacts will be located. "), + metavar='' + ) + extra_vars_group = parser.add_mutually_exclusive_group(required=False) extra_vars_group.add_argument( '--extra-vars', @@ -184,6 +193,7 @@ class Run(Command): python_interpreter=parsed_args.python_interpreter, quiet=quiet_mode, ssh_user=parsed_args.ssh_user, + log_path=parsed_args.log_path ) 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 da718f8e..e8a1a58c 100644 --- a/validations_libs/tests/cli/test_run.py +++ b/validations_libs/tests/cli/test_run.py @@ -58,13 +58,15 @@ class TestRun(BaseCommand): self.assertRaises(Exception, self.check_parser, self.cmd, arglist, verifylist) + @mock.patch('validations_libs.constants.VALIDATIONS_LOG_BASEDIR') @mock.patch('validations_libs.cli.common.print_dict') @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_vars(self, mock_run, mock_user, mock_print): + def test_run_command_extra_vars(self, mock_run, mock_user, mock_print, + mock_log_dir): run_called_args = { 'inventory': 'localhost', 'limit_hosts': None, @@ -76,7 +78,8 @@ class TestRun(BaseCommand): 'extra_env_vars': None, 'python_interpreter': sys.executable, 'quiet': True, - 'ssh_user': 'doe'} + 'ssh_user': 'doe', + 'log_path': mock_log_dir} arglist = ['--validation', 'foo', '--extra-vars', 'key=value'] @@ -87,6 +90,7 @@ class TestRun(BaseCommand): self.cmd.take_action(parsed_args) mock_run.assert_called_with(**run_called_args) + @mock.patch('validations_libs.constants.VALIDATIONS_LOG_BASEDIR') @mock.patch('validations_libs.cli.common.print_dict') @mock.patch('getpass.getuser', return_value='doe') @@ -94,7 +98,7 @@ class TestRun(BaseCommand): 'run_validations', return_value=fakes.FAKE_SUCCESS_RUN) def test_run_command_extra_vars_twice(self, mock_run, mock_user, - mock_print): + mock_print, mock_log_dir): run_called_args = { 'inventory': 'localhost', 'limit_hosts': None, @@ -106,7 +110,8 @@ class TestRun(BaseCommand): 'extra_env_vars': None, 'python_interpreter': sys.executable, 'quiet': True, - 'ssh_user': 'doe'} + 'ssh_user': 'doe', + 'log_path': mock_log_dir} arglist = ['--validation', 'foo', '--extra-vars', 'key=value1', @@ -128,6 +133,7 @@ class TestRun(BaseCommand): self.assertRaises(Exception, self.check_parser, self.cmd, arglist, verifylist) + @mock.patch('validations_libs.constants.VALIDATIONS_LOG_BASEDIR') @mock.patch('yaml.safe_load', return_value={'key': 'value'}) @mock.patch('six.moves.builtins.open') @mock.patch('getpass.getuser', @@ -136,7 +142,8 @@ class TestRun(BaseCommand): 'run_validations', return_value=fakes.FAKE_SUCCESS_RUN) def test_run_command_extra_vars_file(self, mock_run, mock_user, mock_open, - mock_yaml): + mock_yaml, mock_log_dir): + run_called_args = { 'inventory': 'localhost', 'limit_hosts': None, @@ -148,7 +155,8 @@ class TestRun(BaseCommand): 'extra_env_vars': None, 'python_interpreter': sys.executable, 'quiet': True, - 'ssh_user': 'doe'} + 'ssh_user': 'doe', + 'log_path': mock_log_dir} arglist = ['--validation', 'foo', '--extra-vars-file', '/foo/vars.yaml'] @@ -159,12 +167,13 @@ class TestRun(BaseCommand): self.cmd.take_action(parsed_args) mock_run.assert_called_with(**run_called_args) + @mock.patch('validations_libs.constants.VALIDATIONS_LOG_BASEDIR') @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(self, mock_run, mock_user): + def test_run_command_extra_env_vars(self, mock_run, mock_user, mock_log_dir): run_called_args = { 'inventory': 'localhost', 'limit_hosts': None, @@ -176,7 +185,8 @@ class TestRun(BaseCommand): 'extra_env_vars': {'key': 'value'}, 'python_interpreter': sys.executable, 'quiet': True, - 'ssh_user': 'doe'} + 'ssh_user': 'doe', + 'log_path': mock_log_dir} arglist = ['--validation', 'foo', '--extra-env-vars', 'key=value'] @@ -187,6 +197,7 @@ class TestRun(BaseCommand): self.cmd.take_action(parsed_args) mock_run.assert_called_with(**run_called_args) + @mock.patch('validations_libs.constants.VALIDATIONS_LOG_BASEDIR') @mock.patch('getpass.getuser', return_value='doe') @mock.patch('validations_libs.validation_actions.ValidationActions.' @@ -194,10 +205,13 @@ class TestRun(BaseCommand): return_value=fakes.FAKE_SUCCESS_RUN) def test_run_command_extra_env_vars_with_custom_callback(self, mock_run, - mock_user): + mock_user, + mock_log_dir): run_called_args = { 'inventory': 'localhost', 'limit_hosts': None, + 'log_path': mock_log_dir, + 'quiet': False, 'group': [], 'extra_vars': None, 'validations_dir': '/usr/share/ansible/validation-playbooks', @@ -217,12 +231,13 @@ class TestRun(BaseCommand): self.cmd.take_action(parsed_args) mock_run.assert_called_with(**run_called_args) + @mock.patch('validations_libs.constants.VALIDATIONS_LOG_BASEDIR') @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_twice(self, mock_run, mock_user): + def test_run_command_extra_env_vars_twice(self, mock_run, mock_user, mock_log_dir): run_called_args = { 'inventory': 'localhost', 'limit_hosts': None, @@ -234,7 +249,8 @@ class TestRun(BaseCommand): 'extra_env_vars': {'key': 'value2'}, 'python_interpreter': sys.executable, 'quiet': True, - 'ssh_user': 'doe'} + 'ssh_user': 'doe', + 'log_path': mock_log_dir} arglist = ['--validation', 'foo', '--extra-env-vars', 'key=value1', @@ -246,13 +262,16 @@ class TestRun(BaseCommand): self.cmd.take_action(parsed_args) mock_run.assert_called_with(**run_called_args) + @mock.patch('validations_libs.constants.VALIDATIONS_LOG_BASEDIR') @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_and_extra_vars(self, mock_run, - mock_user): + def test_run_command_extra_env_vars_and_extra_vars(self, + mock_run, + mock_user, + mock_log_dir): run_called_args = { 'inventory': 'localhost', 'limit_hosts': None, @@ -264,7 +283,8 @@ class TestRun(BaseCommand): 'extra_env_vars': {'key2': 'value2'}, 'python_interpreter': sys.executable, 'quiet': True, - 'ssh_user': 'doe'} + 'ssh_user': 'doe', + 'log_path': mock_log_dir} arglist = ['--validation', 'foo', '--extra-vars', 'key=value',