summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Shrewsbury <Shrews@users.noreply.github.com>2021-05-17 01:23:06 -0400
committerGitHub <noreply@github.com>2021-05-17 00:23:06 -0500
commit62d69fc7245167d919fdc4c406d2a6dd9ec832ae (patch)
tree271c7f55e8d7e3cbe15065c79650d632c1667175
parentc34bfc58cc5fb475cc66cb6b02d80892d42a99fe (diff)
downloadansible-62d69fc7245167d919fdc4c406d2a6dd9ec832ae.tar.gz
Fix fileglob parameter order bug (#72879) (#72904)
(cherry picked from commit fe17cb6eba0df9e6c19e6dd8a78701fca6fa70e4)
-rw-r--r--changelogs/fragments/72873-fix-fileglob-ordering.yml2
-rw-r--r--lib/ansible/plugins/lookup/fileglob.py5
-rw-r--r--test/integration/targets/lookup_fileglob/issue72873/test.yml31
-rwxr-xr-xtest/integration/targets/lookup_fileglob/runme.sh3
4 files changed, 39 insertions, 2 deletions
diff --git a/changelogs/fragments/72873-fix-fileglob-ordering.yml b/changelogs/fragments/72873-fix-fileglob-ordering.yml
new file mode 100644
index 0000000000..329befc907
--- /dev/null
+++ b/changelogs/fragments/72873-fix-fileglob-ordering.yml
@@ -0,0 +1,2 @@
+bugfixes:
+- Fix fileglob bug where it could return different results for different order of parameters (https://github.com/ansible/ansible/issues/72873).
diff --git a/lib/ansible/plugins/lookup/fileglob.py b/lib/ansible/plugins/lookup/fileglob.py
index aa5d7d34d8..5264bbc923 100644
--- a/lib/ansible/plugins/lookup/fileglob.py
+++ b/lib/ansible/plugins/lookup/fileglob.py
@@ -76,7 +76,8 @@ class LookupModule(LookupBase):
for dwimmed_path in found_paths:
if dwimmed_path:
globbed = glob.glob(to_bytes(os.path.join(dwimmed_path, term_file), errors='surrogate_or_strict'))
- ret.extend(to_text(g, errors='surrogate_or_strict') for g in globbed if os.path.isfile(g))
- if ret:
+ term_results = [to_text(g, errors='surrogate_or_strict') for g in globbed if os.path.isfile(g)]
+ if term_results:
+ ret.extend(term_results)
break
return ret
diff --git a/test/integration/targets/lookup_fileglob/issue72873/test.yml b/test/integration/targets/lookup_fileglob/issue72873/test.yml
new file mode 100644
index 0000000000..218ee58d90
--- /dev/null
+++ b/test/integration/targets/lookup_fileglob/issue72873/test.yml
@@ -0,0 +1,31 @@
+- hosts: localhost
+ connection: local
+ gather_facts: false
+ vars:
+ dir: files
+ tasks:
+ - file: path='{{ dir }}' state=directory
+
+ - file: path='setvars.bat' state=touch # in current directory!
+
+ - file: path='{{ dir }}/{{ item }}' state=touch
+ loop:
+ - json.c
+ - strlcpy.c
+ - base64.c
+ - json.h
+ - base64.h
+ - strlcpy.h
+ - jo.c
+
+ - name: Get working order results and sort them
+ set_fact:
+ working: '{{ query("fileglob", "setvars.bat", "{{ dir }}/*.[ch]") | sort }}'
+
+ - name: Get broken order results and sort them
+ set_fact:
+ broken: '{{ query("fileglob", "{{ dir }}/*.[ch]", "setvars.bat") | sort }}'
+
+ - assert:
+ that:
+ - working == broken
diff --git a/test/integration/targets/lookup_fileglob/runme.sh b/test/integration/targets/lookup_fileglob/runme.sh
index 1e0297c79d..be04421144 100755
--- a/test/integration/targets/lookup_fileglob/runme.sh
+++ b/test/integration/targets/lookup_fileglob/runme.sh
@@ -13,3 +13,6 @@ for seed in foo foo/bar foo/bar/baz
do
ansible-playbook non_existent/play.yml -e "seed='${seed}'" "$@"
done
+
+# test for issue 72873 fix
+ansible-playbook issue72873/test.yml "$@"