Skip to content

atterdag/ansible-filters-ldif

Repository files navigation

Ansible LDIF filter

Ansible filter to read or write LDIF.

Latest version SonarCloud Travis CI License: GPLv3

Install this Ansible Filter:

  • via pip:
pip install ansible-filters-ldif
  • via ansible-galaxy:
ansible-galaxy install 'git+https://github.com/atterdag/ansible-filters-ldif.git'

Ansible filters always runs on localhost.

Examples

Convert dictionary to LDIF

---
- name: Create dictionary with entries
  set_fact:
    dictionary:
      - - dc=example,dc=com
        - dc:
            - example
          description:
            - This is a line longer than 79 characters, so LDIF breaks it up over multiple lines
          o:
            - example.com
          objectClass:
            - dcObject
            - organization
      - - ou=people,dc=example,dc=com
        - objectClass:
            - organizationalUnit
          ou:
            - people
      - - cn=Jane Doe,ou=people,dc=example,dc=com
        - cn:
            - Jane Doe
          mail:
            - jane.doe@example.com
          objectClass:
            - inetOrgPerson
          sn:
            - Doe
      - - cn=John Doe,ou=people,dc=example,dc=com
        - cn:
            - John Doe
          mail:
            - john.doe@example.com
          objectClass:
            - inetOrgPerson
          sn:
            - Doe
      - - ou=groups,dc=example,dc=com
        - objectClass:
            - organizationalUnit
          ou:
            - groups
      - - cn=users,ou=groups,dc=example,dc=com
        - cn:
            - users
          member:
            - cn=Jane Doe,ou=people,dc=example,dc=com
            - cn=John Doe,ou=people,dc=example,dc=com
          objectClass:
            - groupOfNames

- name: "Convert dictionary to LDIF while writing it to /tmp/test.ldif using 'to_ldif' filter"
  copy:
    content: "{{ dictionary | to_ldif }}"
    dest: "/tmp/test.ldif"

Convert LDIF to JSON

---
- name: "Create multi-line string variable with LDIF data"
  set_fact:
    ldif: |
      dn: dc=example,dc=com
      dc: example
      description: This is one line which is longer than
       79 characters, so LDIF breaks it up over multiple lines
      objectClass: dcObject
      objectClass: organization
      o: example.com

      dn: ou=people,dc=example,dc=com
      objectClass: organizationalUnit
      ou: people

      dn: cn=Jane Doe,ou=people,dc=example,dc=com
      objectClass: inetOrgPerson
      cn: Jane Doe
      sn: Doe
      mail: jane.doe@example.com

      dn: cn=John Doe,ou=people,dc=example,dc=com
      objectClass: inetOrgPerson
      cn: John Doe
      sn: Doe
      mail: john.doe@example.com

      dn: ou=groups,dc=example,dc=com
      objectClass: organizationalUnit
      ou: groups

      dn: cn=users,ou=groups,dc=example,dc=com
      objectClass: groupOfNames
      cn: users
      member: cn=Jane Doe,ou=people,dc=example,dc=com
      member: cn=John Doe,ou=people,dc=example,dc=com

- name: "Convert string to JSON while writing it to /tmp/test.json using 'from_ldif' filter"
  copy:
    content: "{{ (ldif | from_ldif) | to_nice_json }}"
    dest: "/tmp/test.json"

Build dependencies

Install the following OS development packages first.

sudo apt-get install libssl-dev libldap2-dev libsasl2-dev python2-dev python3-dev
mkvirtualenv --python=/usr/bin/python3 python3-development
pip install --requirement requirements.txt
gem install travis fry

License

GPLv3.