provider.go 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. package provider
  2. import (
  3. "context"
  4. "net/http"
  5. "github.com/hashicorp/terraform-plugin-framework/datasource"
  6. "github.com/hashicorp/terraform-plugin-framework/provider"
  7. "github.com/hashicorp/terraform-plugin-framework/provider/schema"
  8. "github.com/hashicorp/terraform-plugin-framework/resource"
  9. "github.com/hashicorp/terraform-plugin-framework/types"
  10. )
  11. // Ensure ScaffoldingProvider satisfies various provider interfaces.
  12. var _ provider.Provider = &ScaffoldingProvider{}
  13. var _ provider.ProviderWithMetadata = &ScaffoldingProvider{}
  14. // ScaffoldingProvider defines the provider implementation.
  15. type ScaffoldingProvider struct {
  16. // version is set to the provider version on release, "dev" when the
  17. // provider is built and ran locally, and "test" when running acceptance
  18. // testing.
  19. version string
  20. }
  21. // ScaffoldingProviderModel describes the provider data model.
  22. type ScaffoldingProviderModel struct {
  23. Endpoint types.String `tfsdk:"endpoint"`
  24. }
  25. func (p *ScaffoldingProvider) Metadata(ctx context.Context, req provider.MetadataRequest, resp *provider.MetadataResponse) {
  26. resp.TypeName = "scaffolding"
  27. resp.Version = p.version
  28. }
  29. func (p *ScaffoldingProvider) Schema(ctx context.Context, req provider.SchemaRequest, resp *provider.SchemaResponse) {
  30. resp.Schema = schema.Schema{
  31. Attributes: map[string]schema.Attribute{
  32. "endpoint": schema.StringAttribute{
  33. MarkdownDescription: "Example provider attribute",
  34. Optional: true,
  35. },
  36. },
  37. }
  38. }
  39. func (p *ScaffoldingProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
  40. var data ScaffoldingProviderModel
  41. resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
  42. if resp.Diagnostics.HasError() {
  43. return
  44. }
  45. // Configuration values are now available.
  46. // if data.Endpoint.IsNull() { /* ... */ }
  47. // Example client configuration for data sources and resources
  48. client := http.DefaultClient
  49. resp.DataSourceData = client
  50. resp.ResourceData = client
  51. }
  52. func (p *ScaffoldingProvider) Resources(ctx context.Context) []func() resource.Resource {
  53. return []func() resource.Resource{
  54. NewExampleResource,
  55. }
  56. }
  57. func (p *ScaffoldingProvider) DataSources(ctx context.Context) []func() datasource.DataSource {
  58. return []func() datasource.DataSource{
  59. NewExampleDataSource,
  60. }
  61. }
  62. func New(version string) func() provider.Provider {
  63. return func() provider.Provider {
  64. return &ScaffoldingProvider{
  65. version: version,
  66. }
  67. }
  68. }