#!/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')