You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
1.6 KiB

#!/usr/bin/env python
## imports
import json
import requests
import os, sys
## loaders
from dotenv import load_dotenv
env_path = os.path.abspath ( os.path.join ( os.curdir, os.path.relpath('.env') ) )
load_dotenv(verbose=True, dotenv_path=env_path)
## constants
MODOBOA_API_BASE = os.getenv("MODOBOA_API_BASE")
PDNS_API_BASE = os.getenv("PDNS_API_BASE")
MODOBOA_TOKEN = os.getenv("MODOBOA_TOKEN")
PDNS_TOKEN = os.getenv("PDNS_TOKEN")
def search_pdns(query):
payload = {
'q': query,
'max': 10000,
'object_type': 'all'
}
r = requests.get(PDNS_API_BASE + 'search-data', headers={'X-API-Key': PDNS_TOKEN}, params=payload)
return r.json()
def set_record(zone, name, type, record):
payload = {
'rrsets': [
{
'name': name,
'type': type,
'ttl': 10800,
'changetype': "REPLACE",
'records': [ record ]
}
]
}
print ('payload')
pprint(payload)
p = requests.patch(PDNS_API_BASE + 'zones/' + zone, headers={'X-API-KEY': PDNS_TOKEN}, json=payload)
print (p.text)
def pprint(text):
print json.dumps(text, sort_keys=True, indent=4, separators=(',', ': '))
def change_ip(record,ip):
record['content']=ip
set_record(record['zone'],record['name'],record['type'], record)
def change_records(a, b):
records = search_pdns(a)
[change_ip(record, b) for record in records]
if len(sys.argv) > 1:
[pprint(result) for result in search_pdns(sys.argv[1])]
if len(sys.argv) > 2:
change_records(sys.argv[1], sys.argv[2])
else:
print('Usage:\n' + sys.argv[0] + ' from-ip to-ip')