Files
terraform-provider-threshold/internal/provider/provider.go
T
Todd Knight 5bb8c82819 Create Watchtower Project Resources (#1)
* Add watchtower provider using the auto generated go sdk.

* Add read and create for project resources.

* Add provider internal validate test.

* Update the project module to be terraform-provider-watchtower

* Organize the ResourceData to Project and vis versa logic into their own helper methods.

* Adding tests for going ResourceData to Project and vis versa.

* provider_update

* Single acceptance test written and correctly failing.

* Implement update and delete. Always run Acceptance Testing

* Move project field names into constants.

* Allow tests to use the apiError response for checking error code.

* Correcting the naming of key value consts.

* Rely on "make testacc" for acceptance testing instead of always running it.

* Updating dependencies to use the new TestController creation.
2020-05-29 09:13:31 -07:00

58 lines
1.5 KiB
Go

package provider
import (
"context"
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
"github.com/hashicorp/terraform-plugin-sdk/terraform"
"github.com/hashicorp/watchtower/api"
)
func New() terraform.ResourceProvider {
p := &schema.Provider{
Schema: map[string]*schema.Schema{
"default_organization": {
Type: schema.TypeString,
Optional: true,
DefaultFunc: schema.EnvDefaultFunc("WATCHTOWER_DEFAULT_ORG", ""),
Description: "The Watchtower organization scope to operate all actions in if not provided in the individual resources.",
},
"base_url": {
Type: schema.TypeString,
Required: true,
Description: "The base url of the Watchtower API. For example 'http://127.0.0.1/'",
},
},
ResourcesMap: map[string]*schema.Resource{
"watchtower_project": resourceProject(),
},
}
p.ConfigureFunc = providerConfigure(p)
return p
}
type metaData struct {
client *api.Client
ctx context.Context
}
func providerConfigure(p *schema.Provider) schema.ConfigureFunc {
return func(d *schema.ResourceData) (interface{}, error) {
client, err := api.NewClient(nil)
if err != nil {
return nil, err
}
if err := client.SetAddr(d.Get("base_url").(string)); err != nil {
return nil, err
}
client.SetOrg(d.Get("default_organization").(string))
// TODO: Pass these in through the config, add token, etc...
client.SetLimiter(5, 5)
return &metaData{client: client, ctx: p.StopContext()}, nil
}
}