-
Notifications
You must be signed in to change notification settings - Fork 70
/
Copy pathdns.go
222 lines (196 loc) · 9.38 KB
/
dns.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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
// Package dns provides access to the Akamai DNS V2 APIs
//
// See: https://techdocs.akamai.com/edge-dns/reference/edge-dns-api
package dns
import (
"context"
"errors"
"net/http"
"github.com/akamai/AkamaiOPEN-edgegrid-golang/v10/pkg/session"
)
var (
// ErrStructValidation is returned when given struct validation failed.
ErrStructValidation = errors.New("struct validation")
)
type (
// DNS is the dns api interface
DNS interface {
// Authorities
// GetAuthorities provides a list of structured read-only list of name servers.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-data-authorities
GetAuthorities(context.Context, GetAuthoritiesRequest) (*GetAuthoritiesResponse, error)
// GetNameServerRecordList provides a list of name server records.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-data-authorities
GetNameServerRecordList(context.Context, GetNameServerRecordListRequest) ([]string, error)
// ListGroups returns group list associated with particular user
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-data-groups
ListGroups(context.Context, ListGroupRequest) (*ListGroupResponse, error)
// Data
// GetRdata retrieves record rdata, e.g. target.
GetRdata(ctx context.Context, params GetRdataRequest) ([]string, error)
// ProcessRdata process rdata.
ProcessRdata(context.Context, []string, string) []string
// ParseRData parses rdata. returning map.
ParseRData(context.Context, string, []string) map[string]interface{}
// Recordsets
// GetRecordSets retrieves record sets with Query Args. No formatting of arg values.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-zone-recordsets
GetRecordSets(context.Context, GetRecordSetsRequest) (*GetRecordSetsResponse, error)
// CreateRecordSets creates multiple record sets.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-zones-zone-recordsets
CreateRecordSets(context.Context, CreateRecordSetsRequest) error
// UpdateRecordSets replaces list of record sets.
//
// See: https://techdocs.akamai.com/edge-dns/reference/put-zones-zone-recordsets
UpdateRecordSets(context.Context, UpdateRecordSetsRequest) error
// GetRecordList retrieves recordset list based on type.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-zone-recordsets
GetRecordList(context.Context, GetRecordListRequest) (*GetRecordListResponse, error)
// Records
// GetRecord retrieves a recordset and returns as RecordBody.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zone-name-type
GetRecord(context.Context, GetRecordRequest) (*GetRecordResponse, error)
// CreateRecord creates recordset.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-zones-zone-names-name-types-type
CreateRecord(context.Context, CreateRecordRequest) error
// DeleteRecord removes recordset.
//
// See: https://techdocs.akamai.com/edge-dns/reference/delete-zone-name-type
DeleteRecord(context.Context, DeleteRecordRequest) error
// UpdateRecord replaces the recordset.
//
// See: https://techdocs.akamai.com/edge-dns/reference/put-zones-zone-names-name-types-type
UpdateRecord(context.Context, UpdateRecordRequest) error
// TSIGKeys
// ListTSIGKeys lists the TSIG keys used by zones that you are allowed to manage.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-keys
ListTSIGKeys(context.Context, ListTSIGKeysRequest) (*ListTSIGKeysResponse, error)
// GetTSIGKeyZones retrieves DNS Zones using TSIG key.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-keys-used-by
GetTSIGKeyZones(context.Context, GetTSIGKeyZonesRequest) (*GetTSIGKeyZonesResponse, error)
// GetTSIGKeyAliases retrieves a DNS Zone's aliases.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-zone-key-used-by
GetTSIGKeyAliases(context.Context, GetTSIGKeyAliasesRequest) (*GetTSIGKeyAliasesResponse, error)
// UpdateTSIGKeyBulk updates Bulk Zones TSIG key.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-keys-bulk-update
UpdateTSIGKeyBulk(context.Context, UpdateTSIGKeyBulkRequest) error
// GetTSIGKey retrieves a TSIG key for zone.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-zone-key
GetTSIGKey(context.Context, GetTSIGKeyRequest) (*GetTSIGKeyResponse, error)
// DeleteTSIGKey deletes TSIG key for zone.
//
// See: https://techdocs.akamai.com/edge-dns/reference/delete-zones-zone-key
DeleteTSIGKey(context.Context, DeleteTSIGKeyRequest) error
// UpdateTSIGKey updates TSIG key for zone.
//
// See: https://techdocs.akamai.com/edge-dns/reference/put-zones-zone-key
UpdateTSIGKey(context.Context, UpdateTSIGKeyRequest) error
// Zones
// ListZones retrieves a list of all zones user can access.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones
ListZones(context.Context, ListZonesRequest) (*ZoneListResponse, error)
// GetZone retrieves Zone metadata.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zone
GetZone(context.Context, GetZoneRequest) (*GetZoneResponse, error)
//GetChangeList retrieves Zone changelist.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-changelists-zone
GetChangeList(context.Context, GetChangeListRequest) (*GetChangeListResponse, error)
// GetMasterZoneFile retrieves master zone file.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-zone-zone-file
GetMasterZoneFile(context.Context, GetMasterZoneFileRequest) (string, error)
// PostMasterZoneFile updates master zone file.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-zones-zone-zone-file
PostMasterZoneFile(context.Context, PostMasterZoneFileRequest) error
// CreateZone creates new zone.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-zone
CreateZone(context.Context, CreateZoneRequest) error
// SaveChangeList creates a new Change List based on the most recent version of a zone.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-changelists
SaveChangeList(context.Context, SaveChangeListRequest) error
// SubmitChangeList submits changelist for the Zone to create default NS SOA records.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-changelists-zone-submit
SubmitChangeList(context.Context, SubmitChangeListRequest) error
// UpdateZone updates zone.
//
// See: https://techdocs.akamai.com/edge-dns/reference/put-zone
UpdateZone(context.Context, UpdateZoneRequest) error
// GetZoneNames retrieves a list of a zone's record names.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zone-names
GetZoneNames(context.Context, GetZoneNamesRequest) (*GetZoneNamesResponse, error)
// GetZoneNameTypes retrieves a zone name's record types.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zone-name-types
GetZoneNameTypes(context.Context, GetZoneNameTypesRequest) (*GetZoneNameTypesResponse, error)
// CreateBulkZones submits create bulk zone request.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-zones-create-requests
CreateBulkZones(context.Context, CreateBulkZonesRequest) (*CreateBulkZonesResponse, error)
// DeleteBulkZones submits delete bulk zone request.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-zones-delete-requests
DeleteBulkZones(context.Context, DeleteBulkZonesRequest) (*DeleteBulkZonesResponse, error)
// GetBulkZoneCreateStatus retrieves submit request status.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-create-requests-requestid
GetBulkZoneCreateStatus(context.Context, GetBulkZoneCreateStatusRequest) (*GetBulkZoneCreateStatusResponse, error)
//GetBulkZoneDeleteStatus retrieves submit request status.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-delete-requests-requestid
GetBulkZoneDeleteStatus(context.Context, GetBulkZoneDeleteStatusRequest) (*GetBulkZoneDeleteStatusResponse, error)
// GetBulkZoneCreateResult retrieves create request result.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-create-requests-requestid-result
GetBulkZoneCreateResult(ctx context.Context, request GetBulkZoneCreateResultRequest) (*GetBulkZoneCreateResultResponse, error)
// GetBulkZoneDeleteResult retrieves delete request result.
//
// See: https://techdocs.akamai.com/edge-dns/reference/get-zones-delete-requests-requestid-result
GetBulkZoneDeleteResult(context.Context, GetBulkZoneDeleteResultRequest) (*GetBulkZoneDeleteResultResponse, error)
// GetZonesDNSSecStatus returns the current DNSSEC status for one or more zones.
//
// See: https://techdocs.akamai.com/edge-dns/reference/post-zones-dns-sec-status
GetZonesDNSSecStatus(context.Context, GetZonesDNSSecStatusRequest) (*GetZonesDNSSecStatusResponse, error)
}
dns struct {
session.Session
}
// Option defines a DNS option
Option func(*dns)
// ClientFunc is a dns client new method, this can used for mocking
ClientFunc func(sess session.Session, opts ...Option) DNS
)
// Client returns a new dns Client instance with the specified controller
func Client(sess session.Session, opts ...Option) DNS {
d := &dns{
Session: sess,
}
for _, opt := range opts {
opt(d)
}
return d
}
// Exec overrides the session.Exec to add dns options
func (d *dns) Exec(r *http.Request, out interface{}, in ...interface{}) (*http.Response, error) {
return d.Session.Exec(r, out, in...)
}