diff --git a/lib/ansible/parsing/mod_args.py b/lib/ansible/parsing/mod_args.py index a6ccaa0a565..ad4293013b3 100644 --- a/lib/ansible/parsing/mod_args.py +++ b/lib/ansible/parsing/mod_args.py @@ -275,7 +275,14 @@ class ModuleArgsParser: # if we didn't see any module in the task at all, it's not a task really if action is None: - raise AnsibleParserError("no action detected in task", obj=self._task_ds) + if 'ping' not in module_loader: + raise AnsibleParserError("The requested action was not found in configured module paths. " + "Additionally, core modules are missing. If this is a checkout, " + "run 'git submodule update --init --recursive' to correct this problem.", + obj=self._task_ds) + + else: + raise AnsibleParserError("no action detected in task", obj=self._task_ds) elif args.get('_raw_params', '') != '' and action not in RAW_PARAM_MODULES: templar = Templar(loader=None) raw_params = args.pop('_raw_params')