only update ovh zone with diffs
This commit is contained in:
parent
2cc7d966a0
commit
841e6043c6
55
dyndomain
55
dyndomain
@ -75,7 +75,7 @@ def full_name(host, domain):
|
|||||||
|
|
||||||
def make_zone_list(wan_hostname, wan_addr, hosts, hosts_nat, domain):
|
def make_zone_list(wan_hostname, wan_addr, hosts, hosts_nat, domain):
|
||||||
zone = []
|
zone = []
|
||||||
|
|
||||||
wan_hostname = full_name(wan_hostname, domain)
|
wan_hostname = full_name(wan_hostname, domain)
|
||||||
|
|
||||||
if wan_addr['ipv4'] != '':
|
if wan_addr['ipv4'] != '':
|
||||||
@ -103,6 +103,10 @@ def read_zone_list_from_file(zone_filename):
|
|||||||
return zone_list
|
return zone_list
|
||||||
|
|
||||||
|
|
||||||
|
def make_delete_zone_list(zone_list, prev_zone_list):
|
||||||
|
return make_update_zone_list(prev_zone_list, zone_list)
|
||||||
|
|
||||||
|
|
||||||
def make_update_zone_list(zone_list, prev_zone_list):
|
def make_update_zone_list(zone_list, prev_zone_list):
|
||||||
update_zone_list = []
|
update_zone_list = []
|
||||||
for entry in zone_list:
|
for entry in zone_list:
|
||||||
@ -128,18 +132,20 @@ def log(msg):
|
|||||||
logfile.write("%s - %s\n" % (stamp, msg))
|
logfile.write("%s - %s\n" % (stamp, msg))
|
||||||
|
|
||||||
|
|
||||||
def log_update_zone(zone_list):
|
def log_update_zone(zone_list, delete_zone_list):
|
||||||
for host,typea,addr in zone_list:
|
for host,typea,addr in zone_list:
|
||||||
log("%-20s %-6s %s" % (host, typea, addr))
|
log("%-20s %-6s %s" % (host, typea, addr))
|
||||||
|
for host,typea,addr in delete_zone_list:
|
||||||
|
log("DELETE: %-20s %-6s %s" % (host, typea, addr))
|
||||||
|
|
||||||
|
|
||||||
def ovh_update_zone(domain, zone_list):
|
def ovh_update_zone(domain, update_zone_list, delete_zone_list):
|
||||||
if not len(zone_list):
|
if not len(update_zone_list) and not len(delete_zone_list):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
client = ovh.Client()
|
client = ovh.Client()
|
||||||
|
|
||||||
for host, fieldtype, target in zone_list:
|
for host, fieldtype, target in update_zone_list:
|
||||||
result = client.get('/domain/zone/%s/record' % domain,
|
result = client.get('/domain/zone/%s/record' % domain,
|
||||||
fieldType=fieldtype,
|
fieldType=fieldtype,
|
||||||
subDomain=host)
|
subDomain=host)
|
||||||
@ -156,15 +162,24 @@ def ovh_update_zone(domain, zone_list):
|
|||||||
client.put('/domain/zone/%s/record/%ld' % (domain, id),
|
client.put('/domain/zone/%s/record/%ld' % (domain, id),
|
||||||
target=target)
|
target=target)
|
||||||
|
|
||||||
|
for host, fieldtype, target in delete_zone_list:
|
||||||
|
result = client.get('/domain/zone/%s/record' % domain,
|
||||||
|
fieldType=fieldtype,
|
||||||
|
subDomain=host)
|
||||||
|
if len(result) == 0:
|
||||||
|
continue
|
||||||
|
id = result[0]
|
||||||
|
#print("Delete entry for %s %s %s" % (host, fieldtype, target))
|
||||||
|
client.delete('/domain/zone/%s/record/%d' % (domain, id))
|
||||||
#print("Refresh zone %s" % domain)
|
#print("Refresh zone %s" % domain)
|
||||||
client.post('/domain/zone/%s/refresh' % domain)
|
client.post('/domain/zone/%s/refresh' % domain)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def send_update_mail(mail_to, mail_from, zone_domain, update_zone_list, wan):
|
def send_update_mail(mail_to, mail_from, zone_domain, update_zone_list, delete_zone_list, wan):
|
||||||
#print('Send email to %s' % mail_to)
|
#print('Send email to %s' % mail_to)
|
||||||
msg = EmailMessage()
|
msg = EmailMessage()
|
||||||
|
|
||||||
msg['Subject'] = "Livebox update in %s" % zone_domain
|
msg['Subject'] = "Livebox update in %s" % zone_domain
|
||||||
msg['From'] = mail_from
|
msg['From'] = mail_from
|
||||||
msg['To' ] = mail_to
|
msg['To' ] = mail_to
|
||||||
@ -174,9 +189,15 @@ def send_update_mail(mail_to, mail_from, zone_domain, update_zone_list, wan):
|
|||||||
txt = txt + "WAN IPv6 : %s\n" % wan['ipv6']
|
txt = txt + "WAN IPv6 : %s\n" % wan['ipv6']
|
||||||
|
|
||||||
txt = txt + "\nZone %s has been updated:\n" % zone_domain
|
txt = txt + "\nZone %s has been updated:\n" % zone_domain
|
||||||
|
|
||||||
for host,tp,addr in update_zone_list:
|
for host,tp,addr in update_zone_list:
|
||||||
txt = txt + " %-20s %-4s %s\n" % (host,tp,addr)
|
txt = txt + " %-20s %-4s %s\n" % (host,tp,addr)
|
||||||
|
|
||||||
|
txt = txt + "\nRemoved entries:\n"
|
||||||
|
|
||||||
|
for host,tp,addr in delete_zone_list:
|
||||||
|
txt = txt + " %-20s %-4s %s\n" % (host,tp,addr)
|
||||||
|
|
||||||
txt = txt + '\n'
|
txt = txt + '\n'
|
||||||
|
|
||||||
msg.set_content(txt)
|
msg.set_content(txt)
|
||||||
@ -184,7 +205,7 @@ def send_update_mail(mail_to, mail_from, zone_domain, update_zone_list, wan):
|
|||||||
s = smtplib.SMTP('localhost')
|
s = smtplib.SMTP('localhost')
|
||||||
s.send_message(msg)
|
s.send_message(msg)
|
||||||
s.quit()
|
s.quit()
|
||||||
|
|
||||||
|
|
||||||
load_conf()
|
load_conf()
|
||||||
|
|
||||||
@ -193,13 +214,17 @@ if not ping(wan_hostname):
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
sysbus.load_conf()
|
sysbus.load_conf()
|
||||||
sysbus.auth()
|
r = sysbus.auth(False)
|
||||||
|
if not r:
|
||||||
|
print('Error: cannot authenticate on livebox')
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
hosts = get_ipv6_hosts()
|
hosts = get_ipv6_hosts()
|
||||||
wan = get_wan_addr()
|
wan = get_wan_addr()
|
||||||
|
|
||||||
zone_list = make_zone_list(wan_hostname, wan, hosts, hosts_ipv4_nat_list, zone_subdomain)
|
zone_list = make_zone_list(wan_hostname, wan, hosts, hosts_ipv4_nat_list, zone_subdomain)
|
||||||
prev_zone_list = read_zone_list_from_file(zone_filename)
|
prev_zone_list = read_zone_list_from_file(zone_filename)
|
||||||
|
delete_zone_list = make_delete_zone_list(zone_list, prev_zone_list)
|
||||||
update_zone_list = make_update_zone_list(zone_list, prev_zone_list)
|
update_zone_list = make_update_zone_list(zone_list, prev_zone_list)
|
||||||
|
|
||||||
#print('zone_list:')
|
#print('zone_list:')
|
||||||
@ -208,13 +233,15 @@ update_zone_list = make_update_zone_list(zone_list, prev_zone_list)
|
|||||||
#pprint(prev_zone_list)
|
#pprint(prev_zone_list)
|
||||||
#print('update_zone_list:')
|
#print('update_zone_list:')
|
||||||
#pprint(update_zone_list)
|
#pprint(update_zone_list)
|
||||||
|
#print('delete_zone_list:')
|
||||||
|
#pprint(delete_zone_list)
|
||||||
|
|
||||||
log_update_zone(update_zone_list)
|
log_update_zone(update_zone_list, delete_zone_list)
|
||||||
|
|
||||||
sucess = ovh_update_zone(zone_domain, update_zone_list)
|
sucess = ovh_update_zone(zone_domain, update_zone_list, delete_zone_list)
|
||||||
|
|
||||||
if sucess:
|
if sucess:
|
||||||
new_zone_list = write_zone_list_to_file(zone_filename, prev_zone_list+update_zone_list)
|
new_zone_list = write_zone_list_to_file(zone_filename, zone_list)
|
||||||
send_update_mail(mail_to, mail_from, zone_domain, update_zone_list, wan)
|
send_update_mail(mail_to, mail_from, zone_domain, update_zone_list, delete_zone_list, wan)
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user