Documentation
¶
Index ¶
- Variables
- type ContextKey
- type Request
- type Server
- func (s *Server) Cleanup()
- func (s *Server) Get(request Request) error
- func (s *Server) GetDataSourceSchema(request Request, dataSource string) ([]byte, error)
- func (s *Server) GetEphemeralResourceSchema(request Request, ephemeralResource string) ([]byte, error)
- func (s *Server) GetFunctionSchema(request Request, function string) ([]byte, error)
- func (s *Server) GetProviderSchema(request Request) ([]byte, error)
- func (s *Server) GetResourceSchema(request Request, resource string) ([]byte, error)
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ( ErrPluginNotFound = fmt.Errorf("plugin not found") ErrPluginApi = fmt.Errorf("plugin API error") )
var ( // ErrNotImplemented is returned when a method is not implemented ErrNotImplemented = errors.New("not implemented") )
Functions ¶
This section is empty.
Types ¶
type ContextKey ¶ added in v0.2.0
type ContextKey struct{}
ContextKey is a type used to store the server instance in the context.
type Request ¶
type Request struct {
Namespace string // Namespace of the provider (e.g., "Azure")
Name string // Name of the provider (e.g., "azapi")
Version string // Version of the provider (e.g., "2.5.0")
}
Request is a request structure used to specify the details of a plugin so that it can be downloaded. Note that the request fields are case-sensitive.
func (Request) String ¶
String returns a string representation of the Request in the format: "https://registry.opentofu.org/v1/providers/{namespace}/{name}/{version}/download/{os}/{arch}" This format is used to construct the URL for downloading the plugin.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is a struct that manages the plugin download and caching process.
func NewServer ¶
NewServer creates a new Server instance with an optional logger. If no logger is provided, it defaults to a logger that discards all logs.
Example ¶
ExampleNewServer demonstrates how to create a new server instance, download a provider, and retrieve its schema. It uses the Azure azapi provider as an example.
package main
import (
"encoding/json"
"fmt"
"github.com/matt-FFFFFF/tfpluginschema"
)
func main() {
s := tfpluginschema.NewServer(nil)
defer s.Cleanup()
request := tfpluginschema.Request{
Namespace: "Azure",
Name: "azapi",
Version: "2.5.0",
}
bytes, err := s.GetProviderSchema(request)
if err != nil {
panic(err)
}
// Using this type to unmarshal the provider schema for display purposes.
// If using this with an MCP server you can just output the JSON bytes directly.
type exampleProviderSchema struct {
Block struct {
Attributes []struct {
Name string `json:"name"`
} `json:"attributes"`
} `json:"block"`
}
var schema exampleProviderSchema
if err := json.Unmarshal(bytes, &schema); err != nil {
panic(err)
}
for _, attr := range schema.Block.Attributes {
fmt.Printf("Attribute: %s\n", attr.Name)
}
}
Output: Attribute: auxiliary_tenant_ids Attribute: client_certificate Attribute: client_certificate_password Attribute: client_certificate_path Attribute: client_id Attribute: client_id_file_path Attribute: client_secret Attribute: client_secret_file_path Attribute: custom_correlation_request_id Attribute: default_location Attribute: default_name Attribute: default_tags Attribute: disable_correlation_request_id Attribute: disable_default_output Attribute: disable_terraform_partner_id Attribute: enable_preflight Attribute: endpoint Attribute: environment Attribute: ignore_no_op_changes Attribute: maximum_busy_retry_attempts Attribute: oidc_azure_service_connection_id Attribute: oidc_request_token Attribute: oidc_request_url Attribute: oidc_token Attribute: oidc_token_file_path Attribute: partner_id Attribute: skip_provider_registration Attribute: subscription_id Attribute: tenant_id Attribute: use_aks_workload_identity Attribute: use_cli Attribute: use_msi Attribute: use_oidc
func (*Server) Cleanup ¶
func (s *Server) Cleanup()
Cleanup removes the temporary directory used for plugin downloads.
func (*Server) Get ¶
Get retrieves the plugin for the specified request, downloading it if necessary. The GetXxx methods (GetResourceSchema, GetDataSourceSchema, etc.) will call this method anyway, so it is not necessary to call Get directly unless you want to ensure the plugin is downloaded first. It is stored in a temporary directory and cached for future use. Make sure to call Cleanup() to remove the temporary files.
func (*Server) GetDataSourceSchema ¶
GetDataSourceSchema retrieves the schema for a specific data source from the provider.
func (*Server) GetEphemeralResourceSchema ¶ added in v0.2.0
func (s *Server) GetEphemeralResourceSchema(request Request, ephemeralResource string) ([]byte, error)
GetEphemeralResourceSchema retrieves the schema for a specific ephemeral resource from the provider.
func (*Server) GetFunctionSchema ¶
GetFunctionSchema retrieves the schema for a specific function from the provider.
func (*Server) GetProviderSchema ¶ added in v0.3.0
GetProviderSchema retrieves the schema for the provider configuration.