provisioning-catalog/providers/cloudflare/provider.nu

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 { "" }