From 4a6dee4f2107903795685c63a3a9c61cae82569c Mon Sep 17 00:00:00 2001 From: Kamil Páral Date: Feb 24 2017 15:18:38 +0000 Subject: log task name, ignore empty namespace It's impossible to figure out the task name from task log only. This adds a printout of the task name after formula is parsed. Also, if namespace is empty, use the default value, instead of `None`. Differential Revision: https://phab.qa.fedoraproject.org/D1151 --- diff --git a/libtaskotron/executor.py b/libtaskotron/executor.py index 383e594..7087fe0 100644 --- a/libtaskotron/executor.py +++ b/libtaskotron/executor.py @@ -29,6 +29,8 @@ class Executor(object): '''This class serves the purpose of actual task execution. It is instantiated by :class:`.Overlord`, :class:`.PersistentMinion` or :class:`.DisposableMinion`. + :cvar str default_namespace: namespace to be used when the formula doesn't contain a namespace + definition :ivar dict formula: parsed task formula :ivar dict arg_data: processed cli arguments with some extra runtime variables :ivar str workdir: path to working directory; a temporary one is created during execution if @@ -39,6 +41,8 @@ class Executor(object): directive was not used ''' + default_namespace = 'scratch' + def __init__(self, formula, arg_data, workdir=None): self.formula = formula self.arg_data = arg_data @@ -81,7 +85,7 @@ class Executor(object): log.debug("Current workdir: %s", self.workdir) self.arg_data['workdir'] = self.workdir self.arg_data['checkname'] = self.formula['name'] - self.arg_data['namespace'] = self.formula.get('namespace', 'scratch') + self.arg_data['namespace'] = self.formula.get('namespace') or self.default_namespace # override variable values for var, val in self.arg_data['override'].items(): diff --git a/libtaskotron/overlord.py b/libtaskotron/overlord.py index 0c7477b..d29c0cd 100644 --- a/libtaskotron/overlord.py +++ b/libtaskotron/overlord.py @@ -33,6 +33,10 @@ class Overlord(object): raise exc.TaskotronYamlError('Task formula file should not be empty: %s' % arg_data['task']) + log.debug('Found task: %s.%s', + self.formula.get('namespace') or executor.Executor.default_namespace, + self.formula['name']) + def _get_runner(self): """Decide the run mode and get appropriate runner (Executor or Minion). diff --git a/testing/test_executor.py b/testing/test_executor.py index a74f51e..fafa0ab 100644 --- a/testing/test_executor.py +++ b/testing/test_executor.py @@ -363,7 +363,7 @@ class TestExecutorRenderAction(): @pytest.mark.usefixtures('setup') -class TestExecutorCheckOverride(): +class TestExecutorRun(): @pytest.fixture def setup(self): @@ -373,13 +373,20 @@ class TestExecutorCheckOverride(): 'uuid': '20150220_134110_955656', 'ssh': None, 'local': False, - 'override': ["workdir='/some/dir/'"], - 'task': 'task.yaml'} + 'task': 'task.yaml', + 'override': []} + self.ref_argdata = main.process_args(self.ref_input) + self.ref_formula = {'name': 'rpmlint', + 'namespace': 'dist', + 'desc': 'test task', + 'maintainer': 'Not Sure', + 'actions': []} def test_override_existing(self): - ref_params = main.process_args(self.ref_input) + self.ref_input['override'] = ["workdir='/some/dir/'"] + self.ref_argdata = main.process_args(self.ref_input) - test_executor = executor.Executor(Dingus(), ref_params) + test_executor = executor.Executor(self.ref_formula, self.ref_argdata) test_executor._do_actions = lambda: None test_executor._run() @@ -387,14 +394,34 @@ class TestExecutorCheckOverride(): def test_override_nonexisting(self): self.ref_input['override'] = ["friendship='is magic'"] - ref_params = main.process_args(self.ref_input) + self.ref_argdata = main.process_args(self.ref_input) - test_executor = executor.Executor(Dingus(), ref_params) + test_executor = executor.Executor(self.ref_formula, self.ref_argdata) test_executor._do_actions = lambda: None test_executor._run() assert test_executor.arg_data['friendship'] == "is magic" + def test_no_namespace(self): + '''default namespace should be used for missing namespace''' + self.ref_formula.pop('namespace', None) + + test_executor = executor.Executor(self.ref_formula, self.ref_argdata) + test_executor._do_actions = lambda: None + test_executor._run() + + assert test_executor.arg_data['namespace'] == executor.Executor.default_namespace + + def test_empty_namespace(self): + '''default namespace should be used for empty namespace''' + self.ref_formula['namespace'] = None + + test_executor = executor.Executor(self.ref_formula, self.ref_argdata) + test_executor._do_actions = lambda: None + test_executor._run() + + assert test_executor.arg_data['namespace'] == executor.Executor.default_namespace + @pytest.mark.usefixtures('setup') class TestExecutorPrepareTask():