Skip to content

Commit 072a64b

Browse files
Finalize Module Code for Terraform Provider (#2) #minor
* Fix Zone Methods Signed-off-by: Mustafa Kara <mkara@opsheaven.space> * Fix Zone Methods Signed-off-by: Mustafa Kara <mkara@opsheaven.space> * Add get all zones function Signed-off-by: Mustafa Kara <mkara@opsheaven.space> * Create method for GetRecord Signed-off-by: Mustafa Kara <mkara@opsheaven.space> * Fix all dns client methods Signed-off-by: Mustafa Kara <mkara@opsheaven.space> * Finalize Api Signed-off-by: Mustafa Kara <mkara@opsheaven.space> --------- Signed-off-by: Mustafa Kara <mkara@opsheaven.space>
1 parent 56e8f94 commit 072a64b

File tree

13 files changed

+488
-643
lines changed

13 files changed

+488
-643
lines changed

client.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,12 @@ func (r *request) setQueryParams(params map[string]string) *request {
7272
r.request.SetQueryParams(params)
7373
return r
7474
}
75+
7576
func (r *request) setBody(body interface{}) *request {
7677
r.request.SetBody(body)
7778
return r
7879
}
80+
7981
func (r *request) setResult(result interface{}) *request {
8082
r.result = result
8183
return r

doc.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
// Package gohetzner implements Hetzner Public DNS Api client for
2+
// managing zones and records.
3+
package gohetznerdns

gohetznerdns.go

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,59 @@
11
package gohetznerdns
22

3-
type HetznerDNS struct {
3+
// Hetzner DNS Public API interface entry interface
4+
// Exposes DNS and Record service to manage DNS Zone and records.
5+
// See api documentation for more information [https://dns.hetzner.com/api-docs]
6+
type HetznerDNS interface {
7+
8+
// Configures API Base URL
9+
SetBaseURL(baseUrl string) error
10+
11+
// Configures API Token
12+
SetToken(token string) error
13+
14+
// Returns Zone Service
15+
GetZoneService() ZoneService
16+
17+
// Returns Record Service
18+
GetRecordService() RecordService
19+
}
20+
21+
type hetznerDNS struct {
422
client *client
523
ZoneService ZoneService
624
RecordService RecordService
725
}
826

9-
func NewClient(token string) (*HetznerDNS, error) {
27+
var _ HetznerDNS = &hetznerDNS{}
28+
29+
// Creates new Hetzner DNS Public API Client with the given token
30+
// see [HetznerDNS.setToken] to update token after creation
31+
func NewClient(token string) (HetznerDNS, error) {
1032
cli := newClient()
11-
dns := &HetznerDNS{
33+
dns := &hetznerDNS{
1234
client: cli,
1335
ZoneService: &zoneService{client: cli},
1436
RecordService: &recordService{client: cli},
1537
}
1638
return dns, dns.SetToken(token)
1739
}
1840

19-
func (dns *HetznerDNS) SetBaseURL(baseUrl string) error {
41+
func (dns *hetznerDNS) SetBaseURL(baseUrl string) error {
2042
return dns.client.setBaseURL(baseUrl)
2143
}
2244

23-
func (dns *HetznerDNS) SetToken(token string) error {
24-
if err := validateNotEmpty("token", token); err != nil {
45+
func (dns *hetznerDNS) SetToken(token string) error {
46+
if err := validateNotEmpty("token", &token); err != nil {
2547
return err
2648
}
2749
dns.client.setToken(token)
2850
return nil
2951
}
52+
53+
func (dns *hetznerDNS) GetZoneService() ZoneService {
54+
return dns.ZoneService
55+
}
56+
57+
func (dns *hetznerDNS) GetRecordService() RecordService {
58+
return dns.RecordService
59+
}

gohetznerdns_test.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,13 @@ import (
99
func TestNewClient(t *testing.T) {
1010
dns, _ := NewClient("asdadasdasd")
1111
assert.Assert(t, dns != nil)
12-
assert.Assert(t, dns.client != nil)
13-
assert.Assert(t, dns.ZoneService != nil)
14-
assert.Assert(t, dns.RecordService != nil)
12+
assert.Assert(t, dns.GetZoneService() != nil)
13+
assert.Assert(t, dns.GetRecordService() != nil)
1514
}
1615

1716
func TestNewClientTokenError(t *testing.T) {
1817
_, err := NewClient(" ")
19-
assert.Error(t, err, "token is invalid because cannot be empty")
18+
assert.Error(t, err, "901 : token is empty")
2019
}
2120

2221
func TestSetBaseUrl(t *testing.T) {

record.go

Lines changed: 29 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,30 @@
11
package gohetznerdns
22

3-
const recordsBasePath = "/records"
3+
// Client interfaces for the Hetzner DNS Public API Records endpoint
4+
// See api documentation for more information [https://dns.hetzner.com/api-docs#tag/Records]
5+
type RecordService interface {
46

5-
type Record struct {
6-
Type string `json:"type"`
7-
Id string `json:"id"`
8-
ZoneId string `json:"zone_id"`
9-
Name string `json:"name"`
10-
Value string `json:"value"`
11-
TTL int `json:"ttl"`
12-
}
13-
type record struct {
14-
Record *Record `json:"record"`
15-
}
16-
type Records struct {
17-
Records []*Record `json:"records"`
18-
ValidRecords []*Record `json:"valid_records"`
19-
InvalidRecords []*Record `json:"invalid_records"`
20-
}
7+
// Returns all records associated with user. [https://dns.hetzner.com/api-docs#operation/GetRecords]
8+
GetAllRecords(zone_id *string) ([]*Record, error)
219

22-
type RecordService interface {
23-
GetAllRecords(zone_id string) ([]*Record, error)
24-
GetRecord(record_id string) (*Record, error)
25-
CreateRecord(request Record) (*Record, error)
26-
UpdateRecord(record_id string, request Record) (*Record, error)
27-
DeleteRecord(record_id string) error
28-
CreateRecords(request Records) (*Records, error)
29-
UpdateRecords(request Records) (*Records, error)
10+
//Returns information about a single record. [https://dns.hetzner.com/api-docs#operation/GetRecord]
11+
GetRecord(record_id *string) (*Record, error)
12+
13+
//Creates a new record. [https://dns.hetzner.com/api-docs#operation/CreateRecord]
14+
CreateRecord(request *Record) (*Record, error)
15+
16+
//Updates a record. [https://dns.hetzner.com/api-docs#operation/UpdateRecord]
17+
UpdateRecord(request *Record) (*Record, error)
18+
19+
//Deletes a record. [https://dns.hetzner.com/api-docs#operation/DeleteRecord]
20+
DeleteRecord(record_id *string) error
3021
}
3122

3223
type recordService struct {
3324
client *client
3425
}
3526

36-
// GetAllRecords implements RecordsService.
37-
func (service *recordService) GetAllRecords(zone_id string) ([]*Record, error) {
27+
func (service *recordService) GetAllRecords(zone_id *string) ([]*Record, error) {
3828
if err := validateNotEmpty("zone_id", zone_id); err != nil {
3929
return nil, err
4030
}
@@ -43,7 +33,7 @@ func (service *recordService) GetAllRecords(zone_id string) ([]*Record, error) {
4333
createJsonRequest(200).
4434
setQueryParams(
4535
map[string]string{
46-
"zone_id": zone_id,
36+
"zone_id": *zone_id,
4737
}).
4838
setResult(records).
4939
execute("GET", recordsBasePath)
@@ -52,26 +42,23 @@ func (service *recordService) GetAllRecords(zone_id string) ([]*Record, error) {
5242
}
5343
return records.Records, nil
5444
}
55-
56-
// GetRecord implements RecordsService.
57-
func (service *recordService) GetRecord(record_id string) (*Record, error) {
45+
func (service *recordService) GetRecord(record_id *string) (*Record, error) {
5846
if err := validateNotEmpty("record_id", record_id); err != nil {
5947
return nil, err
6048
}
61-
record := new(record)
49+
record := new(RecordResponse)
6250
_, err := service.client.
6351
createJsonRequest(200).
6452
setResult(record).
65-
execute("GET", recordsBasePath+"/"+record_id)
53+
execute("GET", recordsBasePath+"/"+*record_id)
6654
if err != nil {
6755
return nil, err
6856
}
6957
return record.Record, nil
7058
}
7159

72-
// CreateRecord implements RecordsService.
73-
func (service *recordService) CreateRecord(request Record) (*Record, error) {
74-
record := new(record)
60+
func (service *recordService) CreateRecord(request *Record) (*Record, error) {
61+
record := new(RecordResponse)
7562
_, err := service.client.
7663
createJsonRequest(200).
7764
setResult(record).
@@ -83,58 +70,29 @@ func (service *recordService) CreateRecord(request Record) (*Record, error) {
8370
return record.Record, nil
8471
}
8572

86-
// UpdateRecord implements RecordsService.
87-
func (service *recordService) UpdateRecord(record_id string, request Record) (*Record, error) {
88-
if err := validateNotEmpty("record_id", record_id); err != nil {
73+
func (service *recordService) UpdateRecord(request *Record) (*Record, error) {
74+
if err := validateNotEmpty("record_id", request.Id); err != nil {
8975
return nil, err
9076
}
91-
record := new(record)
77+
record := new(RecordResponse)
9278
_, err := service.client.
9379
createJsonRequest(200).
9480
setResult(record).
9581
setBody(request).
96-
execute("PUT", recordsBasePath+"/"+record_id)
82+
execute("PUT", recordsBasePath+"/"+*request.Id)
9783
if err != nil {
9884
return nil, err
9985
}
10086
return record.Record, nil
10187
}
10288

103-
// GetRecord implements RecordsService.
104-
func (service *recordService) DeleteRecord(record_id string) error {
89+
func (service *recordService) DeleteRecord(record_id *string) error {
10590
if err := validateNotEmpty("record_id", record_id); err != nil {
10691
return err
10792
}
10893
_, err := service.client.
10994
createTextRequest(200, 404).
110-
execute("DELETE", recordsBasePath+"/"+record_id)
95+
execute("DELETE", recordsBasePath+"/"+*record_id)
11196

11297
return err
11398
}
114-
115-
// BulkCreateRecords implements RecordsService.
116-
func (service *recordService) CreateRecords(request Records) (*Records, error) {
117-
response := new(Records)
118-
_, err := service.client.
119-
createJsonRequest(200).
120-
setResult(response).
121-
setBody(request).
122-
execute("POST", recordsBasePath+"/bulk")
123-
if err != nil {
124-
return nil, err
125-
}
126-
return response, nil
127-
}
128-
129-
func (service *recordService) UpdateRecords(request Records) (*Records, error) {
130-
response := new(Records)
131-
_, err := service.client.
132-
createJsonRequest(200).
133-
setResult(response).
134-
setBody(request).
135-
execute("PUT", recordsBasePath+"/bulk")
136-
if err != nil {
137-
return nil, err
138-
}
139-
return response, nil
140-
}

0 commit comments

Comments
 (0)