From 7f9fdbbb30647c4482b56b17381c16c37008bf8b Mon Sep 17 00:00:00 2001 From: Toshio Kuratomi Date: Wed, 21 Feb 2018 08:25:56 -0800 Subject: [PATCH] Revert "remove query/q (#36315)" This reverts commit b47d2e07e15a8a15307f146e0c12e70e5e4ca0cd. query is a feature for 2.5. We're not reverting it now. (cherry picked from commit 03a6d726330b29816f67b6d4f620a0bf0f89575f) --- lib/ansible/template/__init__.py | 8 +++- .../targets/lookups/tasks/main.yml | 2 +- test/integration/targets/loops/tasks/main.yml | 48 +++++++++++++++++++ 3 files changed, 56 insertions(+), 2 deletions(-) diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py index c91eb0ccb72..4cd9ee8b3f2 100644 --- a/lib/ansible/template/__init__.py +++ b/lib/ansible/template/__init__.py @@ -604,6 +604,11 @@ class Templar: def _fail_lookup(self, name, *args, **kwargs): raise AnsibleError("The lookup `%s` was found, however lookups were disabled from templating" % name) + def _query_lookup(self, name, *args, **kwargs): + ''' wrapper for lookup, force wantlist true''' + kwargs['wantlist'] = True + return self._lookup(name, *args, **kwargs) + def _lookup(self, name, *args, **kwargs): instance = self._lookup_loader.get(name.lower(), loader=self._loader, templar=self) @@ -694,9 +699,10 @@ class Templar: return data if disable_lookups: - t.globals['lookup'] = self._fail_lookup + t.globals['query'] = t.globals['q'] = t.globals['lookup'] = self._fail_lookup else: t.globals['lookup'] = self._lookup + t.globals['query'] = t.globals['q'] = self._query_lookup t.globals['finalize'] = self._finalize diff --git a/test/integration/targets/lookups/tasks/main.yml b/test/integration/targets/lookups/tasks/main.yml index 567f7dfcf90..f6a83392d0c 100644 --- a/test/integration/targets/lookups/tasks/main.yml +++ b/test/integration/targets/lookups/tasks/main.yml @@ -299,7 +299,7 @@ - name: Test that we can give a list of values to var and receive a list of values back set_fact: - var_host_info: '{{ lookup("vars", "ansible_host", "ansible_user", wantlist=True) }}' + var_host_info: '{{ query("vars", "ansible_host", "ansible_user") }}' - assert: that: diff --git a/test/integration/targets/loops/tasks/main.yml b/test/integration/targets/loops/tasks/main.yml index 30571d5f5c2..72dc1af1e33 100644 --- a/test/integration/targets/loops/tasks/main.yml +++ b/test/integration/targets/loops/tasks/main.yml @@ -103,6 +103,54 @@ - 'results6["results"][0]["ping"] == "Hello World"' - 'results6["results"][1]["ping"] == "Olá Mundo"' +- name: Test that loop works with a list via the query lookup + ping: + data: '{{ item }}' + loop: '{{ query("list", "Hello World", "Olá Mundo") }}' + register: results7 + +- name: Assert that we ran the module twice with the correct strings + assert: + that: + - 'results7["results"][0]["ping"] == "Hello World"' + - 'results7["results"][1]["ping"] == "Olá Mundo"' + +- name: Test that loop works with a list in a variable via the query lookup + ping: + data: '{{ item }}' + loop: '{{ q("list", *phrases) }}' + register: results8 + +- name: Assert that we ran the module twice with the correct strings + assert: + that: + - 'results8["results"][0]["ping"] == "Hello World"' + - 'results8["results"][1]["ping"] == "Olá Mundo"' + +- name: Test that loop works with a list and keyword args + ping: + data: '{{ item }}' + loop: '{{ q("file", "data1.txt", "data2.txt", lstrip=True) }}' + register: results9 + +- name: Assert that we ran the module twice with the correct strings + assert: + that: + - 'results9["results"][0]["ping"] == "Hello World"' + - 'results9["results"][1]["ping"] == "Olá Mundo"' + +- name: Test that loop works with a list in variable and keyword args + ping: + data: '{{ item }}' + loop: '{{ q("file", lstrip=True, *filenames) }}' + register: results10 + +- name: Assert that we ran the module twice with the correct strings + assert: + that: + - 'results10["results"][0]["ping"] == "Hello World"' + - 'results10["results"][1]["ping"] == "Olá Mundo"' + # # loop_control/index_var #