Tech Blog.

Thoughts, stories, ideas.

UCS Ansible Modules

24. March 2016

Un Univention Corporate Server (UCS) n’est pas particulièrement adapté pour être configuré via Ansible, car de nombreuses tâches doivent être effectuées soit via l’interface Web soit via des commandes Bash spéciales. Les exemples incluent la création, la modification ou la suppression d’utilisateurs et de groupes.
Puisque chez Adfinis SyGroup nous voulons toujours installer et configurer UCS automatiquement, nous avons écrit de nouveaux Modules Ansibles pour différentes tâches. Il s’agit actuellement des éléments suivants :

  • udm_group
  • udm_user
  • udm_dns_zone
  • udm_dns_record
  • udm_share
    Ces modules font partie de Ansible Modules Extras de Ansible Version 2.2 et peuvent être utilisés avec Ansible comme les autres modules.

Si d’autres modules Ansible sont créés dans le futur (et ne font pas encore partie d’Ansible), ils peuvent être ajoutés par projet.
Vous trouverez ci-dessous une brève explication de la façon dont ces modules additionnels peuvent être installés, suivie d’une brève présentation des modules mentionnés ci-dessus.

Installation

Des Modules Ansibles supplémentaires sont installés soit par projet, soit dans l’Ansible Source Code. Pour installer des modules supplémentaires par projet, ils doivent être copiés dans le dossier “library” sous les répertoires supérieurs du projet. Ceci ressemblera à ceci :

$ 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

Si les modules sont installés dans l’Ansible Source Code, l’Ansible Source Code entier doit être cloné :

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

Ansible peut ensuite être installé à l’aide d’un tuyau :

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

Enfin, les Modules Ansibles supplémentaires doivent être copiés dans le dossier ansible/lib/ansible/modules/extras/ ou un sous-dossier de celui-ci. Les modules Univention appartiennent toujours au sous-dossier univention.

udm_group

Pour créer un groupe avec le nom employé et comme LDAP DN cn=employé,cn=groupes,ou=entreprise,dc=exemple,dc=org, la tâche suivante est nécessaire :

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

Si seul l’attribut nom est spécifié, le groupe avec le DN cn=<name&gt ;,cn=groups,cn=groups,<LDAP Base DN> est créé.

udm_user

Un objet utilisateur contient de nombreux attributs possibles, c’est pourquoi seul un exemple minimal est présenté ci-dessous. Tous les attributs disponibles sont documentés directement dans le module Ansible.

Si un utilisateur Hans Muster doit être créé avec le nom d’utilisateur hans.muster et le mot de passe secure_password, la tâche suivante est nécessaire :

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

Spécifier le chemin LDAP exact est également possible comme avec udm_group. Si rien d’autre n’est spécifié, l’utilisateur est créé avec le LDAP DN uid=hans.muster,cn=users,dc=example,dc=com.

udm_dns_zone

Les zones DNS n’ont pas beaucoup d’attributs possibles. Une particularité est que les interfaces, les enregistrements NS et MX sont définis dans la zone.
Les interfaces peuvent être comparées avec BIND 9Views. Ceux-ci définissent d’où les requêtes DNS correspondantes sont répondues.
Les enregistrements NS et MX sont spécialement gérés par UCS et ne sont donc pas configurés avec udm_dns_record, mais avec udm_dns_zone.

Par exemple, la zone forward zone example.com est créée avec le serveur de noms responsable ucs.example.com, qui répond aux requêtes DNS sur l’adresse IP 192.168.1.1.1 comme suit :

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

udm_dns_record

Les enregistrements DNS individuels peuvent être créés avec udm_dns_record. Les entrées possibles sont :

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

Doit aller dans la zone example.com l’entrée www.example.com. DANS A 192.168.1.1.1, la tâche suivante est requise :

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

udm_share

Les partages Samba et NFS peuvent être gérés avec le module udm_share. Un objet de partage contient un grand nombre d’attributs, qui sont documentés dans le module Ansible.

Pour créer le partage homessur le système Ansible Target System, la tâche suivante est nécessaire :

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

Links