Question:
I’m currently building a role for installing PHP using ansible, and I’m having some difficulty merging dictionaries. I’ve tried several ways to do so, but I can’t get it to work like I want it to:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# A vars file: my_default_values: key = value my_values: my_key = my_value # In a playbook, I create a task to attempt merging the # two dictionaries (which doesn't work): - debug: msg="{{ item.key }} = {{ item.value }}" with_dict: my_default_values + my_values # I have also tried: - debug: msg="{{ item.key }} = {{ item.value }}" with_dict: my_default_values|union(my_values) # I have /some/ success with using j2's update, # but you can't use j2 syntax in "with_dict", it appears. # This works: - debug: msg="{{ my_default_values.update(my_values) }}" # But this doesn't: - debug: msg="{{ item.key }} = {{ item.value }}" with_dict: my_default_values.update(my_values) |
Is there a way to merge two dictionaries, so I can use it with “with_dict”?
Answer:
In Ansible 2.0, there is a Jinja filter, combine
, for this:
1 2 3 |
- debug: msg="{{ item.key }} = {{ item.value }}" with_dict: "{{ my_default_values | combine(my_values) }}" |