provider.go 2.7 KB

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