Archived
Harden read-only provider with tests, docs, and CI
This commit is contained in:
@@ -1,11 +1,35 @@
|
||||
package provider
|
||||
|
||||
import (
|
||||
"sort"
|
||||
|
||||
"github.com/hashicorp/terraform-plugin-framework/attr"
|
||||
"github.com/hashicorp/terraform-plugin-framework/diag"
|
||||
"github.com/hashicorp/terraform-plugin-framework/types"
|
||||
|
||||
"github.com/dynu/terraform-provider-dynu/internal/dynuclient"
|
||||
)
|
||||
|
||||
var domainObjectTypes = map[string]attr.Type{
|
||||
"id": types.Int64Type,
|
||||
"name": types.StringType,
|
||||
"unicode_name": types.StringType,
|
||||
"token": types.StringType,
|
||||
"state": types.StringType,
|
||||
"group": types.StringType,
|
||||
"ipv4_address": types.StringType,
|
||||
"ipv6_address": types.StringType,
|
||||
"ttl": types.Int64Type,
|
||||
"ipv4": types.BoolType,
|
||||
"ipv6": types.BoolType,
|
||||
"ipv4_wildcard_alias": types.BoolType,
|
||||
"ipv6_wildcard_alias": types.BoolType,
|
||||
"allow_zone_transfer": types.BoolType,
|
||||
"dnssec": types.BoolType,
|
||||
"created_on": types.StringType,
|
||||
"updated_on": types.StringType,
|
||||
}
|
||||
|
||||
func mapDomain(domain dynuclient.Domain) domainModel {
|
||||
return domainModel{
|
||||
ID: types.Int64Value(domain.ID),
|
||||
@@ -14,8 +38,8 @@ func mapDomain(domain dynuclient.Domain) domainModel {
|
||||
Token: types.StringValue(domain.Token),
|
||||
State: types.StringValue(domain.State),
|
||||
Group: types.StringValue(domain.Group),
|
||||
IPv4Address: types.StringValue(domain.IPv4Address),
|
||||
IPv6Address: types.StringValue(domain.IPv6Address),
|
||||
IPv4Address: mapString(domain.IPv4Address),
|
||||
IPv6Address: mapString(domain.IPv6Address),
|
||||
TTL: types.Int64Value(domain.TTL),
|
||||
IPv4: types.BoolValue(domain.IPv4),
|
||||
IPv6: types.BoolValue(domain.IPv6),
|
||||
@@ -23,14 +47,59 @@ func mapDomain(domain dynuclient.Domain) domainModel {
|
||||
IPv6WildcardAlias: types.BoolValue(domain.IPv6WildcardAlias),
|
||||
AllowZoneTransfer: types.BoolValue(domain.AllowZoneTransfer),
|
||||
DNSSEC: types.BoolValue(domain.DNSSEC),
|
||||
CreatedOn: types.StringValue(domain.CreatedOn),
|
||||
UpdatedOn: types.StringValue(domain.UpdatedOn),
|
||||
CreatedOn: mapString(domain.CreatedOn),
|
||||
UpdatedOn: mapString(domain.UpdatedOn),
|
||||
}
|
||||
}
|
||||
|
||||
func domainObjectValue(domain dynuclient.Domain) (types.Object, diag.Diagnostics) {
|
||||
mapped := mapDomain(domain)
|
||||
|
||||
return types.ObjectValue(domainObjectTypes, map[string]attr.Value{
|
||||
"id": mapped.ID,
|
||||
"name": mapped.Name,
|
||||
"unicode_name": mapped.UnicodeName,
|
||||
"token": mapped.Token,
|
||||
"state": mapped.State,
|
||||
"group": mapped.Group,
|
||||
"ipv4_address": mapped.IPv4Address,
|
||||
"ipv6_address": mapped.IPv6Address,
|
||||
"ttl": mapped.TTL,
|
||||
"ipv4": mapped.IPv4,
|
||||
"ipv6": mapped.IPv6,
|
||||
"ipv4_wildcard_alias": mapped.IPv4WildcardAlias,
|
||||
"ipv6_wildcard_alias": mapped.IPv6WildcardAlias,
|
||||
"allow_zone_transfer": mapped.AllowZoneTransfer,
|
||||
"dnssec": mapped.DNSSEC,
|
||||
"created_on": mapped.CreatedOn,
|
||||
"updated_on": mapped.UpdatedOn,
|
||||
})
|
||||
}
|
||||
|
||||
func mapString(in string) types.String {
|
||||
if in == "" {
|
||||
return types.StringNull()
|
||||
}
|
||||
return types.StringValue(in)
|
||||
}
|
||||
|
||||
func sortDomains(domains []dynuclient.Domain) {
|
||||
sort.Slice(domains, func(i, j int) bool {
|
||||
if domains[i].Name != domains[j].Name {
|
||||
return domains[i].Name < domains[j].Name
|
||||
}
|
||||
return domains[i].ID < domains[j].ID
|
||||
})
|
||||
}
|
||||
|
||||
func sortDNSRecords(records []dynuclient.DNSRecord) {
|
||||
sort.Slice(records, func(i, j int) bool {
|
||||
if records[i].Hostname != records[j].Hostname {
|
||||
return records[i].Hostname < records[j].Hostname
|
||||
}
|
||||
if records[i].RecordType != records[j].RecordType {
|
||||
return records[i].RecordType < records[j].RecordType
|
||||
}
|
||||
return records[i].ID < records[j].ID
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user