mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-14 09:34:03 -06:00
This turned out to be a big messy commit, since the way providers are referenced is tightly coupled throughout the code. That starts to unify how providers are referenced, using the format output node Name method. Add a new field to the internal resource data types called ResolvedProvider. This is set by a new setter method SetProvider when a resource is connected to a provider during graph creation. This allows us to later lookup the provider instance a resource is connected to, without requiring it to have the same module path. The InitProvider context method now takes 2 arguments, one if the provider type and the second is the full name of the provider. While the provider type could still be parsed from the full name, this makes it more explicit and, and changes to the name format won't effect this code.
201 lines
4.9 KiB
Go
201 lines
4.9 KiB
Go
package terraform
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"github.com/hashicorp/terraform/config"
|
|
)
|
|
|
|
// MockEvalContext is a mock version of EvalContext that can be used
|
|
// for tests.
|
|
type MockEvalContext struct {
|
|
StoppedCalled bool
|
|
StoppedValue <-chan struct{}
|
|
|
|
HookCalled bool
|
|
HookHook Hook
|
|
HookError error
|
|
|
|
InputCalled bool
|
|
InputInput UIInput
|
|
|
|
InitProviderCalled bool
|
|
InitProviderName string
|
|
InitProviderProvider ResourceProvider
|
|
InitProviderError error
|
|
|
|
ProviderCalled bool
|
|
ProviderName string
|
|
ProviderProvider ResourceProvider
|
|
|
|
CloseProviderCalled bool
|
|
CloseProviderName string
|
|
CloseProviderProvider ResourceProvider
|
|
|
|
ProviderInputCalled bool
|
|
ProviderInputName string
|
|
ProviderInputConfig map[string]interface{}
|
|
|
|
SetProviderInputCalled bool
|
|
SetProviderInputName string
|
|
SetProviderInputConfig map[string]interface{}
|
|
|
|
ConfigureProviderCalled bool
|
|
ConfigureProviderName string
|
|
ConfigureProviderConfig *ResourceConfig
|
|
ConfigureProviderError error
|
|
|
|
InitProvisionerCalled bool
|
|
InitProvisionerName string
|
|
InitProvisionerProvisioner ResourceProvisioner
|
|
InitProvisionerError error
|
|
|
|
ProvisionerCalled bool
|
|
ProvisionerName string
|
|
ProvisionerProvisioner ResourceProvisioner
|
|
|
|
CloseProvisionerCalled bool
|
|
CloseProvisionerName string
|
|
CloseProvisionerProvisioner ResourceProvisioner
|
|
|
|
InterpolateCalled bool
|
|
InterpolateConfig *config.RawConfig
|
|
InterpolateResource *Resource
|
|
InterpolateConfigResult *ResourceConfig
|
|
InterpolateError error
|
|
|
|
InterpolateProviderCalled bool
|
|
InterpolateProviderConfig *config.ProviderConfig
|
|
InterpolateProviderResource *Resource
|
|
InterpolateProviderConfigResult *ResourceConfig
|
|
InterpolateProviderError error
|
|
|
|
PathCalled bool
|
|
PathPath []string
|
|
|
|
SetVariablesCalled bool
|
|
SetVariablesModule string
|
|
SetVariablesVariables map[string]interface{}
|
|
|
|
DiffCalled bool
|
|
DiffDiff *Diff
|
|
DiffLock *sync.RWMutex
|
|
|
|
StateCalled bool
|
|
StateState *State
|
|
StateLock *sync.RWMutex
|
|
}
|
|
|
|
func (c *MockEvalContext) Stopped() <-chan struct{} {
|
|
c.StoppedCalled = true
|
|
return c.StoppedValue
|
|
}
|
|
|
|
func (c *MockEvalContext) Hook(fn func(Hook) (HookAction, error)) error {
|
|
c.HookCalled = true
|
|
if c.HookHook != nil {
|
|
if _, err := fn(c.HookHook); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return c.HookError
|
|
}
|
|
|
|
func (c *MockEvalContext) Input() UIInput {
|
|
c.InputCalled = true
|
|
return c.InputInput
|
|
}
|
|
|
|
func (c *MockEvalContext) InitProvider(t, n string) (ResourceProvider, error) {
|
|
c.InitProviderCalled = true
|
|
c.InitProviderName = n
|
|
return c.InitProviderProvider, c.InitProviderError
|
|
}
|
|
|
|
func (c *MockEvalContext) Provider(n string) ResourceProvider {
|
|
c.ProviderCalled = true
|
|
c.ProviderName = n
|
|
return c.ProviderProvider
|
|
}
|
|
|
|
func (c *MockEvalContext) CloseProvider(n string) error {
|
|
c.CloseProviderCalled = true
|
|
c.CloseProviderName = n
|
|
return nil
|
|
}
|
|
|
|
func (c *MockEvalContext) ConfigureProvider(n string, cfg *ResourceConfig) error {
|
|
c.ConfigureProviderCalled = true
|
|
c.ConfigureProviderName = n
|
|
c.ConfigureProviderConfig = cfg
|
|
return c.ConfigureProviderError
|
|
}
|
|
|
|
func (c *MockEvalContext) ProviderInput(n string) map[string]interface{} {
|
|
c.ProviderInputCalled = true
|
|
c.ProviderInputName = n
|
|
return c.ProviderInputConfig
|
|
}
|
|
|
|
func (c *MockEvalContext) SetProviderInput(n string, cfg map[string]interface{}) {
|
|
c.SetProviderInputCalled = true
|
|
c.SetProviderInputName = n
|
|
c.SetProviderInputConfig = cfg
|
|
}
|
|
|
|
func (c *MockEvalContext) InitProvisioner(n string) (ResourceProvisioner, error) {
|
|
c.InitProvisionerCalled = true
|
|
c.InitProvisionerName = n
|
|
return c.InitProvisionerProvisioner, c.InitProvisionerError
|
|
}
|
|
|
|
func (c *MockEvalContext) Provisioner(n string) ResourceProvisioner {
|
|
c.ProvisionerCalled = true
|
|
c.ProvisionerName = n
|
|
return c.ProvisionerProvisioner
|
|
}
|
|
|
|
func (c *MockEvalContext) CloseProvisioner(n string) error {
|
|
c.CloseProvisionerCalled = true
|
|
c.CloseProvisionerName = n
|
|
return nil
|
|
}
|
|
|
|
func (c *MockEvalContext) Interpolate(
|
|
config *config.RawConfig, resource *Resource) (*ResourceConfig, error) {
|
|
c.InterpolateCalled = true
|
|
c.InterpolateConfig = config
|
|
c.InterpolateResource = resource
|
|
return c.InterpolateConfigResult, c.InterpolateError
|
|
}
|
|
|
|
func (c *MockEvalContext) InterpolateProvider(
|
|
config *config.ProviderConfig, resource *Resource) (*ResourceConfig, error) {
|
|
c.InterpolateProviderCalled = true
|
|
c.InterpolateProviderConfig = config
|
|
c.InterpolateProviderResource = resource
|
|
return c.InterpolateProviderConfigResult, c.InterpolateError
|
|
}
|
|
|
|
func (c *MockEvalContext) Path() []string {
|
|
c.PathCalled = true
|
|
return c.PathPath
|
|
}
|
|
|
|
func (c *MockEvalContext) SetVariables(n string, vs map[string]interface{}) {
|
|
c.SetVariablesCalled = true
|
|
c.SetVariablesModule = n
|
|
c.SetVariablesVariables = vs
|
|
}
|
|
|
|
func (c *MockEvalContext) Diff() (*Diff, *sync.RWMutex) {
|
|
c.DiffCalled = true
|
|
return c.DiffDiff, c.DiffLock
|
|
}
|
|
|
|
func (c *MockEvalContext) State() (*State, *sync.RWMutex) {
|
|
c.StateCalled = true
|
|
return c.StateState, c.StateLock
|
|
}
|