tf6muxserver

package
v0.8.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 20, 2022 License: MPL-2.0 Imports: 8 Imported by: 34

Documentation

Overview

Package tf6muxserver combines multiple provider servers that implement protocol version 6, into a single server.

Supported protocol version 6 provider servers include any which implement the tfprotov6.ProviderServer (https://pkg.go.dev/github.com/hashicorp/terraform-plugin-go/tfprotov6#ProviderServer) interface, such as:

Refer to the NewMuxServer() function for creating a combined server.

Index

Examples

Constants

This section is empty.

Variables

This section is empty.

Functions

func NewMuxServer

func NewMuxServer(ctx context.Context, servers ...func() tfprotov6.ProviderServer) (muxServer, error)

NewMuxServer returns a muxed server that will route gRPC requests between tfprotov6.ProviderServers specified. The GetProviderSchema method of each is called to verify that the overall muxed server is compatible by ensuring:

  • All provider schemas exactly match
  • All provider meta schemas exactly match
  • Only one provider implements each managed resource
  • Only one provider implements each data source

The various schemas are cached and used to respond to the GetProviderSchema method of the muxed server.

Example
package main

import (
	"context"
	"log"

	"github.com/hashicorp/terraform-plugin-go/tfprotov6"
	"github.com/hashicorp/terraform-plugin-go/tfprotov6/tf6server"
	"github.com/hashicorp/terraform-plugin-mux/tf6muxserver"
)

func main() {
	ctx := context.Background()
	providers := []func() tfprotov6.ProviderServer{
		// Example terraform-plugin-framework ProviderServer function
		// func() tfprotov6.ProviderServer {
		//   return tfsdk.NewProtocol6Server(frameworkprovider.New("version")())
		// },
		//
		// Example terraform-plugin-go ProviderServer function
		// goprovider.Provider(),
	}

	// requests will be routed to whichever server advertises support for
	// them in the GetSchema response. Only one server may advertise
	// support for any given resource, data source, or the provider or
	// provider_meta schemas. An error will be returned if more than one
	// server claims support.
	muxServer, err := tf6muxserver.NewMuxServer(ctx, providers...)

	if err != nil {
		log.Fatalln(err.Error())
	}

	// Use the result to start a muxed provider
	err = tf6server.Serve("registry.terraform.io/namespace/example", muxServer.ProviderServer)

	if err != nil {
		log.Fatalln(err.Error())
	}
}
Output:

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL