Docs / SDK / Go / DNS
Go — módulo DNS
Paquete github.com/webability/webability-go/dns. Envuelve la API de DNS (/v1/dns/*): zonas y registros.
Importar y crear el objeto
import (
"github.com/webability/webability-go/wa"
"github.com/webability/webability-go/dns"
)
api := wa.New("tu-client-id", "tu-token-secreto")
d := dns.New(api)
ListZones()
GET /v1/dns/zone — lista las zonas (dominios) del cliente.
zones, err := d.ListZones()
if err != nil {
log.Fatal(err)
}
for _, z := range zones.Zones {
fmt.Println(z.Key, z.Name, z.PrimaryNS)
}
fmt.Println("total:", zones.Count)
Devuelve *dns.ListZonesResult{Status, Zones []dns.Zone, Count int}.
GetZone(keyOrDomain string)
GET /v1/dns/zone/{key|domain} — detalle de una zona y sus registros. Acepta la clave numérica o el nombre de dominio.
zone, err := d.GetZone("midominio.com") // o d.GetZone("42")
if err != nil {
log.Fatal(err)
}
fmt.Println(zone.Zone.Name, zone.Zone.Status)
for _, r := range zone.Records {
fmt.Println(r.Name, r.RRTypeName, r.Data)
}
fmt.Println("nameservers:", zone.NS)
Devuelve *dns.GetZoneResult{Status, Zone dns.Zone, Records []dns.Record, NS []string}.
AddZone(name string)
POST /v1/dns/zone — crea una nueva zona (dominio). Los NS de la cuenta se agregan automáticamente.
added, err := d.AddZone("midominio.com")
if err != nil {
log.Fatal(err)
}
fmt.Println("zona creada:", added.Key, added.Name)
Devuelve *dns.AddZoneResult{Status, Key int, Name string}.
AddRecord(zoneKey int, rec dns.RecordInput)
POST /v1/dns/zone/{key}/record — agrega un registro a una zona.
rec, err := d.AddRecord(added.Key, dns.RecordInput{
Name: "@",
RRType: "A",
TTL: 1800,
Data: "203.0.113.10",
})
if err != nil {
log.Fatal(err)
}
fmt.Println("registro creado:", rec.Key, "en zona", rec.Zone)
RecordInput también acepta Priority, Weight, Port y Tag (para MX, SRV, CAA, etc.).
UpdateRecord(recordKey int, fields dns.RecordUpdate)
PUT /v1/dns/record/{key} — modifica un registro existente. RecordUpdate usa punteros: solo los campos no nulos se envían y se actualizan.
newTTL := 3600
newData := "203.0.113.20"
err := d.UpdateRecord(rec.Key, dns.RecordUpdate{
TTL: &newTTL,
Data: &newData,
})
if err != nil {
log.Fatal(err)
}
DeleteRecord(recordKey int)
DELETE /v1/dns/record/{key} — elimina un registro.
if err := d.DeleteRecord(rec.Key); err != nil {
log.Fatal(err)
}
DeleteZone(zoneKey int)
DELETE /v1/dns/zone/{key} — elimina una zona y todos sus registros.
if err := d.DeleteZone(added.Key); err != nil {
log.Fatal(err)
}
Referencia completa de la API HTTP (headers, códigos de error, formato de respuesta): /documentacion/dns.