UCS Ansible Modules
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> ;,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 homes
sur 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