Expose callback_whitelist option to Run action

The callback_whitelist is not usable via the Run action for now.
The patch allow users to pass  a list of callbacks to whitelist
during the validation run.

Altered docstrings to include changed type spec.

Change-Id: I37eb369701ccbd1d3fd4a7601a5e626d5867381d
Signed-off-by: Jiri Podivin <jpodivin@redhat.com>
Signed-off-by: Mathieu Bultel <mat.bultel@gmail.com>
This commit is contained in:
Mathieu Bultel 2021-02-02 09:28:04 +01:00 committed by mbu
parent 0131dcc00d
commit 6a2008950f
3 changed files with 20 additions and 6 deletions

View File

@ -339,7 +339,7 @@ class Ansible(object):
:param callback_whitelist: Comma separated list of callback plugins. :param callback_whitelist: Comma separated list of callback plugins.
Custom output_callback is also whitelisted. Custom output_callback is also whitelisted.
(Defaults to ``None``) (Defaults to ``None``)
:type callback_whitelist: ``string`` :type callback_whitelist: ``list`` or ``string``
:param ansible_cfg: Path to an ansible configuration file. One will be :param ansible_cfg: Path to an ansible configuration file. One will be
generated in the artifact path if this option is None. generated in the artifact path if this option is None.
:type ansible_cfg: ``string`` :type ansible_cfg: ``string``
@ -389,6 +389,9 @@ class Ansible(object):
env = {} env = {}
env = os.environ.copy() env = os.environ.copy()
extravars = self._get_extra_vars(extra_vars) extravars = self._get_extra_vars(extra_vars)
if isinstance(callback_whitelist, list):
callback_whitelist = ','.join(callback_whitelist)
callback_whitelist, output_callback = self._callbacks( callback_whitelist, output_callback = self._callbacks(
callback_whitelist, callback_whitelist,
output_callback, output_callback,

View File

@ -45,9 +45,11 @@ class TestValidationActions(TestCase):
'My Validation Two Name', 'My Validation Two Name',
['prep', 'pre-introspection'])])) ['prep', 'pre-introspection'])]))
@mock.patch('validations_libs.utils.create_artifacts_dir',
return_value=('1234', '/tmp/'))
@mock.patch('validations_libs.utils.get_validations_playbook', @mock.patch('validations_libs.utils.get_validations_playbook',
return_value=['/tmp/foo/fake.yaml']) return_value=['/tmp/foo/fake.yaml'])
def test_validation_skip_validation(self, mock_validation_play): def test_validation_skip_validation(self, mock_validation_play, mock_tmp):
playbook = ['fake.yaml'] playbook = ['fake.yaml']
inventory = 'tmp/inventory.yaml' inventory = 'tmp/inventory.yaml'
@ -80,6 +82,7 @@ class TestValidationActions(TestCase):
'parallel_run': True, 'parallel_run': True,
'inventory': 'tmp/inventory.yaml', 'inventory': 'tmp/inventory.yaml',
'output_callback': 'validation_stdout', 'output_callback': 'validation_stdout',
'callback_whitelist': None,
'quiet': True, 'quiet': True,
'extra_vars': None, 'extra_vars': None,
'limit_hosts': '!cloud1', 'limit_hosts': '!cloud1',
@ -104,7 +107,8 @@ class TestValidationActions(TestCase):
run_return = run.run_validations(playbook, inventory, run_return = run.run_validations(playbook, inventory,
validations_dir='/tmp/foo', validations_dir='/tmp/foo',
skip_list=skip_list, skip_list=skip_list,
limit_hosts=None) limit_hosts='!cloud1',
)
mock_ansible_run.assert_called_with(**run_called_args) mock_ansible_run.assert_called_with(**run_called_args)
@mock.patch('validations_libs.utils.get_validations_playbook', @mock.patch('validations_libs.utils.get_validations_playbook',
@ -123,13 +127,14 @@ class TestValidationActions(TestCase):
'parallel_run': True, 'parallel_run': True,
'inventory': 'tmp/inventory.yaml', 'inventory': 'tmp/inventory.yaml',
'output_callback': 'validation_stdout', 'output_callback': 'validation_stdout',
'callback_whitelist': None,
'quiet': True, 'quiet': True,
'extra_vars': None, 'extra_vars': None,
'limit_hosts': '!cloud1,cloud,!cloud2', 'limit_hosts': '!cloud1,cloud,!cloud2',
'ansible_artifact_path': '/tmp/',
'extra_env_variables': None, 'extra_env_variables': None,
'ansible_cfg': None, 'ansible_cfg': None,
'gathering_policy': 'explicit', 'gathering_policy': 'explicit',
'ansible_artifact_path': '/tmp/',
'log_path': None, 'log_path': None,
'run_async': False, 'run_async': False,
'python_interpreter': None 'python_interpreter': None

View File

@ -210,8 +210,9 @@ class ValidationActions(object):
workdir=None, limit_hosts=None, run_async=False, workdir=None, limit_hosts=None, run_async=False,
base_dir=constants.DEFAULT_VALIDATIONS_BASEDIR, base_dir=constants.DEFAULT_VALIDATIONS_BASEDIR,
log_path=None, python_interpreter=None, log_path=None, python_interpreter=None,
output_callback='validation_stdout', skip_list=None,
skip_list=None): callback_whitelist=None,
output_callback='validation_stdout'):
"""Run one or multiple validations by name(s) or by group(s) """Run one or multiple validations by name(s) or by group(s)
:param validation_name: A list of validation names :param validation_name: A list of validation names
@ -254,6 +255,10 @@ class ValidationActions(object):
``auto_silent`` or the default one ``auto_silent`` or the default one
``auto_legacy``) ``auto_legacy``)
:type python_interpreter: ``string`` :type python_interpreter: ``string``
:param callback_whitelist: Comma separated list of callback plugins.
Custom output_callback is also whitelisted.
(Defaults to ``None``)
:type callback_whitelist: ``list`` or ``string``
:param output_callback: The Callback plugin to use. :param output_callback: The Callback plugin to use.
(Defaults to 'validation_stdout') (Defaults to 'validation_stdout')
:type output_callback: ``string`` :type output_callback: ``string``
@ -346,6 +351,7 @@ class ValidationActions(object):
parallel_run=True, parallel_run=True,
inventory=inventory, inventory=inventory,
output_callback=output_callback, output_callback=output_callback,
callback_whitelist=callback_whitelist,
quiet=quiet, quiet=quiet,
extra_vars=extra_vars, extra_vars=extra_vars,
limit_hosts=_hosts, limit_hosts=_hosts,