Try to use 'combine' filter:
one: {foo: bar}
two: {baz: bazbaz }
three: '{{one|combine(two)}}'
Result: three: {foo: bar, baz: bazbaz}
On 02/20/2018 11:46 AM, 'deewon' via Ansible Project wrote:
Hi all,
I'm relatively new to using ansible and hoping someone can assist with
some insight around this.
I'm trying to create a jinja2 template that generates authentication
credentials for a database in json format
I've defined the variables using the format below (using dictionaries)
vars:
db_roles:
user1:
- { db: "lab2", privs: "READ,DELETE" }
user2:
- { db: "lab1", privs: "INSERT,DELETE" }
- { db: "lab2", privs: "UPDATE" }
The idea is to loop through the users (user1 and user2 in this
example) and assign the "privs" on the "db" for each user across
multiple databases as needed
To do this, I created a jinja2 template that looks like the below:
{% for item in db_roles %}
{% for dict_item in db_roles[item] %}
,
{ "db" : "admin", "userName" : "{{ item }}",
"roles" : [
{% for dbpriv in dict_item.privs.split(',') %}
{
"db" : "{{ dict_item.db }}",
"role" : "{{ dbpriv }}"
}
{% if not loop.last %},{% endif %}
{% endfor %}
]
}
{% endfor %}
{% endfor %}
Using dict_items, I'm able to access the values in each dictionary and
the generated file looks this when executed:
,
{ "db" : "admin", "userName" : "user2",
"roles" : [
{
"db" : "lab1",
"role" : "INSERT"
}
, {
"db" : "lab1",
"role" : "DELETE"
}
]
}
,
{ "db" : "admin", "userName" : "user2",
"roles" : [
{
"db" : "lab2",
"role" : "UPDATE"
}
]
}
,
{ "db" : "admin", "userName" : "user1",
"roles" : [
{
"db" : "lab2",
"role" : "READ"
}
, {
"db" : "lab2",
"role" : "DELETE"
}
]
}
This is close to what I want with the exception of "user2" whose
privileges seem to have been split into 2 separate documents. All the
privileges for each user should be defined within the roles array in
the same document similar to the below.
{ "db" : "admin", "userName" : "user2",
"roles" : [
{
"db" : "lab1",
"role" : "INSERT"
}
,
{
"db" : "lab1",
"role" : "DELETE"
}
,
{
"db" : "lab2",
"role" : "UPDATE"
}
]
}
,
,
{ "db" : "admin", "roleName" : "user1",
"roles" : [
{
"db" : "lab2",
"role" : "READ"
}
,
{
"db" : "lab2",
"role" : "DELETE"
}
]
}
I can't figure out how to merge the dictionary items for a single
user across different "db" values into a single dictionary that
allows me build the json document to look like the above
Any insights or suggestions will be highly appreciated :)
Regards
--
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 [email protected]
<mailto:[email protected]>.
To post to this group, send email to [email protected]
<mailto:[email protected]>.
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/83cd07c9-e67d-4186-9ac7-7433ba18fc35%40googlegroups.com
<https://groups.google.com/d/msgid/ansible-project/83cd07c9-e67d-4186-9ac7-7433ba18fc35%40googlegroups.com?utm_medium=email&utm_source=footer>.
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 [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/ansible-project/6d3527e1-3192-7575-5ead-60c5f0aa7a32%40gmail.com.
For more options, visit https://groups.google.com/d/optout.