Files
docker-nsupdate-ddns/main.py
2022-07-10 18:12:56 +02:00

88 lines
1.7 KiB
Python
Executable File

#!/usr/bin/env python3
import os
import stat
import sys
from dotenv import dotenv_values
import time
from lib import *
config = {}
ipam4_old = {}
def main():
global config
config = get_config()
try:
stat.S_ISSOCK(os.stat(config['DOCKER_SOCKET']).st_mode)
except Exception as e:
print(e)
print(
"Docker socket " +
config['DOCKER_SOCKET'] +
" not found, exiting...")
sys.exit(1)
if not eval(config['ONE_SHOT']):
while True:
loop()
time.sleep(int(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'
x = {
**dotenv_values(os.path.join(os.getcwd(), config_file)),
**os.environ
}
print("Detected config values:")
for item in [
'DOCKER_SOCKET',
'DOMAIN',
'IGNORE_LABEL',
'HOSTNAME_LABEL',
'DEFAULT_NETWORK',
'REFRESH_INTERVAL',
'ONE_SHOT',
'NAMESERVER',
'TSIG_NAME']:
print(item, end=": ")
print(x[item])
return x
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()