# Cloudflare provider The [Cloudflare](https://cloudflare.com) provider implements all [Protocol53](https://github.com/outskirtslabs/protocol53) operations with Cloudflare’s v4 API. ## Installation ```clojure {:deps {com.outskirtslabs/protocol53-cloudflare {:mvn/version "0.0.1"}}} ``` ## Authentication Use scoped API tokens, not legacy global API keys. For one token, grant `Zone:Read` and `Zone.DNS:Write` across the zones you manage: ```clojure (require '[ol.protocol53.cloudflare :as cloudflare]) (def dns (cloudflare/provider {:api-token "token"})) ``` For separate read and write credentials, grant `Zone:Read` to `:zone-token` and `Zone.DNS:Write` to `:api-token`: ```clojure (def dns (cloudflare/provider {:api-token "dns-write-token" :zone-token "zone-read-token"})) ``` Pass a caller-built `java.net.http.HttpClient` as `:http-client` when advanced HTTP policy requires Java interop. ## Integration Tests
⚠️ WARNING
Run the lifecycle suite only against a dedicated disposable zone. It creates, replaces, and deletes DNS records. A provider or testkit defect could affect records outside the reserved names.
Set these variables in the process environment or the repository `.env` file. Process values take precedence over `.env` values. | | | | | --- | --- | --- | | Variable | Required | Description | | `CLOUDFLARE_API_TOKEN` | yes | Scoped token with DNS write access. | | `CLOUDFLARE_TEST_ZONE` | one of | Dedicated absolute zone name. | | `CLOUDFLARE_DOMAIN` | one of | Alternative zone name; a trailing dot is added when absent. | | `CLOUDFLARE_ZONE_TOKEN` | no | Separate scoped token with zone read access. | `CLOUDFLARE_ZONE_ID` is not required because the provider discovers the zone by name. The wrapper sets `:skip-empty-txt? true` because Cloudflare rejects empty TXT RDATA; it still runs ordinary and wildcard TXT lifecycle checks. Run every discovered provider integration suite from the repository root: ```shell bb test:integration ``` The runner discovers `providers/*/src/test-integration`. Cloudflare is skipped when its credentials are missing; another provider failure does not stop the remaining suites. Cloudflare creates and deletes records whose effective owner starts with `p53test-`. Integration tests do not run from `bb test`, `bb qa`, or `bb ci`. Do not run concurrent lifecycle suites against one zone.