123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package provider
- import (
- "context"
- "fmt"
- "github.com/hashicorp/terraform-plugin-framework/diag"
- "github.com/hashicorp/terraform-plugin-framework/tfsdk"
- "github.com/hashicorp/terraform-plugin-framework/types"
- )
- // provider satisfies the tfsdk.Provider interface and usually is included
- // with all Resource and DataSource implementations.
- type provider struct {
- // configured is set to true at the end of the Configure method.
- // This can be used in Resource and DataSource implementations to verify
- // that the provider was previously configured.
- configured bool
- // version is set to the provider version on release, "dev" when the
- // provider is built and ran locally, and "test" when running acceptance
- // testing.
- version string
- // client can contain the upstream provider SDK or HTTP client used to
- // communicate with the upstream service. Resource and DataSource
- // implementations can then make calls using this client.
- //
- // TODO: If appropriate, implement upstream provider SDK or HTTP client.
- // client vendorsdk.ExampleClient
- }
- func (p *provider) Configure(ctx context.Context, req tfsdk.ConfigureProviderRequest, resp *tfsdk.ConfigureProviderResponse) {
- // If the upstream provider SDK or HTTP client requires configuration, such
- // as authentication or logging, this is a great opportunity to do so.
- p.configured = true
- }
- func (p *provider) GetResources(ctx context.Context) (map[string]tfsdk.ResourceType, diag.Diagnostics) {
- return map[string]tfsdk.ResourceType{
- "scaffolding_example": exampleResourceType{},
- }, nil
- }
- func (p *provider) GetDataSources(ctx context.Context) (map[string]tfsdk.DataSourceType, diag.Diagnostics) {
- return map[string]tfsdk.DataSourceType{
- "scaffolding_example": exampleDataSourceType{},
- }, nil
- }
- func (p *provider) GetSchema(ctx context.Context) (tfsdk.Schema, diag.Diagnostics) {
- return tfsdk.Schema{
- Attributes: map[string]tfsdk.Attribute{
- "example": {
- MarkdownDescription: "Example provider attribute",
- Optional: true,
- Type: types.StringType,
- },
- },
- }, nil
- }
- func New(version string) func() tfsdk.Provider {
- return func() tfsdk.Provider {
- return &provider{
- version: version,
- }
- }
- }
- // convertProviderType is a helper function for NewResource and NewDataSource
- // implementations to associate the concrete provider type. Alternatively,
- // this helper can be skipped and the provider type can be directly type
- // asserted (e.g. provider: in.(*provider)), however using this can prevent
- // potential panics.
- func convertProviderType(in tfsdk.Provider) (provider, diag.Diagnostics) {
- var diags diag.Diagnostics
- p, ok := in.(*provider)
- if !ok {
- diags.AddError(
- "Unexpected Provider Instance Type",
- fmt.Sprintf("While creating the data source or resource, an unexpected provider type (%T) was received. This is always a bug in the provider code and should be reported to the provider developers.", p),
- )
- return provider{}, diags
- }
- if p == nil {
- diags.AddError(
- "Unexpected Provider Instance Type",
- "While creating the data source or resource, an unexpected empty provider instance was received. This is always a bug in the provider code and should be reported to the provider developers.",
- )
- return provider{}, diags
- }
- return *p, diags
- }
|