41 lines
1.2 KiB
Python
41 lines
1.2 KiB
Python
|
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)
|