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