Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- # ansible-playbook -i none, test_recursive_loop.yml
- - hosts: localhost
- gather_facts: false
- vars:
- top_level_dn: "ou=root,ou=groot"
- rec_units:
- all-computers:
- name: "all of them"
- writers: mX support
- children:
- mX-computers:
- name: "Computers for shop X"
- writers:
- - mX support
- children:
- test-clients:
- name: "Test clients for shop X"
- best-clients:
- name: "The very best ones"
- children:
- test-child:
- name: "And their children"
- children:
- test-grandchild:
- name: "And grand children"
- mY-computers:
- name: "Another branch"
- writers:
- - here too
- children:
- guest-clients:
- name: "Those are guests"
- west-clients:
- name: "Those are westerners"
- children:
- cowboys:
- name: "Tough guys"
- cowgirls:
- name: "Tough gals"
- mZ-computers:
- name: "Lonely"
- deep_addon:
- all-computers:
- children:
- mX-computers:
- children:
- rest-clients:
- name: "Rest of clients in MX"
- org_tree: "{{ rec_units | combine(deep_addon, recursive=true) }}"
- tasks:
- # requires jinja 2.10 (and most probably ansible 2.4)
- # could include whole item as well, but this will duplicate whole subtree N times
- - name: flatten dict with backlinks
- set_fact:
- flatten_dict3: |
- {% set res = [] -%}
- {% set parent = namespace(dn="", prev_dn="") -%}
- {% for rdn, props in org_tree.items() recursive -%}
- {% set dummy = res.extend([{'dn': 'ou=' + rdn + ',' + parent.dn + top_level_dn, 'name': props.name}]) -%}
- {% if 'children' in props -%}
- {% set parent.prev_dn = parent.dn -%}
- {% set parent.dn = 'ou=' + rdn + ',' + parent.dn -%}
- {% set dummy2 = loop(props.children | dictsort) -%}
- {% set parent.dn = parent.prev_dn.split(',')[-1*loop.depth:]|join(',') -%}
- {% endif -%}
- {% endfor -%}
- {{ res }}
- - name: print results
- debug:
- msg: "{{ flatten_dict3 }}"
Add Comment
Please, Sign In to add comment