Ansible Lists and Sets problem working with Set types in Ansible

39 views
Skip to first unread message

Ryan Hobbs

unread,
May 21, 2014, 11:32:54 AM5/21/14
to ansible...@googlegroups.com
I am attempting to create a unique list of values between two lists and I am creating a set based on the documentation described here http://docs.ansible.com/playbooks_variables.html#set-theory-filters



According to the documentation:

To get a union of two lists:

{{ list1 | union(list2) }}


Therefore I am attempting this in my playbook:

- name: A
  set_fact:
      listA: "{{test1.stdout.split()}}"
      listB: "{{test2.stdout.split()}}"

Test1 and Test2 output a list object and have been verified. The above produces two lists as an example lets assume:

listA = ['apple', 'orange', 'tree', 'pear']
listB = ['tree', 'orange']

Now I want to get a union of both listA and listB

- name: B
  set_fact: test="{{listA | union(listB) }}"

This produces the result below:

{"ansible_facts": {"test": "set(["tree", "orange"])"}, "item": ""}


My problem is the fact test is assigned a string value of "set(["tree", "orange"])" and not the set object, I need to operate on the set object. Can this be done?  If not is there any other way within Ansible to get a unique list from two lists?

Brian Coca

unread,
May 21, 2014, 4:50:22 PM5/21/14
to ansible...@googlegroups.com
that looks wrong to me, that is what i would expect from intersect, from union i would expect "test" to be equal to listA (which includes listB).

Aside from that, {{}} tells jinja to convert to string by default (not sure how you get set() at all), you can do {{test|list}} to ensure you get the correct type
Reply all
Reply to author
Forward
0 new messages