provider/aws: Route53 Record: Add Type validation
Adds validation for the `type` parameter of an `aws_route53_record` resource. This will allow Terraform to catch any user errors of a `type` parameter during a `terraform plan` instead of during a `terraform apply`. Fixes: #11114
This commit is contained in:
parent
64d57e3553
commit
1955ac38bc
|
@ -50,6 +50,7 @@ func resourceAwsRoute53Record() *schema.Resource {
|
||||||
Type: schema.TypeString,
|
Type: schema.TypeString,
|
||||||
Required: true,
|
Required: true,
|
||||||
ForceNew: true,
|
ForceNew: true,
|
||||||
|
ValidateFunc: validateRoute53RecordType,
|
||||||
},
|
},
|
||||||
|
|
||||||
"zone_id": &schema.Schema{
|
"zone_id": &schema.Schema{
|
||||||
|
|
|
@ -648,3 +648,28 @@ func validateOnceADayWindowFormat(v interface{}, k string) (ws []string, errors
|
||||||
}
|
}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func validateRoute53RecordType(v interface{}, k string) (ws []string, errors []error) {
|
||||||
|
// Valid Record types
|
||||||
|
// SOA, A, TXT, NS, CNAME, MX, NAPTR, PTR, SRV, SPF, AAAA
|
||||||
|
validTypes := map[string]struct{}{
|
||||||
|
"SOA": {},
|
||||||
|
"A": {},
|
||||||
|
"TXT": {},
|
||||||
|
"NS": {},
|
||||||
|
"CNAME": {},
|
||||||
|
"MX": {},
|
||||||
|
"NAPTR": {},
|
||||||
|
"PTR": {},
|
||||||
|
"SRV": {},
|
||||||
|
"SPF": {},
|
||||||
|
"AAAA": {},
|
||||||
|
}
|
||||||
|
|
||||||
|
value := v.(string)
|
||||||
|
if _, ok := validTypes[value]; !ok {
|
||||||
|
errors = append(errors, fmt.Errorf(
|
||||||
|
"%q must be one of [SOA, A, TXT, NS, CNAME, MX, NAPTR, PTR, SRV, SPF, AAAA]", k))
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
|
@ -1005,3 +1005,41 @@ func TestValidateOnceADayWindowFormat(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestValidateRoute53RecordType(t *testing.T) {
|
||||||
|
validTypes := []string{
|
||||||
|
"AAAA",
|
||||||
|
"SOA",
|
||||||
|
"A",
|
||||||
|
"TXT",
|
||||||
|
"CNAME",
|
||||||
|
"MX",
|
||||||
|
"NAPTR",
|
||||||
|
"PTR",
|
||||||
|
"SPF",
|
||||||
|
"SRV",
|
||||||
|
"NS",
|
||||||
|
}
|
||||||
|
|
||||||
|
invalidTypes := []string{
|
||||||
|
"a",
|
||||||
|
"alias",
|
||||||
|
"SpF",
|
||||||
|
"Txt",
|
||||||
|
"AaAA",
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range validTypes {
|
||||||
|
_, errors := validateRoute53RecordType(v, "route53_record")
|
||||||
|
if len(errors) != 0 {
|
||||||
|
t.Fatalf("%q should be a valid Route53 record type: %v", v, errors)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, v := range invalidTypes {
|
||||||
|
_, errors := validateRoute53RecordType(v, "route53_record")
|
||||||
|
if len(errors) == 0 {
|
||||||
|
t.Fatalf("%q should not be a valid Route53 record type", v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue