Something went wrong. Try again.
This small application can be used to update the value of a DNS record.
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778"""Module with CLI application."""
import argparseimport jsonimport loggingimport sys
import dyns
from .api import public_ip, retrieve_record, updater
logger = logging.getLogger(__name__)
def update_dns_record(args: argparse.Namespace) -> None: """Parse the record and update the DNS record.""" parts = args.record.split(".") domain = ".".join(parts[-2:]) name = ".".join(parts[:-2])
if args.check: record = retrieve_record(name=name, domain=domain) if not record: msg = f"Record {name}.{domain} not found" logger.error(msg) sys.exit(-1)
print("Record:\n", json.dumps(record, indent=2)) ip = public_ip() print("Public IP:", ip) if ip != record["data"]: print("\033[91mThe record has to be updated!\033[0m") else: print("\033[92mThe record is updated!\033[0m")
else: logger.debug(f"Updating for name {name} in domain {domain}") updater(name=name, domain=domain)
def main(): """Execute main function to handle CLI parameters.""" parser = argparse.ArgumentParser( description=( "A simple command to update a DNS record in DigitalOcean with your public " "IP." ) ) parser.add_argument( "record", type=str, nargs="?", help="domain name (ex. 'home.example.com') to update with your public IP", ) parser.add_argument("--version", help="show version", action="store_true") parser.add_argument( "-v", help="increase verbosity of the output", action="store_true" ) parser.add_argument( "--check", help="checks the status of the record", action="store_true" ) parser.set_defaults(func=update_dns_record) args = parser.parse_args()
# check verbosity if args.v: logging.basicConfig(level=logging.INFO)
# just print version if args.version: print(dyns.__version__) sys.exit(0) elif not args.record: print("You need to indicate a DNS record to update") sys.exit(-1)
args.func(args)