70 lines
1.6 KiB
Go
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
|
||
|
}
|