Ansible Logo

Als langjähriger Univention Partner betreiben wir von Adfinis Sygroup UCS Umgebungen für zahlreiche unserer Kunden. Für die Automatisierung beim Betrieb verschiedener Linux-Distributionen nutzen wir Ansible, das u. a. den Rollout von UCS standardisiert.

Bisher waren für UCS-spezifische Tasks keine solchen Module verfügbar, deshalb haben wir nun für wiederkehrende Aufgaben bei der Pflege des Verzeichnisdienstes Module entwickelt, die auf der Standard-Skriptschittstelle des Univention Directory Managers aufsetzen, um den Prozess zu vereinfachen. Dazu gehören aktuell Folgende:

udm_group
udm_user
udm_dns_zone
udm_dns_record
udm_share

Diese Module sind ab Ansible Version 2.2 Bestandteil von Ansible Modules Extras und können entsprechend mit Ansible genutzt werden wie andere Module auch. Falls in Zukunft weitere Ansible Module erstellt werden (und noch nicht Teil von Ansible sind), können diese pro Projekt hinzugefügt werden. Nachfolgend wird kurz erklärt, wie solche zusätzlichen Ansible Module installiert werden können und danach werden noch die oben genannten Module kurz präsentiert.

Installation

Zusätzliche Ansible Module werden entweder per Projekt oder in den Ansible Source Code installiert. Um zusätzliche Module per Projekt zu installieren, müssen diese in den Ordner „library“ unterhalb des Top-Directories des Projekts kopiert werden. Dies sieht dann etwa wie folgt aus:

$ ls
|- ansible.cfg
|- group_vars/
| |- all/
|- inventory
|- library/
| |- README.md
| |- ucr.py
| |- udm_dns_record.py
| |- udm_dns_zone.py
| |- udm_group.py
| |- udm_share.py
| |- udm_user.py
|- README.md
|- site.yml

Werden die Module im Ansible Source Code installiert, muss der gesamte Ansible Source Code geklont werden:

$ git clone https://github.com/ansible/ansible.git
$ cd ansible/
$ git submodule update --init --recursive

Danach kann Ansible mithilfe von pip installiert werden:

$ virtualenv -p /usr/bin/python2 venv
$ . venv/bin/activate
$ pip install -e ansible/

Abschließend müssen die zusätzlichen Ansible Module noch in den Ordner ansible/lib/ansible/modules/extras/ oder einen Subordner davon kopiert werden. Die Univention Module gehören z. B. noch in den Subordner univention.

udm_group

Um eine Gruppe anzulegen, welche den Namen employee und als LDAP DN cn=employee,cn=groups,ou=company,dc=example,dc=org hat, ist folgender Ansible Task notwendig:

- udm_group: name=employee
description=Employee
ou=company
subpath=‘cn=groups‘

Wird nur das Attribut name angegeben, wird die Gruppe mit der DN cn=<name>,cn=groups,<LDAP Base DN> angelegt.

udm_user

Ein User Objekt umfasst sehr viele mögliche Attribute. Nachfolgend wird somit nur ein minimales Beispiel gezeigt. Alle zur Verfügung stehenden Attribute sind direkt im Ansible Modul dokumentiert.

Soll ein User Hans Muster mit dem Benutzernamen hans.muster und dem Passwort secure_password erstellt werden, ist folgender Task nötig:

- udm_user: name=hans.muster
firstname=Hans
lastname=Muster
password=secure_password

Das Angeben des genauen LDAP Pfades ist wie bei udm_group auch möglich. Wird nichts Weiteres angegeben, wird der User mit der LDAP DN uid=hans.muster,cn=users,dc=example,dc=com erstellt.

udm_dns_zone

DNS Zonen haben nicht sehr viele, mögliche Attribute. Etwas speziell ist, dass in der Zone die Interfaces, NS und MX Records definiert werden. Die Interfaces können mit BIND 9 Views verglichen werden. Diese definieren, von wo aus die entsprechenden DNS Queries beantwortet werden. Die NS und MX Records werden bei UCS speziell gehandhabt und werden deshalb nicht mit udm_dns_record, sondern per udm_dns_zone konfiguriert.

Beispielsweise wird die Forward Zone example.com mit dem zuständigen Nameserver ucs.example.com, welcher DNS Queries auf der IP Adresse 192.168.1.1 beantwortet, wie folgt angelegt:

- udm_dns_zone: zone=example.com
type=forward_zone
nameserver=['ucs.example.com']
interfaces=['192.168.1.1']

udm_dns_record

Einzelne DNS Records können mit udm_dns_record erstellt werden. Mögliche Einträge sind:

  • host_record (A und AAAA Records)
  • alias (CNAME Records)
  • ptr_record
  • srv_record
  • txt_record

Soll zur Zone example.com der Eintrag www.example.com. IN A 192.168.1.1 hinzugefügt werden, ist folgender Task nötig:

- udm_dns_zone: name=www
zone=example.com
type=host_record
data=['a': '192.168.1.1']

udm_share

Mit dem Modul udm_share können Samba und NFS Shares gehandhabt werden. Ein Share Objekt beinhaltet eine Vielzahl von Attributen, diese sind im Ansible Modul dokumentiert.

Damit das Share homes auf dem Ansible Target System angelegt wird, ist folgender Task nötig:

- udm_share: name=homes
host='{{ ansible_fqdn }}'
path=/home
owner=root
group=root
directorymode='00755'
samba_name=homes

Weiterführende Links

Univention Common Code
Module udm_group
Module udm_user
Module udm_dns_zone
Module udm_dns_record
Module udm_share

UCS Core Edition jetzt kostenfrei einsetzen!

Zum Downloadbereich
Tobias Rueetschi

Nach seinem Studium in Richtung Elektro- und Kommunikationstechnik, arbeitete Tobias Rueetschi mehrere Jahre im Bereich Software Developement. Aktuell ist er bei der Adfinis SyGroup AG als Linux System Engineer tätig. Seine aktuellen Haupttätigkeiten umfassen Config Management und Automation sowie Netzwerk und Security.
Dies ist auch in der Freizeit, wo er sich in der Open Source Szene einbringt, bemerkbar.