in pkg/data_data_source.go [27:63]
func (dd *DataSourceData) ExecuteDuringPlan() error {
src := dd.BaseBlock.Config().(*MetaProgrammingTFConfig).DataBlocks()
var matched []*terraform.RootBlock
ds := linq.From(src)
if dd.DataSourceType != "" {
ds = ds.Where(func(i interface{}) bool {
return i.(*terraform.RootBlock).Labels[0] == dd.DataSourceType
})
}
if dd.UseForEach {
ds = ds.Where(func(i interface{}) bool {
return i.(*terraform.RootBlock).ForEach != nil
})
}
if dd.UseCount {
ds = ds.Where(func(i interface{}) bool {
return i.(*terraform.RootBlock).Count != nil
})
}
ds.ToSlice(&matched)
dataBlocks := make(map[string]map[string]cty.Value)
for _, b := range matched {
dataType := b.Labels[0]
m, ok := dataBlocks[dataType]
if !ok {
m = make(map[string]cty.Value)
dataBlocks[dataType] = m
}
m[b.Labels[1]] = b.EvalContext()
}
obj := make(map[string]cty.Value)
for k, m := range dataBlocks {
obj[k] = cty.ObjectVal(m)
}
dd.Result = cty.ObjectVal(obj)
return nil
}