oshipka/provision/auto_dns/set_domain_ipv4.py

41 lines
1.2 KiB
Python
Raw Permalink Normal View History

2020-06-21 17:45:33 +02:00
import random
import sys
from time import sleep
import requests
from oshipka.util.os import run_os_cmd
from oshipka.util.process import process_exp_backoff
from provision.auto_dns.check import ipv4_sites, set_resolver_results, DEFAULT_TTL
def verify_dns_domain(domain, ipv4):
ip_on_dns = run_os_cmd("dig +short {}".format(domain))
if not ip_on_dns:
raise Exception("Record for {} doesn't exist".format(domain))
ip_on_dns = ip_on_dns.strip()
assert ip_on_dns == ipv4
def set_domain_ipv4(domain):
url = random.choice(ipv4_sites)
resp = requests.get(url)
ipv4 = resp.text.strip()
print('Got IP: {}'.format(ipv4))
try:
verify_dns_domain(domain, ipv4)
print("DNS already set up for {}".format(domain))
except Exception:
process_exp_backoff(set_resolver_results, func_args=[domain, 'A', ipv4])
print("Sleeping 5 sec...")
sleep(5)
print("Checking that {} is set".format(domain))
process_exp_backoff(verify_dns_domain, func_args=[domain, ipv4], max_attempts=0, max_sleep_time=DEFAULT_TTL)
if __name__ == "__main__":
domain = sys.argv[1]
if not domain:
print('domain is required first argument')
set_domain_ipv4(domain)