Tolerate win line endings on windows module_util load (#37291)

* tolerate windows line endings when loading windows module utils.  Helpful for old custom windows modules.

* add test modules to demonstrate win line ending module load behaviour.

* attempt to fix sanity check failures

* pep8 fix

* explict skip of test modules from shebang check (core modules must still have expected unix style line endings)

* switch to rstrip() following core team meeting feedback
This commit is contained in:
jhawkesworth 2018-04-05 22:13:31 +01:00 committed by Jordan Borean
parent 4e38036bbd
commit ad94d03ba1
6 changed files with 31 additions and 1 deletions

View file

@ -826,7 +826,7 @@ def _find_module_utils(module_name, b_module_data, module_path, module_args, tas
become_required = True become_required = True
for m in set(module_names): for m in set(module_names):
m = to_text(m) m = to_text(m).rstrip() # tolerate windows line endings
mu_path = ps_module_utils_loader.find_plugin(m, ".psm1") mu_path = ps_module_utils_loader.find_plugin(m, ".psm1")
if not mu_path: if not mu_path:
raise AnsibleError('Could not find imported module support code for \'%s\'.' % m) raise AnsibleError('Could not find imported module support code for \'%s\'.' % m)

View file

@ -0,0 +1,6 @@
#!powershell
#Requires -Module Ansible.ModuleUtils.Legacy
Exit-Json @{ data="success" }

View file

@ -0,0 +1,4 @@
#!powershell
# POWERSHELL_COMMON
Exit-Json @{ data="success" }

View file

@ -14,6 +14,22 @@
that: that:
- new_way.data == 'success' - new_way.data == 'success'
- name: call old WANTS_JSON module with windows line endings
legacy_only_old_way_win_line_ending:
register: old_way_win
- assert:
that:
- old_way_win.data == 'success'
- name: call module with only legacy requires and windows line endings
legacy_only_new_way_win_line_ending:
register: new_way_win
- assert:
that:
- new_way_win.data == 'success'
- name: call module with local module_utils - name: call module with local module_utils
uses_local_utils: uses_local_utils:
register: local_utils register: local_utils

View file

@ -8,6 +8,8 @@ def main():
'test/integration/targets/template/files/foo.dos.txt', 'test/integration/targets/template/files/foo.dos.txt',
'test/integration/targets/win_regmerge/templates/win_line_ending.j2', 'test/integration/targets/win_regmerge/templates/win_line_ending.j2',
'test/integration/targets/win_template/files/foo.dos.txt', 'test/integration/targets/win_template/files/foo.dos.txt',
'test/integration/targets/win_module_utils/library/legacy_only_new_way_win_line_ending.ps1',
'test/integration/targets/win_module_utils/library/legacy_only_old_way_win_line_ending.ps1',
]) ])
for path in sys.argv[1:] or sys.stdin.read().splitlines(): for path in sys.argv[1:] or sys.stdin.read().splitlines():

View file

@ -25,6 +25,8 @@ def main():
skip = set([ skip = set([
'hacking/cherrypick.py', 'hacking/cherrypick.py',
'test/integration/targets/win_module_utils/library/legacy_only_new_way_win_line_ending.ps1',
'test/integration/targets/win_module_utils/library/legacy_only_old_way_win_line_ending.ps1',
]) ])
for path in sys.argv[1:] or sys.stdin.read().splitlines(): for path in sys.argv[1:] or sys.stdin.read().splitlines():