I'd like to find all variables with the myvar_
prefix and make a shell script that uses their names and contents.
---
- set_fact:
myvar_a: "a"
myvar_b: "b"
myvar_c: "c"
- name: Format Django webapp parameters
shell: |
truncate -s0 out.txt
{% for param in lookup('ansible.builtin.varnames', '^myvar_.+') %}
echo {{ param }} >> out.txt
{% endfor %}
The output is:
m
y
v
a
r
_
a
,
m
y
v
a
r
_
b
,
m
y
v
a
r
_
c
It iterates a string character by character for some reason.
How to get variable names into out.txt
?
How to get the contents of these variables to out.txt
? (ok, it'll be {{ lookup("vars", param) }}
)
This happens because the lookup return you a comma separated list of variable names, not a list.
As demonstrated by the task:
- debug:
var: lookup('ansible.builtin.varnames', '^myvar_.+')
vars:
myvar_a: a
myvar_b: b
myvar_c: c
Which yields:
ok: [localhost] =>
lookup('ansible.builtin.varnames', '^myvar_.+'): myvar_a,myvar_b,myvar_c
There are three fixes possible:
wantlist=true
named argument of the lookup:
{% for param in lookup(
'ansible.builtin.varnames',
'^myvar_.+',
wantlist=true
)
%}
query
instead of a lookup
, as query
always returns a list:
{% for param in query(
'ansible.builtin.varnames',
'^myvar_.+'
)
%}
split
the string:
{% for param in lookup(
'ansible.builtin.varnames',
'^myvar_.+'
).split(',')
%}