@@ -226,25 +226,28 @@ def _prepare_ansible_paths() -> None:
226
226
227
227
def _make_module_stub (module_name : str ) -> None :
228
228
# a.b.c is treated a collection
229
- if re .match (r"\w+\.\w+\.\w+" , module_name ):
230
- namespace , collection , module_file = module_name .split ("." )
231
- path = f"{ options .project_dir } /.cache/collections/ansible_collections/{ namespace } /{ collection } /plugins/modules"
229
+ if re .match (r"^(\w+|\w+\.\w+\.[\.\w]+)$" , module_name ):
230
+ parts = module_name .split ("." )
231
+ if len (parts ) < 3 :
232
+ path = f"{ options .project_dir } /.cache/modules"
233
+ module_file = f"{ options .project_dir } /.cache/modules/{ module_name } .py"
234
+ namespace = None
235
+ collection = None
236
+ else :
237
+ namespace = parts [0 ]
238
+ collection = parts [1 ]
239
+ path = f"{ options .project_dir } /.cache/collections/ansible_collections/{ namespace } /{ collection } /plugins/modules/{ '/' .join (parts [2 :- 1 ]) } "
240
+ module_file = f"{ path } /{ parts [- 1 ]} .py"
232
241
os .makedirs (path , exist_ok = True )
233
242
_write_module_stub (
234
- filename = f" { path } / { module_file } .py" ,
243
+ filename = module_file ,
235
244
name = module_file ,
236
245
namespace = namespace ,
237
246
collection = collection ,
238
247
)
239
- elif "." in module_name :
248
+ else :
240
249
_logger .error ("Config error: %s is not a valid module name." , module_name )
241
250
sys .exit (INVALID_CONFIG_RC )
242
- else :
243
- os .makedirs (f"{ options .project_dir } /.cache/modules" , exist_ok = True )
244
- _write_module_stub (
245
- filename = f"{ options .project_dir } /.cache/modules/{ module_name } .py" ,
246
- name = module_name ,
247
- )
248
251
249
252
250
253
def _write_module_stub (
@@ -274,7 +277,7 @@ def _update_env(varname: str, value: List[str], default: str = "") -> None:
274
277
def _perform_mockings () -> None :
275
278
"""Mock modules and roles."""
276
279
for role_name in options .mock_roles :
277
- if re .match (r"\w+\.\w+\.\w+" , role_name ):
280
+ if re .match (r"\w+\.\w+\.\w+$ " , role_name ):
278
281
namespace , collection , role_dir = role_name .split ("." )
279
282
path = f".cache/collections/ansible_collections/{ namespace } /{ collection } /roles/{ role_dir } /"
280
283
else :
0 commit comments