1.7 KB
dns.go
package digitalocean
import (
"fmt"
"strings"
"github.com/digitalocean/godo"
"github.com/readysite/readysite/pkg/platform"
)
// CreateDNSZone creates a DNS domain
func (b *backend) CreateDNSZone(domain string) (*platform.DNSZone, error) {
createReq := &godo.DomainCreateRequest{
Name: domain,
}
d, _, err := b.client.Domains.Create(b.ctx, createReq)
if err != nil {
return nil, fmt.Errorf("create domain: %w", err)
}
return &platform.DNSZone{
Name: d.Name,
TTL: d.TTL,
}, nil
}
// GetDNSZone retrieves a DNS domain
func (b *backend) GetDNSZone(domain string) (*platform.DNSZone, error) {
d, _, err := b.client.Domains.Get(b.ctx, domain)
if err != nil {
if strings.Contains(err.Error(), "not found") {
return nil, platform.ErrNotFound
}
return nil, fmt.Errorf("get domain: %w", err)
}
return &platform.DNSZone{
Name: d.Name,
TTL: d.TTL,
}, nil
}
// AddDNSRecord adds a DNS record
func (b *backend) AddDNSRecord(zone string, record platform.DNSRecord) error {
createReq := &godo.DomainRecordEditRequest{
Type: record.Type,
Name: record.Name,
Data: record.Value,
TTL: record.TTL,
Priority: record.Priority,
}
_, _, err := b.client.Domains.CreateRecord(b.ctx, zone, createReq)
if err != nil {
return fmt.Errorf("create record: %w", err)
}
return nil
}
// DeleteDNSRecord removes a DNS record
func (b *backend) DeleteDNSRecord(zone, recordID string) error {
var id int
if _, err := fmt.Sscanf(recordID, "%d", &id); err != nil {
return fmt.Errorf("invalid record ID %q: %w", recordID, err)
}
_, err := b.client.Domains.DeleteRecord(b.ctx, zone, id)
if err != nil {
return fmt.Errorf("delete record: %w", err)
}
return nil
}