Skip to content

Commit 3ef9472

Browse files
Merge pull request #46 from inwx/dev
feat: enhance nameserver resource import, add update support - Fixes Issue #37
2 parents 2334ab0 + 6baa60c commit 3ef9472

File tree

6 files changed

+306
-148
lines changed

6 files changed

+306
-148
lines changed

.github/workflows/release.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,5 @@ jobs:
2929
version: '~> v1'
3030
args: release --clean
3131
env:
32-
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
32+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
3333
GPG_FINGERPRINT: ${{ steps.import_gpg.outputs.fingerprint }}

inwx/internal/resource/resource_automated_dnssec.go

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package resource
33
import (
44
"context"
55
"fmt"
6+
67
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
78
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
89
"github.com/inwx/terraform-provider-inwx/inwx/internal/api"
@@ -21,15 +22,28 @@ func AutomatedDNSSECResource() *schema.Resource {
2122
ForceNew: true,
2223
},
2324
},
25+
Description: "Manages automated DNSSEC for a domain",
26+
DeprecationMessage: "",
27+
Importer: &schema.ResourceImporter{
28+
StateContext: schema.ImportStatePassthroughContext,
29+
},
2430
}
2531
}
2632

2733
func resourceAutomatedDNSSECRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
2834
var diags diag.Diagnostics
2935
client := m.(*api.Client)
3036

37+
domain := d.Get("domain").(string)
38+
if domain == "" {
39+
domain = d.Id()
40+
if err := d.Set("domain", domain); err != nil {
41+
return diag.FromErr(err)
42+
}
43+
}
44+
3145
parameters := map[string]interface{}{
32-
"domains": []string{d.Get("domain").(string)},
46+
"domains": []string{domain},
3347
}
3448

3549
call, err := client.Call(ctx, "dnssec.info", parameters)
@@ -50,16 +64,36 @@ func resourceAutomatedDNSSECRead(ctx context.Context, d *schema.ResourceData, m
5064
return diags
5165
}
5266

53-
records := call["resData"].(map[string]any)["record"].([]any)
67+
resData, ok := call["resData"].(map[string]any)
68+
if !ok {
69+
d.SetId("") // Clear ID if resData is not found
70+
return diags
71+
}
72+
73+
data, ok := resData["data"].([]any)
74+
if !ok || len(data) == 0 {
75+
d.SetId("") // Clear ID if no data found
76+
return diags
77+
}
5478

55-
for _, record := range records {
56-
recordt := record.(map[string]any)
79+
found := false
80+
for _, item := range data {
81+
domainInfo, ok := item.(map[string]any)
82+
if !ok {
83+
continue
84+
}
5785

58-
if recordt["domain"].(string) == d.Get("domain").(string) && recordt["dnssecStatus"].(string) == "AUTO" {
59-
d.SetId(recordt["domain"].(string))
86+
if domainInfo["domain"].(string) == domain && domainInfo["dnssecStatus"].(string) == "AUTO" {
87+
d.SetId(domain)
88+
found = true
89+
break
6090
}
6191
}
6292

93+
if !found {
94+
d.SetId("") // Clear ID if no matching record found
95+
}
96+
6397
return diags
6498
}
6599

@@ -115,7 +149,7 @@ func resourceAutomatedDNSSECDelete(ctx context.Context, d *schema.ResourceData,
115149
diags = append(diags, diag.Diagnostic{
116150
Severity: diag.Error,
117151
Summary: "Could not disable automated DNSSEC",
118-
Detail: fmt.Sprintf("API response not status code 1000 pr 1001. Got response: %s", call.ApiError()),
152+
Detail: fmt.Sprintf("API response not status code 1000 or 1001. Got response: %s", call.ApiError()),
119153
})
120154
return diags
121155
}

inwx/internal/resource/resource_domain_contact.go

Lines changed: 52 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -3,28 +3,29 @@ package resource
33
import (
44
"context"
55
"fmt"
6+
"reflect"
7+
"strconv"
8+
"strings"
9+
610
"github.com/hashicorp/go-cty/cty"
711
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
812
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
913
"github.com/inwx/terraform-provider-inwx/inwx/internal/api"
10-
"reflect"
11-
"strconv"
12-
"strings"
1314
)
1415

1516
type Contact struct {
16-
Type string
17-
Name string
18-
Organization string
19-
StreetAddress string
20-
City string
21-
PostalCode string
22-
StateProvince string
23-
CountryCode string
24-
PhoneNumber string
25-
FaxNumber string
26-
Email string
27-
Remarks string
17+
Type string
18+
Name string
19+
Organization string
20+
StreetAddress string
21+
City string
22+
PostalCode string
23+
StateProvince string
24+
CountryCode string
25+
PhoneNumber string
26+
FaxNumber string
27+
Email string
28+
Remarks string
2829
}
2930

3031
func DomainContactResource() *schema.Resource {
@@ -144,15 +145,15 @@ func resourceContactCreate(ctx context.Context, data *schema.ResourceData, meta
144145
contact := expandContactFromResourceData(data)
145146

146147
parameters := map[string]interface{}{
147-
"type": contact.Type,
148-
"name": contact.Name,
149-
"street": contact.StreetAddress,
150-
"city": contact.City,
151-
"pc": contact.PostalCode,
152-
"sp": contact.StateProvince,
153-
"cc": contact.CountryCode,
154-
"voice": contact.PhoneNumber,
155-
"email": contact.Email,
148+
"type": contact.Type,
149+
"name": contact.Name,
150+
"street": contact.StreetAddress,
151+
"city": contact.City,
152+
"pc": contact.PostalCode,
153+
"sp": contact.StateProvince,
154+
"cc": contact.CountryCode,
155+
"voice": contact.PhoneNumber,
156+
"email": contact.Email,
156157
}
157158
if contact.Organization != "" {
158159
parameters["org"] = contact.Organization
@@ -187,13 +188,13 @@ func resourceContactCreate(ctx context.Context, data *schema.ResourceData, meta
187188
}
188189

189190
rawId := call["resData"].(map[string]interface{})["id"]
190-
switch rawId.(type) {
191+
switch id := rawId.(type) {
191192
case string:
192193
// When contact already exists: id = string
193-
data.SetId(rawId.(string))
194+
data.SetId(id)
194195
case float64:
195196
// When contact does not already exist: id = float64 ...
196-
data.SetId(strconv.Itoa(int(rawId.(float64))))
197+
data.SetId(strconv.Itoa(int(id)))
197198
default:
198199
diags = append(diags, diag.Diagnostic{
199200
Severity: diag.Error,
@@ -396,18 +397,18 @@ func expandContactFromResourceData(data *schema.ResourceData) *Contact {
396397
}
397398

398399
return &Contact{
399-
Type: data.Get("type").(string),
400-
Name: data.Get("name").(string),
401-
Organization: organization,
402-
StreetAddress: data.Get("street_address").(string),
403-
City: data.Get("city").(string),
404-
PostalCode: data.Get("postal_code").(string),
405-
StateProvince: stateProvince,
406-
CountryCode: data.Get("country_code").(string),
407-
PhoneNumber: data.Get("phone_number").(string),
408-
FaxNumber: fax,
409-
Email: data.Get("email").(string),
410-
Remarks: remarks,
400+
Type: data.Get("type").(string),
401+
Name: data.Get("name").(string),
402+
Organization: organization,
403+
StreetAddress: data.Get("street_address").(string),
404+
City: data.Get("city").(string),
405+
PostalCode: data.Get("postal_code").(string),
406+
StateProvince: stateProvince,
407+
CountryCode: data.Get("country_code").(string),
408+
PhoneNumber: data.Get("phone_number").(string),
409+
FaxNumber: fax,
410+
Email: data.Get("email").(string),
411+
Remarks: remarks,
411412
}
412413
}
413414

@@ -430,17 +431,17 @@ func expandContactFromInfoResponse(contactData map[string]interface{}) *Contact
430431
}
431432

432433
return &Contact{
433-
Type: contactData["type"].(string),
434-
Name: contactData["name"].(string),
435-
Organization: organization,
436-
StreetAddress: contactData["street"].(string),
437-
City: contactData["city"].(string),
438-
PostalCode: contactData["pc"].(string),
439-
StateProvince: stateProvince,
440-
CountryCode: contactData["cc"].(string),
441-
PhoneNumber: contactData["voice"].(string),
442-
FaxNumber: fax,
443-
Email: contactData["email"].(string),
444-
Remarks: remarks,
434+
Type: contactData["type"].(string),
435+
Name: contactData["name"].(string),
436+
Organization: organization,
437+
StreetAddress: contactData["street"].(string),
438+
City: contactData["city"].(string),
439+
PostalCode: contactData["pc"].(string),
440+
StateProvince: stateProvince,
441+
CountryCode: contactData["cc"].(string),
442+
PhoneNumber: contactData["voice"].(string),
443+
FaxNumber: fax,
444+
Email: contactData["email"].(string),
445+
Remarks: remarks,
445446
}
446447
}

0 commit comments

Comments
 (0)