def revert_reaction(redata, jdata, logger, r_server): ''' This method reverts the heavy lifting ''' readded = 0 result = r_server.smembers("cloudflare-dns-failover:%s:%s" % (jdata['cid'], redata['id'])) if len(result) < 1: logger.debug("cloudflare-dns-failover: no removed records found") return None zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is None: logger.debug("cloudflare-dns-failover: could not pull zoneid") return False for item in result: logger.debug("cloudflare-dns-failover: Working on Redis item " + item) redis_data = json.loads(item) redis_data.pop("id", None) readd = cloudflare.add_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, redis_data) if readd: result = r_server.srem( "cloudflare-dns-failover:%s:%s" % (jdata['cid'], redata['id']), item) logger.debug("cloudflare-dns-failover: Re-added record %s" % item) readded = readded + 1 else: logger.debug( "cloudflare-dns-failover: Could not re-add record %s" % item) if readded > 0: return True else: return None
def run_reaction(redata, jdata, logger): ''' This method performs the heavy lifting ''' rec_data = { 'type' : redata['data']['rec_type'], 'content' : redata['data']['content'] } if redata['data']['rec_name']: rec_data['name'] = redata['data']['rec_name'] zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is not None: check = cloudflare.get_recs(redata['data']['email'], redata['data']['apikey'], zoneid, logger, page=1, search=rec_data) logger.debug("cloudflare-rec-update: Got Records " + json.dumps(check)) modified = 0 for key in check.keys(): logger.debug("cloudflare-rec-update: Replacing record id %s" % key) new_rec_data = { 'id' : key, 'zone_id': zoneid, 'name' : check[key]['name'], 'type' : redata['data']['new_rec_type'], 'content' : redata['data']['new_content'], } try: result = cloudflare.update_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, key, new_rec_data) if result is False: logger.debug("cloudflare-rec-update: Replacing record id %s failed" % key) return False else: modified = modified + 1 except: logger.debug("cloudflare-rec-update: Calling update record" + " failed for id %s" % key) return False if modified == 0: return None else: return True else: logger.debug("cloudflare-rec-add: Could not pull zone id for domain " + redata['data']['domain'] + " for monitor " + redata['id']) return False
def run_reaction(redata, jdata, logger): ''' This method performs the heavy lifting ''' rec_data = { 'type': redata['data']['rec_type'], 'content': redata['data']['content'] } if redata['data']['rec_name']: rec_data['name'] = redata['data']['rec_name'] zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is not None: check = cloudflare.get_recs(redata['data']['email'], redata['data']['apikey'], zoneid, logger, page=1, search=rec_data) logger.debug("cloudflare-rec-update: Got Records " + json.dumps(check)) modified = 0 for key in check.keys(): logger.debug("cloudflare-rec-update: Replacing record id %s" % key) new_rec_data = { 'id': key, 'zone_id': zoneid, 'name': check[key]['name'], 'type': redata['data']['new_rec_type'], 'content': redata['data']['new_content'], } try: result = cloudflare.update_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, key, new_rec_data) if result is False: logger.debug( "cloudflare-rec-update: Replacing record id %s failed" % key) return False else: modified = modified + 1 except: logger.debug("cloudflare-rec-update: Calling update record" + " failed for id %s" % key) return False if modified == 0: return None else: return True else: logger.debug("cloudflare-rec-add: Could not pull zone id for domain " + redata['data']['domain'] + " for monitor " + redata['id']) return False
def run_reaction(redata, jdata, logger): ''' This method performs the heavy lifting ''' rec_data = { 'name': redata['data']['rec_name'], 'type': redata['data']['rec_type'], 'content': redata['data']['content'] } zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is not None: check = cloudflare.get_recs( redata['data']['email'], redata['data']['apikey'], zoneid, logger, page=1, search=rec_data, ) logger.debug("cloudflare-rec-add: Got Records " + json.dumps(check)) if len(check) == 0: logger.debug("cloudflare-rec-add: Found " + str(len(check)) + " matching records") rec_data['ttl'] = redata['data']['ttl'] if "true" in redata['data']['proxied']: rec_data['proxied'] = True else: rec_data['proxied'] = False result = cloudflare.add_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, rec_data) if result: logger.info( "cloudflare-rec-add: Successfully added record for monitor " + redata['id']) return True else: logger.debug( "cloudflare-rec-add: Failed to add record for monitor " + redata['id']) return False else: logger.debug("cloudflare-rec-add: Found " + str(len(check)) + " matching records") return None else: logger.debug("cloudflare-rec-add: Could not pull zone id for domain " + redata['data']['domain'] + " for monitor " + redata['id']) return False
def run_reaction(redata, jdata, logger): ''' This method performs the heavy lifting ''' rec_data = { 'name' : redata['data']['rec_name'], 'type' : redata['data']['rec_type'], 'content' : redata['data']['content'] } zoneid = cloudflare.get_zoneid( redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is not None: check = cloudflare.get_recs( redata['data']['email'], redata['data']['apikey'], zoneid, logger, page=1, search=rec_data, ) logger.debug("cloudflare-rec-add: Got Records " + json.dumps(check)) if len(check) == 0: logger.debug("cloudflare-rec-add: Found " + str(len(check)) + " matching records") rec_data['ttl'] = redata['data']['ttl'] if "true" in redata['data']['proxied']: rec_data['proxied'] = True else: rec_data['proxied'] = False result = cloudflare.add_rec( redata['data']['email'], redata['data']['apikey'], zoneid, logger, rec_data) if result: logger.info("cloudflare-rec-add: Successfully added record for monitor " + redata['id']) return True else: logger.debug("cloudflare-rec-add: Failed to add record for monitor " + redata['id']) return False else: logger.debug("cloudflare-rec-add: Found " + str(len(check)) + " matching records") return None else: logger.debug("cloudflare-rec-add: Could not pull zone id for domain " + redata['data']['domain'] + " for monitor " + redata['id']) return False
def run_reaction(redata, jdata, logger, r_server): ''' This method performs the heavy lifting ''' rec_data = { 'type' : redata['data']['rec_type'], 'content' : redata['data']['content'] } if redata['data']['rec_name']: rec_data['name'] = redata['data']['rec_name'] zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is not None: check = cloudflare.get_recs(redata['data']['email'], redata['data']['apikey'], zoneid, logger, page=1, search=rec_data) logger.debug("cloudflare-rec-remove: Got Records " + json.dumps(check)) removed = 0 for key in check.keys(): logger.debug("cloudflare-rec-remove: Removing record id %s" % key) try: result = cloudflare.del_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, key) if result is False: logger.debug("cloudflare-rec-remove: Delete request of record id %s failed" % key) return False else: removed = removed + 1 except: logger.debug("cloudflare-rec-remove: Calling delete record" + " failed for id %s" % key) return False if removed == 0: return None else: return True else: logger.debug("cloudflare-rec-remove: Could not pull zone id for domain " + redata['data']['domain'] + " for monitor " + redata['id']) return False
def revert_reaction(redata, jdata, logger, r_server): ''' This method reverts the heavy lifting ''' readded = 0 result = r_server.smembers("cloudflare-dns-failover:%s:%s" % (jdata['cid'], redata['id'])) if len(result) < 1: logger.debug("cloudflare-dns-failover: no removed records found") return None zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is None: logger.debug("cloudflare-dns-failover: could not pull zoneid") return False for item in result: logger.debug("cloudflare-dns-failover: Working on Redis item " + item) redis_data = json.loads(item) redis_data.pop("id", None) readd = cloudflare.add_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, redis_data) if readd: result = r_server.srem("cloudflare-dns-failover:%s:%s" % (jdata['cid'], redata['id']), item) logger.debug("cloudflare-dns-failover: Re-added record %s" % item) readded = readded + 1 else: logger.debug("cloudflare-dns-failover: Could not re-add record %s" % item) if readded > 0: return True else: return None
def run_reaction(redata, jdata, logger, r_server): ''' This method performs the heavy lifting ''' removed = 0 zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is None: logger.debug("cloudflare-dns-failover: could not pull zoneid") return False rec_data = {} if redata['data']['rec_name']: rec_data = {'name' : redata['data']['rec_name']} recs = cloudflare.get_recs(redata['data']['email'], redata['data']['apikey'], zoneid, logger, page=1, search=rec_data) logger.debug("cloudflare-dns-failover: got records " + json.dumps(recs)) if len(recs) < 1: logger.debug("cloudflare-dns-failover: could not pull records for domain %s" % redata['data']['domain']) return False names = {} queued = {} for rec in recs.keys(): name = recs[rec]['name'] + "-" + recs[rec]['type'] if name in names: names[name].append(rec) else: names[name] = [rec] if (name in queued and recs[rec]['content'] == redata['data']['content']): queued[name].append(rec) elif recs[rec]['content'] == redata['data']['content']: queued[name] = [rec] for name in names.keys(): if len(names[name]) > 1 and name in queued: for item in queued[name]: result = cloudflare.del_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, item) logger.debug("cloudflare-dns-failover: Deleted record id %s" % item) if result: removed = removed + 1 redis_key = "cloudflare-dns-failover:%s:%s" % (jdata['cid'], redata['id'],) rec_json = json.dumps(recs[item]) try: r_server.sadd(redis_key, rec_json) except: logger.debug("cloudflare-dns-failover: Could not add " " record to redis %s" % item) else: logger.debug("cloudflare-dns-failover: Delete request " "of record id %s failed" % item) if removed == 0: return None else: return True
def run_reaction(redata, jdata, logger, r_server): ''' This method performs the heavy lifting ''' removed = 0 zoneid = cloudflare.get_zoneid(redata['data']['email'], redata['data']['apikey'], redata['data']['domain'], logger) if zoneid is None: logger.debug("cloudflare-dns-failover: could not pull zoneid") return False rec_data = {} if redata['data']['rec_name']: rec_data = {'name' : redata['data']['rec_name']} recs = cloudflare.get_recs(redata['data']['email'], redata['data']['apikey'], zoneid, logger, page=1, search=rec_data) logger.debug("cloudflare-dns-failover: got records " + json.dumps(recs)) if len(recs) < 1: logger.debug("cloudflare-dns-failover: could not pull records for domain %s" % redata['data']['domain']) return False names = {} queued = {} for rec in recs.keys(): if recs[rec]['name'] in names: names[recs[rec]['name']].append(rec) else: names[recs[rec]['name']] = [rec] if (recs[rec]['name'] in queued and recs[rec]['content'] == redata['data']['content']): queued[recs[rec]['name']].append(rec) elif recs[rec]['content'] == redata['data']['content']: queued[recs[rec]['name']] = [rec] for name in names.keys(): if len(names[name]) > 1 and name in queued: for item in queued[name]: result = cloudflare.del_rec(redata['data']['email'], redata['data']['apikey'], zoneid, logger, item) logger.debug("cloudflare-dns-failover: Deleted record id %s" % item) if result: removed = removed + 1 redis_key = "cloudflare-dns-failover:%s:%s" % (jdata['cid'], redata['id'],) rec_json = json.dumps(recs[item]) try: r_server.sadd(redis_key, rec_json) except: logger.debug("cloudflare-dns-failover: Could not add " " record to redis %s" % item) else: logger.debug("cloudflare-dns-failover: Delete request " "of record id %s failed" % item) if removed == 0: return None else: return True