mirror of
https://github.com/opentofu/opentofu.git
synced 2024-12-30 10:47:14 -06:00
e57a399d71
This changes the representation of maps in the interpolator from the dotted flatmap form of a string variable named "var.variablename.key" per map element to use native HIL maps instead. This involves porting some of the interpolation functions in order to keep the tests green, and adding support for map outputs. There is one backwards incompatibility: as a result of an implementation detail of maps, one could access an indexed map variable using the syntax "${var.variablename.key}". This is no longer possible - instead HIL native syntax - "${var.variablename["key"]}" must be used. This was previously documented, (though not heavily used) so it must be noted as a backward compatibility issue for Terraform 0.7.
201 lines
4.8 KiB
Go
201 lines
4.8 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 {
|
|
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
|
|
|
|
SetProviderConfigCalled bool
|
|
SetProviderConfigName string
|
|
SetProviderConfigConfig *ResourceConfig
|
|
|
|
ParentProviderConfigCalled bool
|
|
ParentProviderConfigName string
|
|
ParentProviderConfigConfig *ResourceConfig
|
|
|
|
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
|
|
|
|
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) 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(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) SetProviderConfig(
|
|
n string, cfg *ResourceConfig) error {
|
|
c.SetProviderConfigCalled = true
|
|
c.SetProviderConfigName = n
|
|
c.SetProviderConfigConfig = cfg
|
|
return nil
|
|
}
|
|
|
|
func (c *MockEvalContext) ParentProviderConfig(n string) *ResourceConfig {
|
|
c.ParentProviderConfigCalled = true
|
|
c.ParentProviderConfigName = n
|
|
return c.ParentProviderConfigConfig
|
|
}
|
|
|
|
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) 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
|
|
}
|