traefik/vendor/github.com/timewasted/linode/dns/dns.go
2017-03-09 13:13:02 +01:00

70 lines
1.6 KiB
Go

package dns
import (
"strconv"
"github.com/timewasted/linode"
)
type (
// DNS represents the interface to the DNS portion of Linode's API.
DNS struct {
linode *linode.Linode
}
)
// New returns a pointer to a new DNS object.
func New(apiKey string) *DNS {
return &DNS{
linode: linode.New(apiKey),
}
}
// FromLinode returns a pointer to a new DNS object, using the provided Linode
// instance as backing.
func FromLinode(l *linode.Linode) *DNS {
return &DNS{
linode: l,
}
}
// ToLinode returns a pointer to the internal Linode object.
func (d *DNS) ToLinode() *linode.Linode {
return d.linode
}
// GetDomains executes the "domain.list" API call. When domainID is nil, this
// will return a list of domains. Otherwise, it will return only the domain
// specified by domainID.
func (d *DNS) GetDomains(domainId interface{}) ([]*Domain, error) {
params := linode.Parameters{}
if domainId != nil {
id, ok := domainId.(int)
if ok {
params.Set("DomainID", strconv.Itoa(id))
}
}
var list []*Domain
_, err := d.linode.Request("domain.list", params, &list)
if err != nil {
return nil, err
}
return list, nil
}
// GetDomainResources executes the "domain.resource.list" API call. This will
// return a list of domain resources associated with the specified domainID.
func (d *DNS) GetDomainResources(domainID int) ([]*Resource, error) {
params := linode.Parameters{
"DomainID": strconv.Itoa(domainID),
}
var list []*Resource
_, err := d.linode.Request("domain.resource.list", params, &list)
if err != nil {
return nil, err
}
return list, nil
}