| {%- from "openldap/map.jinja" import client with context %} |
| |
| {%- if client.enabled|default(True) %} |
| |
| openldap_packages: |
| pkg.installed: |
| - names: {{ client.pkgs }} |
| |
| {%- if client.entry is defined %} |
| |
| openldap_wait_for_server_{{ client.server.host }}: |
| cmd.run: |
| - name: '/usr/bin/ldapsearch -x -H ldap://{{ client.server.host }}{% if client.server.port is defined %}:{{ client.server.port }}{% endif %} > /dev/null || [ $? -eq 32 ] && true' |
| - retry: |
| attempts: 4 |
| interval: 5 |
| splay: 5 |
| {%- if grains.get('noservices', False) %} |
| - onlyif: 'false' |
| {%- endif %} |
| |
| {%- macro process_entry(entry, tree) %} |
| {%- for name, param in entry.iteritems() %} |
| {%- set dn = param.get('type', 'cn') + "=" + name + "," + tree %} |
| |
| openldap_client_{{ dn }}: |
| ldap.managed: |
| - connect_spec: |
| url: ldap://{{ client.server.host }}{% if client.server.port is defined %}:{{ client.server.port }}{% endif %} |
| {%- if client.server.auth is defined %} |
| bind: |
| method: simple |
| dn: {{ client.server.auth.user }} |
| password: {{ client.server.auth.password }} |
| {%- endif %} |
| {%- if client.server.get('tls', False) %} |
| tls: |
| starttls: true |
| {%- endif %} |
| - entries: |
| - {{ dn }}: |
| {%- if param.get('enabled', True) %} |
| - delete_others: {{ param.get('purge', False) }} |
| - {{ param.get('action', 'replace') }}: |
| {{ param.get('type', 'cn') }}: {{ name }} |
| {%- for k, v in param.get('attr', {}).iteritems() %} |
| {{ k }}: {{ v|yaml }} |
| {%- endfor %} |
| objectClass: {{ param.get('classes', [])|yaml }} |
| {%- if param.member is defined %} |
| member: |
| {%- for member in param.get('member', []) %} |
| - {{ member }}{% if member.split(',')[-1].split('=')[0] != 'dc' %},{{ client.server.basedn }}{% endif %} |
| {%- endfor %} |
| {%- endif %} |
| {%- else %} |
| - delete_others: true |
| {%- endif %} |
| - require: |
| - cmd: openldap_wait_for_server_{{ client.server.host }} |
| {%- if tree.split(',')[-1].split('=')[0] != 'dc' %} |
| - ldap: openldap_client_{{ tree }} |
| {%- for member in param.get('member', []) %} |
| - ldap: openldap_client_{{ member }}{% if member.split(',')[-1].split('=')[0] != 'dc' %},{{ client.server.basedn }}{% endif %} |
| {%- endfor %} |
| {%- endif %} |
| {%- if grains.get('noservices', False) %} |
| - onlyif: 'false' |
| {%- endif %} |
| |
| {%- if param.entry is defined %} |
| {{ process_entry(param.entry, param.get('type', 'cn') + "=" + name + "," + tree) }} |
| {%- endif %} |
| {%- endfor %} |
| {%- endmacro %} |
| |
| {{ process_entry(client.entry, client.server.basedn) }} |
| |
| {%- endif %} |
| |
| {%- endif %} |