maj argparse

This commit is contained in:
Benjamin Graillot 2018-08-27 22:39:15 +02:00
parent c3ad5c3ac4
commit 208b4d4653

56
main.py
View file

@ -1,14 +1,15 @@
#!/usr/bin/env python3
import argparse
from configparser import ConfigParser
import socket
import datetime
from multiprocessing import Pool
import netaddr
import os
import socket
import sys
from re2oapi import Re2oAPIClient
import sys
import os
path = os.path.dirname(os.path.abspath(__file__))
config = ConfigParser()
@ -77,8 +78,8 @@ template_reverse = (
"{ptr_records}\n"
)
def write_dns_files(api_client, processes):
for zone in api_client.list("dns/zones"):
def write_dns_file(zone):
zone_name = zone['name'][1:]
now = datetime.datetime.now(datetime.timezone.utc)
@ -220,6 +221,15 @@ def write_dns_files(api_client, processes):
f.write(zone_file_content)
def write_dns_files(api_client, processes):
if processes:
with Pool(processes) as pool:
pool.map(write_dns_file, api_client.list("dns/zones"))
else:
for zone in api_client.list("dns/zones"):
write_dns_file(zone)
def get_ip_reverse(ip, prefix_length):
""" Truncate an ip address given a prefix length """
ip = netaddr.IPAddress(ip)
@ -375,21 +385,37 @@ def write_dns_reverse_file(api_client):
f.write(zone_file_content)
zone_v6.append(zone6_name)
api_client = Re2oAPIClient(api_hostname, api_username, api_password, use_tls=False)
api_client = Re2oAPIClient(api_hostname, api_username, api_password, use_tls=True)
client_hostname = socket.gethostname().split('.', 1)[0]
for arg in sys.argv:
if arg=="--force":
write_dns_files(api_client)
if __name__ == '__main__':
parser = argparse.ArgumentParser(description="Générer les fichiers de zone du DNS.")
parser.add_argument('-f', '--force', '--forced', help="Forcer la régénaration des fichiers de zone.", action='store_true')
parser.add_argument('-k', '--keep', help="Ne pas changer le statut du service.", action='store_true')
parser.add_argument('-p', '--processes', help="Regénérer en utilisant n processus en parallèle (par défaut ne pas parallèliser).", metavar='n', nargs=1, type=int, default=0)
args = parser.parse_args()
for service in api_client.list("services/regen/"):
if args.force:
write_dns_files(api_client, args.processes[0])
write_dns_reverse_file(api_client)
if not args.keep:
for service in api_client.list("services/regen/"):
if service['hostname'] == client_hostname and \
service['service_name'] == 'dns' and \
service['need_regen']:
write_dns_files(api_client)
write_dns_reverse_file(api_client)
api_client.patch(service['api_url'], data={'need_regen': False})
ok = os.system('/usr/sbin/knotc zone-reload >/dev/null 2>&1')
if not ok:
else:
for service in api_client.list("services/regen/"):
if service['hostname'] == client_hostname and \
service['service_name'] == 'dns' and \
service['need_regen']:
write_dns_files(api_client, args.processes[0])
write_dns_reverse_file(api_client)
if not args.keep:
api_client.patch(service['api_url'], data={'need_regen': False})
error = os.system('/usr/sbin/knotc zone-reload >/dev/null 2>&1')
if error:
# reload again and display the error message
os.system('/usr/sbin/knotc zone-reload')