diff --git a/.ansible-lint b/.ansible-lint index c684fbb8fe5..eca18d66925 100644 --- a/.ansible-lint +++ b/.ansible-lint @@ -8,8 +8,9 @@ exclude_paths: # Mock modules or roles in order to pass ansible-playbook --syntax-check mock_modules: - zuul_return - - fake_namespace.fake_collection.fake_module # note the foo.bar is invalid as being neither a module or a collection + - fake_namespace.fake_collection.fake_module + - fake_namespace.fake_collection.fake_module.fake_submodule mock_roles: - mocked_role - author.role_name # old standalone galaxy role diff --git a/src/ansiblelint/_prerun.py b/src/ansiblelint/_prerun.py index bfde0b77e4b..6806c44d881 100644 --- a/src/ansiblelint/_prerun.py +++ b/src/ansiblelint/_prerun.py @@ -226,9 +226,14 @@ def _prepare_ansible_paths() -> None: def _make_module_stub(module_name: str) -> None: # a.b.c is treated a collection - if re.match(r"\w+\.\w+\.\w+", module_name): - namespace, collection, module_file = module_name.split(".") + if re.match(r"\w+\.\w+\.[\.\w]+$", module_name): + namespace, collection, module_file = module_name.split(".", 2) path = f"{ options.project_dir }/.cache/collections/ansible_collections/{ namespace }/{ collection }/plugins/modules" + if "." in module_file: + parts = module_file.split(".") + path += "/" + "/".join(parts[0:-1]) + module_file = parts[-1] + print(f"ERROR: {path} -> {module_file}") os.makedirs(path, exist_ok=True) _write_module_stub( filename=f"{path}/{module_file}.py", @@ -274,7 +279,7 @@ def _update_env(varname: str, value: List[str], default: str = "") -> None: def _perform_mockings() -> None: """Mock modules and roles.""" for role_name in options.mock_roles: - if re.match(r"\w+\.\w+\.\w+", role_name): + if re.match(r"\w+\.\w+\.\w+$", role_name): namespace, collection, role_dir = role_name.split(".") path = f".cache/collections/ansible_collections/{ namespace }/{ collection }/roles/{ role_dir }/" else: