76 lines
1.9 KiB
Go
76 lines
1.9 KiB
Go
package dns
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"gopkg.in/ns1/ns1-go.v2/rest/model/data"
|
|
"gopkg.in/ns1/ns1-go.v2/rest/model/filter"
|
|
)
|
|
|
|
// Record wraps an NS1 /zone/{zone}/{domain}/{type} resource
|
|
type Record struct {
|
|
Meta *data.Meta `json:"meta,omitempty"`
|
|
|
|
ID string `json:"id,omitempty"`
|
|
Zone string `json:"zone"`
|
|
Domain string `json:"domain"`
|
|
Type string `json:"type"`
|
|
Link string `json:"link,omitempty"`
|
|
TTL int `json:"ttl,omitempty"`
|
|
UseClientSubnet *bool `json:"use_client_subnet,omitempty"`
|
|
|
|
// Answers must all be of the same type as the record.
|
|
Answers []*Answer `json:"answers"`
|
|
// The records' filter chain.
|
|
Filters []*filter.Filter `json:"filters,omitempty"`
|
|
// The records' regions.
|
|
Regions data.Regions `json:"regions,omitempty"`
|
|
}
|
|
|
|
func (r Record) String() string {
|
|
return fmt.Sprintf("%s %s", r.Domain, r.Type)
|
|
}
|
|
|
|
// NewRecord takes a zone, domain and record type t and creates a *Record with
|
|
// UseClientSubnet: true & empty Answers.
|
|
func NewRecord(zone string, domain string, t string) *Record {
|
|
if !strings.HasSuffix(domain, zone) {
|
|
domain = fmt.Sprintf("%s.%s", domain, zone)
|
|
}
|
|
return &Record{
|
|
Meta: &data.Meta{},
|
|
Zone: zone,
|
|
Domain: domain,
|
|
Type: t,
|
|
Answers: []*Answer{},
|
|
Regions: data.Regions{},
|
|
}
|
|
}
|
|
|
|
// LinkTo sets a Record Link to an FQDN.
|
|
// to is the FQDN of the target record whose config should be used. Does
|
|
// not have to be in the same zone.
|
|
func (r *Record) LinkTo(to string) {
|
|
r.Meta = nil
|
|
r.Answers = []*Answer{}
|
|
r.Link = to
|
|
}
|
|
|
|
// AddAnswer adds an answer to the record.
|
|
func (r *Record) AddAnswer(ans *Answer) {
|
|
if r.Answers == nil {
|
|
r.Answers = []*Answer{}
|
|
}
|
|
|
|
r.Answers = append(r.Answers, ans)
|
|
}
|
|
|
|
// AddFilter adds a filter to the records' filter chain(ordering of filters matters).
|
|
func (r *Record) AddFilter(fil *filter.Filter) {
|
|
if r.Filters == nil {
|
|
r.Filters = []*filter.Filter{}
|
|
}
|
|
|
|
r.Filters = append(r.Filters, fil)
|
|
}
|