87 lines
3.3 KiB
Text
87 lines
3.3 KiB
Text
use ./nulib/cloudflare/mod.nu *
|
|
|
|
export def get-provider-metadata []: nothing -> record {
|
|
{
|
|
name: "cloudflare"
|
|
version: "1.0.0"
|
|
type: "dns"
|
|
description: "Cloudflare DNS provider — manages A/AAAA/CNAME/MX/TXT/SRV/CAA records via REST API"
|
|
|
|
capabilities: {
|
|
server_management: false
|
|
network_management: false
|
|
storage_management: false
|
|
load_balancer: false
|
|
firewall: false
|
|
floating_ip: false
|
|
dns_management: true
|
|
}
|
|
|
|
api: {
|
|
type: "rest"
|
|
base_url: "https://api.cloudflare.com/client/v4"
|
|
auth_method: "bearer_token"
|
|
documentation: "https://developers.cloudflare.com/api/"
|
|
version: "v4"
|
|
}
|
|
}
|
|
}
|
|
|
|
# DNS interface — dispatched by mw_dns_zone_get
|
|
export def dns_zone_get [zone: string]: nothing -> record {
|
|
cf_zone_info $zone
|
|
}
|
|
|
|
# DNS interface — dispatched by mw_dns_record_list
|
|
export def dns_record_list [zone: string]: nothing -> list {
|
|
cf_records_list $zone
|
|
}
|
|
|
|
# DNS interface — dispatched by mw_dns_record_create
|
|
export def dns_record_create [rec: record]: nothing -> record {
|
|
cf_record_create $rec.zone $rec
|
|
}
|
|
|
|
# DNS interface — dispatched by mw_dns_record_update
|
|
export def dns_record_update [record_id: string, rec: record]: nothing -> record {
|
|
cf_record_update $rec.zone $record_id $rec
|
|
}
|
|
|
|
# DNS interface — dispatched by mw_dns_record_delete
|
|
export def dns_record_delete [record_id: string, zone: string]: nothing -> nothing {
|
|
cf_record_delete $zone $record_id
|
|
}
|
|
|
|
# DNS interface — dispatched by mw_dns_record_upsert
|
|
export def dns_record_upsert [rec: record]: nothing -> record {
|
|
cf_record_upsert $rec.zone $rec
|
|
}
|
|
|
|
# Registrar interface — Cloudflare Registrar API (requires CF_ACCOUNT_ID)
|
|
export def registrar_list_domains [filter: record]: nothing -> list<record> {
|
|
cf_registrar_list_domains $filter
|
|
}
|
|
|
|
export def registrar_domain_info [domain: string]: nothing -> record {
|
|
cf_registrar_domain_info $domain
|
|
}
|
|
|
|
export def registrar_get_nameservers [domain: string]: nothing -> list<string> {
|
|
cf_registrar_get_nameservers $domain
|
|
}
|
|
|
|
# Cloudflare-registered domains use Cloudflare nameservers; delegation is via zone NS settings.
|
|
export def registrar_set_nameservers [domain: string, ns: list<string>] {
|
|
error make --unspanned {
|
|
msg: $"Cloudflare Registrar: nameserver delegation for ($domain) must be changed via zone settings or by transferring the domain"
|
|
}
|
|
}
|
|
|
|
# Stub compute functions (not implemented — Cloudflare is DNS-only)
|
|
export def query_servers [find?: string, cols?: string]: nothing -> list { [] }
|
|
export def server_info [server: string, check: bool, find?: string, cols?: string]: nothing -> record { {} }
|
|
export def server_exists [server: string, error_exit: bool]: nothing -> bool { false }
|
|
export def server_is_running [server: string, error_exit: bool]: nothing -> bool { false }
|
|
export def check_server_requirements [settings: record, server: record, check: bool]: nothing -> bool { false }
|
|
export def delete_server [settings: record, server: record, keep_storage: bool, error_exit: bool]: nothing -> bool { false }
|
|
export def get_ip [settings: record, server: string, ip_type: string, error_exit: bool]: nothing -> string { "" }
|