opentofu/terraform/resource_provider.go

57 lines
1.7 KiB
Go
Raw Normal View History

2014-05-24 14:04:43 -05:00
package terraform
// ResourceProvider is an interface that must be implemented by any
// resource provider: the thing that creates and manages the resources in
// a Terraform configuration.
type ResourceProvider interface {
// Configure configures the provider itself with the configuration
// given. This is useful for setting things like access keys.
//
// Configure returns an error if it occurred.
2014-06-12 19:59:59 -05:00
Configure(*ResourceConfig) error
2014-05-24 14:04:43 -05:00
// Resources returns all the available resource types that this provider
// knows how to manage.
Resources() []ResourceType
// Apply applies a diff to a specific resource and returns the new
// resource state along with an error.
//
// If the resource state given has an empty ID, then a new resource
// is expected to be created.
//Apply(ResourceState, ResourceDiff) (ResourceState, error)
// Diff diffs a resource versus a desired state and returns
// a diff.
Diff(
*ResourceState,
2014-06-12 19:59:59 -05:00
*ResourceConfig) (*ResourceDiff, error)
}
// ResourceConfig holds the configuration given for a resource. This is
// done instead of a raw `map[string]interface{}` type so that rich
// methods can be added to it to make dealing with it easier.
type ResourceConfig struct {
ComputedKeys []string
Raw map[string]interface{}
}
2014-05-24 14:04:43 -05:00
// ResourceType is a type of resource that a resource provider can manage.
type ResourceType struct {
Name string
}
// ResourceProviderFactory is a function type that creates a new instance
// of a resource provider.
type ResourceProviderFactory func() (ResourceProvider, error)
func ProviderSatisfies(p ResourceProvider, n string) bool {
for _, rt := range p.Resources() {
if rt.Name == n {
return true
}
}
return false
}