Add options for resolvers and the api url
This commit is contained in:
parent
c512919fac
commit
2d9a070514
2 changed files with 24 additions and 17 deletions
|
|
@ -2,10 +2,17 @@ import click
|
|||
|
||||
from ip_listener.main import detect
|
||||
|
||||
DEFAULT_RESOLVERS = ["@resolver1.opendns.com", "@resolver2.opendns.com"]
|
||||
DEFAULT_API_URL = "https://api.transip.nl/v6"
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.argument("domains", envvar="DOMAIN", nargs=-1)
|
||||
@click.argument("token", envvar="TOKEN")
|
||||
@click.option(
|
||||
"--resolvers", envvar="RESOLVERS", default=DEFAULT_RESOLVERS, multiple=True
|
||||
)
|
||||
@click.option("--api-url", envvar="API_URL", default=DEFAULT_API_URL)
|
||||
@click.option("--read-only/--write", envvar="READ_ONLY", default=False)
|
||||
def run(domains, token, read_only):
|
||||
detect(domains, token, read_only)
|
||||
def run(*args):
|
||||
detect(*args)
|
||||
|
|
|
|||
|
|
@ -7,28 +7,27 @@ import requests
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def _get_ip():
|
||||
def _get_ip(resolvers):
|
||||
try:
|
||||
# TODO make resolvers customizable
|
||||
output = subprocess.check_output(
|
||||
["dig", "+short", "myip.opendns.com", "@resolver1.opendns.com"],
|
||||
["dig", "+short", *resolvers],
|
||||
stderr=subprocess.STDOUT,
|
||||
)
|
||||
except subprocess.CalledProcessError as e:
|
||||
raise OSError("Unable to retrieve current IP") from e
|
||||
|
||||
|
||||
# TODO set URL global
|
||||
def _get_domain(domain, token):
|
||||
def _get_domain(domain, token, api_url):
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
|
||||
return requests.get(url, headers=headers)
|
||||
return requests.get(f"{api_url}/domains/{domain}/dns", headers=headers)
|
||||
|
||||
|
||||
def _get_domain_data(domains, token):
|
||||
def _get_domain_data(domains, token, api_url):
|
||||
with ThreadPoolExecutor(max_workers=10) as executor:
|
||||
futures = {
|
||||
executor.submit(_get_domain, domain, token): domain for domain in domains
|
||||
executor.submit(_get_domain, domain, token, api_url): domain
|
||||
for domain in domains
|
||||
}
|
||||
|
||||
for future in as_completed(futures):
|
||||
|
|
@ -44,11 +43,12 @@ def _get_domain_data(domains, token):
|
|||
yield {"domain": domain, **response.json()}
|
||||
|
||||
|
||||
# TODO set URL global
|
||||
def _update_domain(domain, payload, token):
|
||||
def _update_domain(domain, payload, token, api_url):
|
||||
headers = {"Authorization": f"Bearer {token}"}
|
||||
|
||||
return requests.put(url, data=json.dumps(payload), headers=headers)
|
||||
return requests.put(
|
||||
f"{api_url}/domains/{domain}/dns", data=json.dumps(payload), headers=headers
|
||||
)
|
||||
|
||||
|
||||
def _update_domains(updated_domains, token, read_only):
|
||||
|
|
@ -74,9 +74,9 @@ def _update_domains(updated_domains, token, read_only):
|
|||
logger.info(f"Updated domain {domain}")
|
||||
|
||||
|
||||
def detect(domains, token, read_only):
|
||||
ip = _get_ip()
|
||||
domain_data = _get_domain_data(domains, token)
|
||||
def detect(domains, resolvers, token, api_url, read_only):
|
||||
ip = _get_ip(resolvers)
|
||||
domain_data = _get_domain_data(domains, token, api_url)
|
||||
updated_domains = {}
|
||||
|
||||
for data in domain_data:
|
||||
|
|
@ -97,4 +97,4 @@ def detect(domains, token, read_only):
|
|||
|
||||
updated_domains[domain] = {"dnsEntries": updated_entries}
|
||||
|
||||
_update_domains(updated_domains, token)
|
||||
_update_domains(updated_domains, token, api_url, read_only)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue