import os import CloudFlare # 从环境变量中获取认证信息 cf_email = "admin@congyu.moe" #os.environ.get('CLOUDFLARE_EMAIL') cf_api_key = "e3ba355a91c6ca8729507f8bf90f5c479d30d" #os.environ.get('CLOUDFLARE_API_KEY') def manage_dns_records(mapping, zone_id): # 初始化 Cloudflare cf = CloudFlare.CloudFlare(email=cf_email, token=cf_api_key) # 遍历映射字典并添加或更新 DNS 记录 for record_name, ip_address in mapping.items(): try: dns_records = cf.zones.dns_records.get(zone_id, params={'name': record_name, 'match': 'all', 'type': 'A'}) except CloudFlare.exceptions.CloudFlareAPIError as e: exit('/zones.dns_records.get %d %s - api call failed' % (e, e)) dns_data = {'type': 'A', 'name': record_name, 'content': ip_address} if len(dns_records) == 0: # 添加新记录 try: cf.zones.dns_records.post(zone_id, data=dns_data) print(f'DNS record for {record_name} added.') except CloudFlare.exceptions.CloudFlareAPIError as e: print(f'Error adding DNS record for {record_name}: {e}') else: # 如果记录存在且一致,则不进行更新 existing_record = dns_records[0] if existing_record['content'] == ip_address: print(f'DNS record for {record_name} is already up to date.') continue # 更新现有记录 dns_record_id = existing_record['id'] try: cf.zones.dns_records.put(zone_id, dns_record_id, data=dns_data) print(f'DNS record for {record_name} updated.') except CloudFlare.exceptions.CloudFlareAPIError as e: print(f'Error updating DNS record for {record_name}: {e}')