README
¶
req2schema
Generate a terraform provider resource Schema
from an AWS request schema.
This tool is intended to supplement the Terraform AWS provider's
skaff tool,
focusing specifically on a resource's Schema. skaff does not use any external
data to generate its source files, and instead populates a
placeholder Schema.
req2schema uses AWS HTTP request schemas to provide a stubbed out terraform resource
schema with the appropriate key names and data types (including nested objects). This
can be helpful for large resources which are time consuming to write by hand.
Installation
$ go install github.com/jar-b/req2schema@latest
Usage
Usage: req2schema [flags] [filename]
Flags:
-out string
output file (optional, prints to stdout if omitted)
Examples
The following is an example of the AWS request schema syntax:
{
"thing": "string",
"second": number,
"another": boolean,
"nested": [
{
"value": "string"
}
]
}
req2schema will infer data types from the field values and generate go source code with a
terraform resource schema definition:
$ req2schema testdata/simple.json
package someservice
import (
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
tftags "github.com/hashicorp/terraform-provider-aws/internal/tags"
)
func ResourceSomeThing() *schema.Resource {
return &schema.Resource{
Schema: map[string]*schema.Schema{
"another": {
Type: schema.TypeBool,
},
"nested": {
Type: schema.TypeList,
Elems: &schema.Resource{
Schema: map[string]*schema.Schema{
"value": {
Type: schema.TypeString,
},
},
},
},
"second": {
Type: schema.TypeFloat,
},
"thing": {
Type: schema.TypeString,
},
"tags": tftags.TagsSchema(),
"tags_all": tftags.TagsSchemaComputed(),
},
}
}
The testdata subfolder contains additional requests directly from the
AWS documentation.
Additional Considerations
- The resulting source code will be framed out, but incomplete.
- All items will need one of
Required,Optional, orComputedset (this cannot be inferred from the HTTP request schema alone). enumtypes will need validation added.- If unable to determine the type from the incoming request, a
TODOcomment is added after the type definition as a reminder to determine the appropriate type.
- All items will need one of
- Not all AWS services include JSON request schemas in the documentation. Some services use XML examples, which this tool does not support.
Documentation
¶
There is no documentation for this package.