class TestPyCloudFlareClient(unittest.TestCase): def setUp(self): self.cfapi = CloudFlare('EMAIL', 'API_KEY') def test_create_new_record_dns(self): self.assertEqual(self.cfapi.rec_new('domain', 'A', 'subdomain', '1.2.3.4')['result'], 'success') def test_delete_new_record_dns(self): dns_id = self.cfapi.get_rec_id_by_name('domain', 'subdomain') self.assertEqual(self.cfapi.rec_delete('domain', dns_id)['result'], 'success')
def update(self): wan_ip = network.Network().get_wan_ip() self.log("router wan ip is " + wan_ip) cfapi = None try: cfapi = CloudFlare(self.username, self.key) self.log("logged into cloudflare with %s using %s" % (self.username, self.key)) except Exception, e: msg = "could not login to cloudflare with %s using %s" % ( self.username, self.key) self.error(msg) raise DDNSError(msg)
def cf_update_ip(ip, root, name, rec_type='cname'): status = -1 service_mode = 1 if rec_type == 'A' or rec_type == 'AAAA': service_mode = 0 target_name = name + '.' + root cf = CF(config['DYN_CF_EMAIL'], config['DYN_CF_KEY']) domain_list = cf.rec_load_all(z=root)['response']['recs']['objs'] create_new = True for d in domain_list: if d['name'] == target_name: cf.rec_edit(z=root, _type=rec_type, _id=d['rec_id'], name=name, content=ip, service_mode=service_mode) create_new = False status = 0 break if create_new: cf.rec_new(zone=root, _type=rec_type, content=ip, name=target_name, service_mode=service_mode) status = 0 return status
from cloudflare import CloudFlare from config import Config config = Config() cloudFlare = CloudFlare(email=config['email'], apikey=config['apiKey'], zone=config['zone']) # print(cloudFlare.listRecords()) # print(cloudFlare.findRecordByName("xn--mcahiddayan-thb.com")) print(cloudFlare.findRecordById("9ccdfe71e7913f4ec32bc74a70546b64"))
def setUp(self): self.cfapi = CloudFlare('EMAIL', 'API_KEY')
# CFTYPE=A,CNAME # effect rec type from cloudflare import CloudFlare import os cfkey = os.getenv("CFKEY", "") cfuser = os.getenv("CFUSER", "") cfzone = os.getenv("CFZONE", "") cfdnip = os.getenv("CFDNIP", "") cfhost = os.getenv("CFHOST", "").split(",") cftype = os.getenv("CFTYPE", "A,CNAME").split(",") def filter_rec(rec): return rec["name"] in cfhost and rec["type"] in cftype cfapi = CloudFlare(cfuser, cfkey) recobjs = cfapi.rec_load_all(cfzone)["response"]["recs"]["objs"] recs = list(filter(filter_rec, recobjs)) for rec in recs: res = cfapi.rec_edit( z=cfzone, _type=rec["type"], _id=rec["rec_id"], name=rec["name"], content=cfdnip, service_mode=rec["service_mode"], ttl=rec["ttl"]) if res["msg"] == None: print(rec["name"], "update", cfdnip, res["result"]) else: print(rec["name"], "update", cfdnip, res["result"], res["msg"])
logger.setLevel(logging.DEBUG) fh = logging.FileHandler(log_file) fh.setLevel(logging.DEBUG) logger.addHandler(fh) formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setFormatter(formatter) logger.addHandler(fh) with open(filename, mode="r") as file: # The FullLoader parameter handles the conversion from YAML # scalar values to Python the dictionary format config = yaml.load(file, Loader=yaml.FullLoader) cloudFlare = CloudFlare(email=config['email'], apikey=config['apiKey'], zone=config['zone']) currentIp = cloudFlare._getIp() lastIp = config.get('lastIp', "NOT") if currentIp != lastIp: config.update({'lastIp': currentIp}) logger.info('Ip is changed ' + lastIp + ' It will be updated ' + currentIp) with open(filename, mode='w') as fileToWrite: yaml.safe_dump(config, fileToWrite, encoding='utf-8', allow_unicode=True) cloudFlare.updateRecordIpById( "9ccdfe71e7913f4ec32bc74a70546b64") #root