فهرست منبع

After Tutorial 1: introduction.

Frédéric G. MARAND 5 ماه پیش
والد
کامیت
c9d88ea239
8فایلهای تغییر یافته به همراه150 افزوده شده و 70 حذف شده
  1. 5 0
      docker_compose/conf.json
  2. 20 0
      docker_compose/docker-compose.yml
  3. 11 0
      examples/provider-install-verification/main.tf
  4. 3 3
      go.mod
  5. 2 2
      go.sum
  6. 98 61
      internal/provider/provider.go
  7. 10 3
      main.go
  8. 1 1
      tools/tools.go

+ 5 - 0
docker_compose/conf.json

@@ -0,0 +1,5 @@
+{
+  "db_connection": "host=db port=5432 user=postgres password=password dbname=products sslmode=disable",
+  "bind_address": "0.0.0.0:9090",
+  "metrics_address": "localhost:9102"
+}

+ 20 - 0
docker_compose/docker-compose.yml

@@ -0,0 +1,20 @@
+version: '3.7'
+services:
+  api:
+    image: "hashicorpdemoapp/product-api:v0.0.22"
+    ports:
+      - "19090:9090"
+    volumes:
+      - ./conf.json:/config/config.json
+    environment:
+      CONFIG_FILE: '/config/config.json'
+    depends_on:
+      - db
+  db:
+    image: "hashicorpdemoapp/product-api-db:v0.0.22"
+    ports:
+      - "15432:5432"
+    environment:
+      POSTGRES_DB: 'products'
+      POSTGRES_USER: 'postgres'
+      POSTGRES_PASSWORD: 'password'

+ 11 - 0
examples/provider-install-verification/main.tf

@@ -0,0 +1,11 @@
+terraform {
+  required_providers {
+    hashicups = {
+      source = "hashicorp.com/edu/hashicups"
+    }
+  }
+}
+
+provider "hashicups" {}
+
+data "hashicups_coffees" "example" {}

+ 3 - 3
go.mod

@@ -1,4 +1,4 @@
-module github.com/hashicorp/terraform-provider-scaffolding-framework
+module terraform-provider-hashicups
 
 go 1.22.7
 
@@ -7,6 +7,7 @@ require (
 	github.com/hashicorp/terraform-plugin-go v0.25.0
 	github.com/hashicorp/terraform-plugin-log v0.9.0
 	github.com/hashicorp/terraform-plugin-testing v1.11.0
+	github.com/hashicorp/terraform-provider-scaffolding-framework v0.0.0-20241120140137-0773a77924eb
 )
 
 require (
@@ -36,7 +37,7 @@ require (
 	github.com/hashicorp/terraform-registry-address v0.2.3 // indirect
 	github.com/hashicorp/terraform-svchost v0.1.1 // indirect
 	github.com/hashicorp/yamux v0.1.1 // indirect
-	github.com/kr/pretty v0.3.0 // indirect
+	github.com/kr/text v0.2.0 // indirect
 	github.com/mattn/go-colorable v0.1.13 // indirect
 	github.com/mattn/go-isatty v0.0.20 // indirect
 	github.com/mitchellh/copystructure v1.2.0 // indirect
@@ -45,7 +46,6 @@ require (
 	github.com/mitchellh/mapstructure v1.5.0 // indirect
 	github.com/mitchellh/reflectwalk v1.0.2 // indirect
 	github.com/oklog/run v1.0.0 // indirect
-	github.com/rogpeppe/go-internal v1.12.0 // indirect
 	github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
 	github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
 	github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect

+ 2 - 2
go.sum

@@ -86,6 +86,8 @@ github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 h1:wyKCCtn6pBBL46c1uIIBNUOW
 github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0/go.mod h1:B0Al8NyYVr8Mp/KLwssKXG1RqnTk7FySqSn4fRuLNgw=
 github.com/hashicorp/terraform-plugin-testing v1.11.0 h1:MeDT5W3YHbONJt2aPQyaBsgQeAIckwPX41EUHXEn29A=
 github.com/hashicorp/terraform-plugin-testing v1.11.0/go.mod h1:WNAHQ3DcgV/0J+B15WTE6hDvxcUdkPPpnB1FR3M910U=
+github.com/hashicorp/terraform-provider-scaffolding-framework v0.0.0-20241120140137-0773a77924eb h1:o11BS2nKRc+NBgpCUL5xG0YzWR9SaMHyDHD0DfDPmAY=
+github.com/hashicorp/terraform-provider-scaffolding-framework v0.0.0-20241120140137-0773a77924eb/go.mod h1:eKIuOdboOPb9qylqvBLVYN2tn5fPLAyfAdjvGXcmVMQ=
 github.com/hashicorp/terraform-registry-address v0.2.3 h1:2TAiKJ1A3MAkZlH1YI/aTVcLZRu7JseiXNRHbOAyoTI=
 github.com/hashicorp/terraform-registry-address v0.2.3/go.mod h1:lFHA76T8jfQteVfT7caREqguFrW3c4MFSPhZB7HHgUM=
 github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ=
@@ -130,7 +132,6 @@ github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
 github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
 github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
 github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8=
 github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
@@ -217,7 +218,6 @@ google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojt
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
 gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME=
 gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

+ 98 - 61
internal/provider/provider.go

@@ -5,89 +5,126 @@ package provider
 
 import (
 	"context"
-	"net/http"
 
 	"github.com/hashicorp/terraform-plugin-framework/datasource"
-	"github.com/hashicorp/terraform-plugin-framework/function"
 	"github.com/hashicorp/terraform-plugin-framework/provider"
 	"github.com/hashicorp/terraform-plugin-framework/provider/schema"
 	"github.com/hashicorp/terraform-plugin-framework/resource"
-	"github.com/hashicorp/terraform-plugin-framework/types"
 )
 
-// Ensure ScaffoldingProvider satisfies various provider interfaces.
-var _ provider.Provider = &ScaffoldingProvider{}
-var _ provider.ProviderWithFunctions = &ScaffoldingProvider{}
+// Ensure hashicupsProvider satisfies various provider interfaces.
+var _ provider.Provider = &hashicupsProvider{}
 
-// ScaffoldingProvider defines the provider implementation.
-type ScaffoldingProvider struct {
+// New is a helper function to simplify provider server and testing implementation.
+func New(version string) func() provider.Provider {
+	return func() provider.Provider {
+		return &hashicupsProvider{
+			version: version,
+		}
+	}
+}
+
+// hashicupsProvider defines the provider implementation.
+type hashicupsProvider struct {
 	// 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
 }
 
-// ScaffoldingProviderModel describes the provider data model.
-type ScaffoldingProviderModel struct {
-	Endpoint types.String `tfsdk:"endpoint"`
-}
-
-func (p *ScaffoldingProvider) Metadata(ctx context.Context, req provider.MetadataRequest, resp *provider.MetadataResponse) {
-	resp.TypeName = "scaffolding"
+func (p *hashicupsProvider) Metadata(_ context.Context, _ provider.MetadataRequest, resp *provider.MetadataResponse) {
+	resp.TypeName = "hashicups"
 	resp.Version = p.version
 }
 
-func (p *ScaffoldingProvider) Schema(ctx context.Context, req provider.SchemaRequest, resp *provider.SchemaResponse) {
-	resp.Schema = schema.Schema{
-		Attributes: map[string]schema.Attribute{
-			"endpoint": schema.StringAttribute{
-				MarkdownDescription: "Example provider attribute",
-				Optional:            true,
-			},
-		},
-	}
-}
-
-func (p *ScaffoldingProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
-	var data ScaffoldingProviderModel
-
-	resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
-
-	if resp.Diagnostics.HasError() {
-		return
-	}
-
-	// Configuration values are now available.
-	// if data.Endpoint.IsNull() { /* ... */ }
-
-	// Example client configuration for data sources and resources
-	client := http.DefaultClient
-	resp.DataSourceData = client
-	resp.ResourceData = client
+func (p *hashicupsProvider) Schema(_ context.Context, _ provider.SchemaRequest, resp *provider.SchemaResponse) {
+	resp.Schema = schema.Schema{}
 }
 
-func (p *ScaffoldingProvider) Resources(ctx context.Context) []func() resource.Resource {
-	return []func() resource.Resource{
-		NewExampleResource,
-	}
+func (p *hashicupsProvider) Configure(_ context.Context, _ provider.ConfigureRequest, _ *provider.ConfigureResponse) {
 }
 
-func (p *ScaffoldingProvider) DataSources(ctx context.Context) []func() datasource.DataSource {
-	return []func() datasource.DataSource{
-		NewExampleDataSource,
-	}
+func (p *hashicupsProvider) DataSources(_ context.Context) []func() datasource.DataSource {
+	return nil
 }
 
-func (p *ScaffoldingProvider) Functions(ctx context.Context) []func() function.Function {
-	return []func() function.Function{
-		NewExampleFunction,
-	}
+func (p *hashicupsProvider) Resources(_ context.Context) []func() resource.Resource {
+	return nil
 }
 
-func New(version string) func() provider.Provider {
-	return func() provider.Provider {
-		return &ScaffoldingProvider{
-			version: version,
-		}
-	}
-}
+//// Ensure hashicupsProvider satisfies various provider interfaces.
+//var _ provider.Provider = &hashicupsProvider{}
+//var _ provider.ProviderWithFunctions = &hashicupsProvider{}
+//
+//// hashicupsProvider defines the provider implementation.
+//type hashicupsProvider struct {
+//	// 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
+//}
+//
+//// ScaffoldingProviderModel describes the provider data model.
+//type ScaffoldingProviderModel struct {
+//	Endpoint types.String `tfsdk:"endpoint"`
+//}
+//
+//func (p *hashicupsProvider) Metadata(ctx context.Context, req provider.MetadataRequest, resp *provider.MetadataResponse) {
+//	resp.TypeName = "scaffolding"
+//	resp.Version = p.version
+//}
+//
+//func (p *hashicupsProvider) Schema(ctx context.Context, req provider.SchemaRequest, resp *provider.SchemaResponse) {
+//	resp.Schema = schema.Schema{
+//		Attributes: map[string]schema.Attribute{
+//			"endpoint": schema.StringAttribute{
+//				MarkdownDescription: "Example provider attribute",
+//				Optional:            true,
+//			},
+//		},
+//	}
+//}
+//
+//func (p *hashicupsProvider) Configure(ctx context.Context, req provider.ConfigureRequest, resp *provider.ConfigureResponse) {
+//	var data ScaffoldingProviderModel
+//
+//	resp.Diagnostics.Append(req.Config.Get(ctx, &data)...)
+//
+//	if resp.Diagnostics.HasError() {
+//		return
+//	}
+//
+//	// Configuration values are now available.
+//	// if data.Endpoint.IsNull() { /* ... */ }
+//
+//	// Example client configuration for data sources and resources
+//	client := http.DefaultClient
+//	resp.DataSourceData = client
+//	resp.ResourceData = client
+//}
+//
+//func (p *hashicupsProvider) Resources(ctx context.Context) []func() resource.Resource {
+//	return []func() resource.Resource{
+//		NewExampleResource,
+//	}
+//}
+//
+//func (p *hashicupsProvider) DataSources(ctx context.Context) []func() datasource.DataSource {
+//	return []func() datasource.DataSource{
+//		NewExampleDataSource,
+//	}
+//}
+//
+//func (p *hashicupsProvider) Functions(ctx context.Context) []func() function.Function {
+//	return []func() function.Function{
+//		NewExampleFunction,
+//	}
+//}
+//
+//func New(version string) func() provider.Provider {
+//	return func() provider.Provider {
+//		return &hashicupsProvider{
+//			version: version,
+//		}
+//	}
+//}

+ 10 - 3
main.go

@@ -9,7 +9,8 @@ import (
 	"log"
 
 	"github.com/hashicorp/terraform-plugin-framework/providerserver"
-	"github.com/hashicorp/terraform-provider-scaffolding-framework/internal/provider"
+
+	"terraform-provider-hashicups/internal/provider"
 )
 
 var (
@@ -28,11 +29,17 @@ func main() {
 	flag.Parse()
 
 	opts := providerserver.ServeOpts{
+		// NOTE: This is not a typical Terraform Registry provider address,
+		// such as registry.terraform.io/hashicorp/hashicups. This specific
+		// provider address is used in these tutorials in conjunction with a
+		// specific Terraform CLI configuration for manual development testing
+		// of this provider.
+		Address: "hashicorp.com/edu/hashicups",
 		// TODO: Update this string with the published name of your provider.
 		// Also update the tfplugindocs generate command to either remove the
 		// -provider-name flag or set its value to the updated provider name.
-		Address: "registry.terraform.io/hashicorp/scaffolding",
-		Debug:   debug,
+		// Address: "registry.terraform.io/hashicorp/scaffolding",
+		Debug: debug,
 	}
 
 	err := providerserver.Serve(context.Background(), provider.New(version), opts)

+ 1 - 1
tools/tools.go

@@ -19,4 +19,4 @@ import (
 //go:generate terraform fmt -recursive ../examples/
 
 // Generate documentation.
-//go:generate go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs generate --provider-dir .. -provider-name scaffolding
+//go:generate go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs generate --provider-dir .. -provider-name hashicups