re-validate data source config during read
Just like resources, early data soruce validation will contain many unknown values. Re-validate once we have the config config.
This commit is contained in:
parent
c41eb0e6e4
commit
2b200dd9bb
|
@ -1866,3 +1866,43 @@ test_thing.bar:
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestContext2Refresh_dataValidation(t *testing.T) {
|
||||
m := testModuleInline(t, map[string]string{
|
||||
"main.tf": `
|
||||
data "aws_data_source" "foo" {
|
||||
foo = "bar"
|
||||
}
|
||||
`,
|
||||
})
|
||||
|
||||
p := testProvider("aws")
|
||||
p.PlanResourceChangeFn = func(req providers.PlanResourceChangeRequest) (resp providers.PlanResourceChangeResponse) {
|
||||
resp.PlannedState = req.ProposedNewState
|
||||
return
|
||||
}
|
||||
p.ReadDataSourceFn = func(req providers.ReadDataSourceRequest) (resp providers.ReadDataSourceResponse) {
|
||||
resp.State = req.Config
|
||||
return
|
||||
}
|
||||
|
||||
ctx := testContext2(t, &ContextOpts{
|
||||
Config: m,
|
||||
ProviderResolver: providers.ResolverFixed(
|
||||
map[string]providers.Factory{
|
||||
"aws": testProviderFuncFixed(p),
|
||||
},
|
||||
),
|
||||
})
|
||||
|
||||
_, diags := ctx.Refresh()
|
||||
if diags.HasErrors() {
|
||||
// Should get this error:
|
||||
// Unsupported attribute: This object does not have an attribute named "missing"
|
||||
t.Fatal(diags.Err())
|
||||
}
|
||||
|
||||
if !p.ValidateDataSourceConfigCalled {
|
||||
t.Fatal("ValidateDataSourceConfig not called during plan")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -179,6 +179,17 @@ func (n *EvalReadData) Eval(ctx EvalContext) (interface{}, error) {
|
|||
)
|
||||
}
|
||||
|
||||
log.Printf("[TRACE] Re-validating config for %s", absAddr)
|
||||
validateResp := provider.ValidateDataSourceConfig(
|
||||
providers.ValidateDataSourceConfigRequest{
|
||||
TypeName: n.Addr.Resource.Type,
|
||||
Config: configVal,
|
||||
},
|
||||
)
|
||||
if validateResp.Diagnostics.HasErrors() {
|
||||
return nil, validateResp.Diagnostics.InConfigBody(n.Config.Config).Err()
|
||||
}
|
||||
|
||||
// If we get down here then our configuration is complete and we're read
|
||||
// to actually call the provider to read the data.
|
||||
log.Printf("[TRACE] EvalReadData: %s configuration is complete, so reading from provider", absAddr)
|
||||
|
|
Loading…
Reference in New Issue