Python Cloudflare DNS A 记录更新示例

此脚本使用 Cloudflare Python API 更新 DNS A 记录(IPv4 地址)。它期望 A 记录已存在。

另请参阅Python Cloudflare DNS A 记录创建或更新示例,了解如果记录不存在则创建记录的此脚本变体。

python-cloudflare-dns-a-record-update-example.py
#!/usr/bin/env python3
import CloudFlare
import argparse
import sys

if __name__ == "__main__":
    parser = argparse.ArgumentParser()
    parser.add_argument("-e", "--email", required=True, help="要使用的 Cloudflare 登录电子邮件")
    parser.add_argument("-n", "--hostname", required=True, help="要更新的主机名,例如 mydyndns.mydomain.com")
    parser.add_argument("-k", "--api-key", required=True, help="要使用的 Cloudflare 全局 API 密钥。注意:特定于域的 API 令牌不起作用!")
    parser.add_argument("-i", "--ip-address", required=True, help="要将记录更新为哪个 IP 地址")
    parser.add_argument("-t", "--ttl", default=60, type=int, help="记录的 TTL(以秒为单位,或 1 表示自动)")
    args = parser.parse_args()

    # 初始化 Cloudflare API 客户端
    cf = CloudFlare.CloudFlare(
        email=args.email,
        token=args.api_key
    )
    # 获取区域 ID(用于域)。这就是我们需要 API 密钥而域 API 令牌不够的原因
    zone = ".".join(args.hostname.split(".")[-2:]) # domain = test.mydomain.com => zone = mydomain.com
    zones = cf.zones.get(params={"name": zone})
    if len(zones) == 0:
        print(f"Could not find CloudFlare zone {zone}, please check domain {args.hostname}")
        sys.exit(2)
    zone_id = zones[0]["id"]

    # 获取现有 A 记录
    a_record = cf.zones.dns_records.get(zone_id, params={"name": args.hostname, "type": "A"})[0]

    # 更新记录并保存到 cloudflare
    a_record["ttl"] = args.ttl # 1 == auto
    a_record["content"] = args.ip_address
    cf.zones.dns_records.put(zone_id, a_record["id"], data=a_record)

用法示例:

update_dns_usage_example.sh
./update-dns.py --api-key ... --email [email protected] --ttl 300 --ip 1.2.3.4 --hostname mysubdomain.domain.com

Check out similar posts by category: Networking, Python