diff --git a/.gitignore b/.gitignore index 4b61a7f..fdf4aaf 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ config.ini **.list generated/* aliases_local +virtuals_local \ No newline at end of file diff --git a/README.md b/README.md index b39a2ff..03efec6 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ ## Re2o - Switchs config -This service uses Re2o API to generate Swicths config files +This service uses Re2o API to generate postfix config files More info on https://gitlab.federez.net/re2o/switchs/wikis/home diff --git a/main.py b/main.py index bc687b9..6a7d7a3 100755 --- a/main.py +++ b/main.py @@ -9,7 +9,7 @@ from jinja2 import Environment, FileSystemLoader import requests import base64 import json -from subprocess import call +from subprocess import call, DEVNULL import os import sys @@ -30,13 +30,15 @@ def generate(api_client): all_users = api_client.list("localemail/users") # Création de l'environnement Jinja env = Environment(loader=FileSystemLoader(path)) - template = env.get_template('templates/list') + + # On commence par les alias + template = env.get_template('templates/list_alias') aliases_rendered = template.render(data=all_users) - fichier = open(path+'/generated/aliases','w') + fichier = open(path+'/generated/aliases','w', encoding='utf-8') if os.path.isfile(path+'/aliases_local'): # if a local aliases file exist, add it's content at the beginning - local = open(path+'/aliases_local','r') + local = open(path+'/aliases_local','r', encoding='utf-8') for line in local.readlines(): fichier.write(line) local.close() @@ -44,7 +46,23 @@ def generate(api_client): fichier.write(aliases_rendered) fichier.close() - call(["/usr/bin/newaliases"], stdout=open(os.devnull, 'wb')) # Update the aliases config file + # On enchaine avec les redirections + template = env.get_template('templates/list_virtual') + virtuals_rendered = template.render(data=all_users) + + fichier = open(path+'/generated/virtual','w', encoding='utf-8') + + if os.path.isfile(path+'/virtuals_local'): # if a local aliases file exist, add it's content at the beginning + local = open(path+'/virtuals_local','r', encoding='utf-8') + for line in local.readlines(): + fichier.write(line) + local.close() + + fichier.write(virtuals_rendered) + fichier.close() + + call(["/usr/bin/newaliases"], stdout=DEVNULL) # Update the aliases config file + call(["/usr/sbin/postmap", path+"/generated/virtual"], stdout=DEVNULL) # Update the aliases config file call(["/usr/sbin/postfix", "reload"]) # force the reloading now for arg in sys.argv: diff --git a/templates/list b/templates/list_alias similarity index 100% rename from templates/list rename to templates/list_alias diff --git a/templates/list_virtual b/templates/list_virtual new file mode 100644 index 0000000..f905e17 --- /dev/null +++ b/templates/list_virtual @@ -0,0 +1,10 @@ +# Liste d'association alias:addresse des users + + +{% for user in data -%} +{%- for alias in user.email_address -%} +{%- if user.local_email_redirect -%} +{{ alias.complete_email_address }} {{ user.email }} +{% endif %} +{%- endfor -%} +{%- endfor -%}