provider.go 2.4 KB

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