#!/bin/bash

WD=/var/run/resolvconf/
CONFIG_DIR=${WD}/interface/
STATIC_CONFIG_FILE=mgmt.static
DYNAMIC_CONFIG_FILE_TEMPLATE=*.dhclient

update_symlink()
{
    ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf
}

start()
{
    update_symlink

    redis-dump -d 4 -k "DNS_NAMESERVER*" -y > /tmp/dns.json
    if [[ $? -eq 0 && "$(cat /tmp/dns.json)" != "{}" ]]; then
        # Apply static DNS configuration and disable updates
        /sbin/resolvconf --disable-updates
        pushd ${CONFIG_DIR}
        # Backup dynamic configuration to restore it when the static configuration is removed
        mv ${DYNAMIC_CONFIG_FILE_TEMPLATE} ${WD} || true

        sonic-cfggen -d -t /usr/share/sonic/templates/resolv.conf.j2,${STATIC_CONFIG_FILE}

        /sbin/resolvconf --enable-updates
        /sbin/resolvconf -u
        /sbin/resolvconf --disable-updates
        popd
    else
        # Dynamic DNS configuration. Enable updates. It is expected to receive configuraution for DHCP server
        /sbin/resolvconf --disable-updates
        pushd ${CONFIG_DIR}
        rm -f ${STATIC_CONFIG_FILE}
        # Restore dynamic configuration if it exists
        mv ${WD}/${DYNAMIC_CONFIG_FILE_TEMPLATE} ${CONFIG_DIR} || true

        /sbin/resolvconf --enable-updates
        /sbin/resolvconf -u
    fi
}

clean-dynamic-conf()
{
    rm -f ${WD}/${DYNAMIC_CONFIG_FILE_TEMPLATE}
    rm -f ${WD}/postponed-update
}

case $1 in
    start)
        start
        ;;
    cleanup)
        clean-dynamic-conf
        ;;
    *)
        echo "Usage: $0 {start|clean-dynamic-conf}"
        exit 2
        ;;
esac