traefik/vendor/github.com/exoscale/egoscale/dns.go
2017-10-31 10:42:03 +01:00

153 lines
3.3 KiB
Go

package egoscale
import (
"encoding/json"
"net/http"
"strconv"
)
func (exo *Client) CreateDomain(name string) (*DNSDomain, error) {
var hdr = make(http.Header)
var domain DNSDomainCreateRequest
hdr.Add("X-DNS-TOKEN", exo.apiKey+":"+exo.apiSecret)
domain.Domain.Name = name
m, err := json.Marshal(domain)
if err != nil {
return nil, err
}
resp, err := exo.DetailedRequest("/v1/domains", string(m), "POST", hdr)
if err != nil {
return nil, err
}
var d *DNSDomain
if err := json.Unmarshal(resp, &d); err != nil {
return nil, err
}
return d, nil
}
func (exo *Client) GetDomain(name string) (*DNSDomain, error) {
var hdr = make(http.Header)
hdr.Add("X-DNS-TOKEN", exo.apiKey+":"+exo.apiSecret)
hdr.Add("Accept", "application/json")
resp, err := exo.DetailedRequest("/v1/domains/"+name, "", "GET", hdr)
if err != nil {
return nil, err
}
var d *DNSDomain
if err := json.Unmarshal(resp, &d); err != nil {
return nil, err
}
return d, nil
}
func (exo *Client) DeleteDomain(name string) error {
var hdr = make(http.Header)
hdr.Add("X-DNS-TOKEN", exo.apiKey+":"+exo.apiSecret)
hdr.Add("Accept", "application/json")
_, err := exo.DetailedRequest("/v1/domains/"+name, "", "DELETE", hdr)
if err != nil {
return err
}
return nil
}
func (exo *Client) GetRecords(name string) ([]*DNSRecordResponse, error) {
var hdr = make(http.Header)
hdr.Add("X-DNS-TOKEN", exo.apiKey+":"+exo.apiSecret)
hdr.Add("Accept", "application/json")
resp, err := exo.DetailedRequest("/v1/domains/"+name+"/records", "", "GET", hdr)
if err != nil {
return nil, err
}
var r []*DNSRecordResponse
if err = json.Unmarshal(resp, &r); err != nil {
return nil, err
}
return r, nil
}
func (exo *Client) CreateRecord(name string, rec DNSRecord) (*DNSRecordResponse, error) {
var hdr = make(http.Header)
hdr.Add("X-DNS-TOKEN", exo.apiKey+":"+exo.apiSecret)
hdr.Add("Accept", "application/json")
hdr.Add("Content-Type", "application/json")
var rr DNSRecordResponse
rr.Record = rec
body, err := json.Marshal(rr)
if err != nil {
return nil, err
}
resp, err := exo.DetailedRequest("/v1/domains/"+name+"/records", string(body), "POST", hdr)
if err != nil {
return nil, err
}
var r *DNSRecordResponse
if err = json.Unmarshal(resp, &r); err != nil {
return nil, err
}
return r, nil
}
func (exo *Client) UpdateRecord(name string, rec DNSRecord) (*DNSRecordResponse, error) {
var hdr = make(http.Header)
id := strconv.FormatInt(rec.Id, 10)
hdr.Add("X-DNS-TOKEN", exo.apiKey+":"+exo.apiSecret)
hdr.Add("Accept", "application/json")
hdr.Add("Content-Type", "application/json")
var rr DNSRecordResponse
rr.Record = rec
body, err := json.Marshal(rr)
if err != nil {
return nil, err
}
resp, err := exo.DetailedRequest("/v1/domains/"+name+"/records/"+id,
string(body), "PUT", hdr)
if err != nil {
return nil, err
}
var r *DNSRecordResponse
if err = json.Unmarshal(resp, &r); err != nil {
return nil, err
}
return r, nil
}
func (exo *Client) DeleteRecord(name string, rec DNSRecord) error {
var hdr = make(http.Header)
id := strconv.FormatInt(rec.Id, 10)
hdr.Add("X-DNS-TOKEN", exo.apiKey+":"+exo.apiSecret)
hdr.Add("Accept", "application/json")
hdr.Add("Content-Type", "application/json")
_, err := exo.DetailedRequest("/v1/domains/"+name+"/records/"+id,
"", "DELETE", hdr)
if err != nil {
return err
}
return nil
}