#!/usr/bin/python3 import linaro_ldap import yaml from jinja2 import Template import os OUTFILE = "member-identities.yaml" if os.path.isfile(OUTFILE): os.unlink(OUTFILE) tmpl = Template('''\ - profile: name: {{ username }} enrollments: - organization: {{ org }} email: - {{ email }} ''') def getKey(item): return item[0] def getPersonKey(item): try: return item[1]['gecos'][0].lstrip() except KeyError: return "None" def get_member_ous(ldap): result = ldap.do_complex_query( search_filter='(organizationalStatus=*)', attrlist=['ou','description']) member_list = [] for x in result: member_list.append( (x[1]['description'][0].decode('utf-8'), x[1]['ou'][0].decode('utf-8')) ) member_list = sorted(member_list, key=getKey) return member_list member_ou_list = get_member_ous(linaro_ldap) for member in member_ou_list: people = linaro_ldap.do_complex_query( \ base = 'ou=%s,ou=accounts,dc=linaro,dc=org' % member[1], \ search_filter='(objectClass=inetOrgPerson)', \ attrlist=['uid','gecos','mail']) s_people = sorted(people, key=getPersonKey) for person in s_people: try: uid = person[1]['gecos'][0].decode('utf-8') email = person[1]['mail'][0].decode('utf-8') foo = tmpl.render( username=uid, org=member[0].decode('utf-8'), email=email ) with open( OUTFILE, 'a') as outfile: outfile.write(foo) except KeyError: pass