package main import ( "context" "flag" "log" "github.com/hashicorp/terraform-plugin-framework/providerserver" "github.com/hashicorp/terraform-plugin-go/tfprotov6" "github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server" "github.com/hashicorp/terraform-plugin-mux/tf5to6server" "github.com/hashicorp/terraform-plugin-mux/tf6muxserver" "github.com/terraform-providers/terraform-provider-docker/internal/provider" ) // Run "go generate" to format example terraform files and generate the docs for the registry/website // If you do not have terraform installed, you can remove the formatting command, but its suggested to // ensure the documentation is formatted properly. //go:generate terraform fmt -recursive ./examples/ // Run the docs generation tool, check its repository for more information on how it works and how docs // can be customized. //go:generate go run github.com/hashicorp/terraform-plugin-docs/cmd/tfplugindocs var ( // these will be set by the goreleaser configuration // to appropriate values for the compiled binary version string = "dev" // goreleaser can also pass the specific commit if you want // commit string = "" ) func main() { var debugMode bool flag.BoolVar(&debugMode, "debug", false, "set to true to run the provider with support for debuggers like delve") flag.Parse() ctx := context.Background() // Create the SDK v2 provider server var sdkV2Provider = provider.New(version) // Create the Plugin Framework provider server frameworkProviderServer := provider.NewFrameworkProvider(version) upgradedSdkPluginProvider, err := tf5to6server.UpgradeServer( context.Background(), sdkV2Provider().GRPCProvider, ) if err != nil { log.Fatal(err) } providers := []func() tfprotov6.ProviderServer{ func() tfprotov6.ProviderServer { return upgradedSdkPluginProvider }, providerserver.NewProtocol6(frameworkProviderServer()), } muxServer, err := tf6muxserver.NewMuxServer(ctx, providers...) if err != nil { log.Fatal(err) } var serveOpts []tf6server.ServeOpt if debugMode { serveOpts = append(serveOpts, tf6server.WithManagedDebug()) } err = tf6server.Serve( "registry.terraform.io/kreuzwerker/docker", muxServer.ProviderServer, serveOpts..., ) if err != nil { log.Fatal(err) } }