mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-28 01:41:48 -06:00
b9a93a0fe7
This is part of a general effort to move all of Terraform's non-library package surface under internal in order to reinforce that these are for internal use within Terraform only. If you were previously importing packages under this prefix into an external codebase, you could pin to an earlier release tag as an interim solution until you've make a plan to achieve the same functionality some other way.
66 lines
1.8 KiB
Go
66 lines
1.8 KiB
Go
package terraform
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/hashicorp/terraform/internal/addrs"
|
|
"github.com/hashicorp/terraform/internal/providers"
|
|
"github.com/hashicorp/terraform/internal/provisioners"
|
|
)
|
|
|
|
// contextComponentFactory is the interface that Context uses
|
|
// to initialize various components such as providers and provisioners.
|
|
// This factory gets more information than the raw maps using to initialize
|
|
// a Context. This information is used for debugging.
|
|
type contextComponentFactory interface {
|
|
// ResourceProvider creates a new ResourceProvider with the given type.
|
|
ResourceProvider(typ addrs.Provider) (providers.Interface, error)
|
|
ResourceProviders() []string
|
|
|
|
// ResourceProvisioner creates a new ResourceProvisioner with the given
|
|
// type.
|
|
ResourceProvisioner(typ string) (provisioners.Interface, error)
|
|
ResourceProvisioners() []string
|
|
}
|
|
|
|
// basicComponentFactory just calls a factory from a map directly.
|
|
type basicComponentFactory struct {
|
|
providers map[addrs.Provider]providers.Factory
|
|
provisioners map[string]ProvisionerFactory
|
|
}
|
|
|
|
func (c *basicComponentFactory) ResourceProviders() []string {
|
|
var result []string
|
|
for k := range c.providers {
|
|
result = append(result, k.String())
|
|
}
|
|
return result
|
|
}
|
|
|
|
func (c *basicComponentFactory) ResourceProvisioners() []string {
|
|
var result []string
|
|
for k := range c.provisioners {
|
|
result = append(result, k)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func (c *basicComponentFactory) ResourceProvider(typ addrs.Provider) (providers.Interface, error) {
|
|
f, ok := c.providers[typ]
|
|
if !ok {
|
|
return nil, fmt.Errorf("unknown provider %q", typ.String())
|
|
}
|
|
|
|
return f()
|
|
}
|
|
|
|
func (c *basicComponentFactory) ResourceProvisioner(typ string) (provisioners.Interface, error) {
|
|
f, ok := c.provisioners[typ]
|
|
if !ok {
|
|
return nil, fmt.Errorf("unknown provisioner %q", typ)
|
|
}
|
|
|
|
return f()
|
|
}
|