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
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')
|