-
Notifications
You must be signed in to change notification settings - Fork 12
/
dns_zone.go
129 lines (117 loc) · 3.27 KB
/
dns_zone.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
package gobizfly
import (
"context"
"encoding/json"
"net/http"
)
// Meta - Metadata of list zone response
type Meta struct {
MaxResults int `json:"max_results"`
Total int `json:"total"`
Page int `json:"page"`
}
// RecordSet - contains the information of a record set
type RecordSet struct {
ID string `json:"id"`
Name string `json:"name"`
Type string `json:"type"`
TTL string `json:"ttl"`
}
// Zone - contains the information of a zone
type Zone struct {
ID string `json:"id"`
Name string `json:"name"`
Deleted int `json:"deleted"`
CreatedAt string `json:"created_at"`
UpdatedAt string `json:"updated_at"`
TenantID string `json:"tenant_id"`
NameServer []string `json:"nameserver"`
TTL int `json:"ttl"`
Active bool `json:"active"`
}
// WrappedZonePayload - wrapped struct for creating zone payload
type WrappedZonePayload struct {
Zones *CreateZonePayload `json:"zones"`
}
// ExtendedZone - contains the information of a zone and embedded record sets
type ExtendedZone struct {
Zone
RecordsSet []Record `json:"record_set"`
}
// ListZoneResp - contains the response of list zones and metadata
type ListZoneResp struct {
Zones []Zone `json:"zones"`
Meta Meta `json:"_meta"`
}
// CreateZonePayload - the payload of creating a zone request
type CreateZonePayload struct {
Name string `json:"name"`
Required bool `json:"required,omitempty"`
Description string `json:"description,omitempty"`
}
// ListZones - List DNS zones
func (d *dnsService) ListZones(ctx context.Context, opts *ListOptions) (*ListZoneResp, error) {
req, err := d.client.NewRequest(ctx, http.MethodGet, dnsName, d.resourcePath(), nil)
if err != nil {
return nil, err
}
resp, err := d.client.Do(ctx, req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var data *ListZoneResp
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return nil, err
}
return data, nil
}
// CreateZone - Create a DNS zone
func (d *dnsService) CreateZone(ctx context.Context, czpl *CreateZonePayload) (*ExtendedZone, error) {
payload := WrappedZonePayload{
Zones: czpl,
}
req, err := d.client.NewRequest(ctx, http.MethodPost, dnsName, d.resourcePath(), payload)
if err != nil {
return nil, err
}
resp, err := d.client.Do(ctx, req)
if err != nil {
return nil, err
}
defer resp.Body.Close()
var data *ExtendedZone
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return nil, err
}
return data, nil
}
// GetZone - Get a DNS zone
func (d *dnsService) GetZone(ctx context.Context, zoneID string) (*ExtendedZone, error) {
req, err := d.client.NewRequest(ctx, http.MethodGet, dnsName, d.zoneItemPath(zoneID), nil)
if err != nil {
return nil, err
}
resp, err := d.client.Do(ctx, req)
var data *ExtendedZone
if err != nil {
return nil, err
}
defer resp.Body.Close()
if err := json.NewDecoder(resp.Body).Decode(&data); err != nil {
return nil, err
}
return data, nil
}
// DeleteZone - Delete a DNS zone
func (d *dnsService) DeleteZone(ctx context.Context, zoneID string) error {
req, err := d.client.NewRequest(ctx, http.MethodDelete, dnsName, d.zoneItemPath(zoneID), nil)
if err != nil {
return err
}
resp, err := d.client.Do(ctx, req)
if err != nil {
return err
}
return resp.Body.Close()
}