Files
docker-nsupdate-ddns/main.py
Merijntje Tak 41175b9fc7 Initial version
2022-07-09 22:35:01 +02:00

65 lines
1.5 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import sys
from dotenv import load_dotenv
import time
from lib import *
config = {}
ipam4_old = {}
def main():
get_config()
if not config['one_shot']:
while True:
loop()
time.sleep(config['refresh_interval'])
loop()
def loop():
container.init(config)
ipam4 = container.generate_container_list()
global ipam4_old
additions4 = determine_additions(ipam4, ipam4_old)
deletions4 = determine_deletions(ipam4, ipam4_old)
nsupdate.init(config)
nsupdate.delete_records(deletions4)
nsupdate.add_records(additions4)
ipam4_old = ipam4
def get_config():
config_file = sys.argv[1] if len(sys.argv) >= 2 else 'config'
load_dotenv(config_file)
config['domain'] = os.environ.get("DOMAIN")
config['hostname_label'] = os.environ.get("HOSTNAME_LABEL")
config['default_network'] = os.environ.get("DEFAULT_NETWORK")
config['refresh_interval'] = int(os.environ.get("REFRESH_INTERVAL"))
config['one_shot'] = os.environ.get("ONE_SHOT").lower() in ['true', 'yes']
config['nameserver'] = os.environ.get("NAMESERVER")
config['tsig_name'] = os.environ.get("TSIG_NAME")
config['tsig_key'] = os.environ.get("TSIG_KEY")
def determine_additions(ipam, ipam_old):
return {k: v for k, v in ipam.items() if k not in ipam_old}
def determine_deletions(ipam, ipam_old):
return {k: v for k, v in ipam_old.items() if k not in ipam}
pass
if __name__ == "__main__":
main()