Matt Silverlock
2014-08-16 11:38:23 UTC
Hi all,
Trying to pull together my understanding of Jinja's looping constructs,
Ansible's with_dict and from what I've seen out in the wild (i.e. on
GitHub). I've taken a look around at some other examples but can't seem to
adapt them to my approach
(i.e. https://github.com/timmahoney/ansible-redhat-extra-repos/blob/master/defaults/main.yml
is close to what I'm after)
At the moment I'm attempting to loop over a YAML dict of OS user <-> DB
user mappings (for pg_ident.conf) and am running into an error:
*# host_vars/<hostname>*
postgres_users:
baltar:
os: "{{ username }}"
db: "{{ db_name }}"
caprica:
os: "{{ username }}"
db: "{{ db_name }}"
*# pg_ident.conf.j2*
{% for user in postgres_users %}
{{ user.db }} {{ user.os }} {{ user.key }}
{% endfor %}
*# roles/postgresql/tasks/postgres.yml*
- name: copy postgres ident maps
template: src=pg_ident.conf.j2
dest=/etc/postgresql/9.3/main/pg_ident.conf owner=postgres group=postgres
mode=0640
register: postgres_ident
with_dict: postgres_users
*# error message*
TASK: [postgres | copy postgres ident maps]
***********************************
fatal: [default] => {'msg': "AnsibleUndefinedVariable: One or more
undefined variables: 'str object' has no attribute 'db'", 'failed': True}
fatal: [default] => {'msg': 'One or more items failed.', 'failed': True,
'changed': False, 'results': [{'msg': "AnsibleUndefinedVariable: One or
more undefined variables: 'str object' has no attribute 'db'", 'failed':
True}]}
-----
I've also attempted the below:
*# host_vars/<hostname>*
# same as before
*# template*
{% for k, v in item %}
{{ v.db }} {{ v.os }} {{ k }}
{% endfor %}
*# task*
# same as before
This fails with "too many values to unpack".
Which is the functional and favored approach? I'd rather the map keys be
the names but can't seem to get this to work.
Trying to pull together my understanding of Jinja's looping constructs,
Ansible's with_dict and from what I've seen out in the wild (i.e. on
GitHub). I've taken a look around at some other examples but can't seem to
adapt them to my approach
(i.e. https://github.com/timmahoney/ansible-redhat-extra-repos/blob/master/defaults/main.yml
is close to what I'm after)
At the moment I'm attempting to loop over a YAML dict of OS user <-> DB
user mappings (for pg_ident.conf) and am running into an error:
*# host_vars/<hostname>*
postgres_users:
baltar:
os: "{{ username }}"
db: "{{ db_name }}"
caprica:
os: "{{ username }}"
db: "{{ db_name }}"
*# pg_ident.conf.j2*
{% for user in postgres_users %}
{{ user.db }} {{ user.os }} {{ user.key }}
{% endfor %}
*# roles/postgresql/tasks/postgres.yml*
- name: copy postgres ident maps
template: src=pg_ident.conf.j2
dest=/etc/postgresql/9.3/main/pg_ident.conf owner=postgres group=postgres
mode=0640
register: postgres_ident
with_dict: postgres_users
*# error message*
TASK: [postgres | copy postgres ident maps]
***********************************
fatal: [default] => {'msg': "AnsibleUndefinedVariable: One or more
undefined variables: 'str object' has no attribute 'db'", 'failed': True}
fatal: [default] => {'msg': 'One or more items failed.', 'failed': True,
'changed': False, 'results': [{'msg': "AnsibleUndefinedVariable: One or
more undefined variables: 'str object' has no attribute 'db'", 'failed':
True}]}
-----
I've also attempted the below:
*# host_vars/<hostname>*
# same as before
*# template*
{% for k, v in item %}
{{ v.db }} {{ v.os }} {{ k }}
{% endfor %}
*# task*
# same as before
This fails with "too many values to unpack".
Which is the functional and favored approach? I'd rather the map keys be
the names but can't seem to get this to work.
--
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+***@googlegroups.com.
To post to this group, send email to ansible-***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/a1f23c94-398a-4043-96ed-3a88feb7e03c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
You received this message because you are subscribed to the Google Groups "Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email to ansible-project+***@googlegroups.com.
To post to this group, send email to ansible-***@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/a1f23c94-398a-4043-96ed-3a88feb7e03c%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.