65 lines
1.5 KiB
Python
Executable File
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()
|