github.com/opentofu/opentofu@v1.7.1/internal/tofu/transform_resource_count.go (about) 1 // Copyright (c) The OpenTofu Authors 2 // SPDX-License-Identifier: MPL-2.0 3 // Copyright (c) 2023 HashiCorp, Inc. 4 // SPDX-License-Identifier: MPL-2.0 5 6 package tofu 7 8 import ( 9 "log" 10 11 "github.com/opentofu/opentofu/internal/addrs" 12 "github.com/opentofu/opentofu/internal/configs/configschema" 13 "github.com/opentofu/opentofu/internal/dag" 14 ) 15 16 // ResourceCountTransformer is a GraphTransformer that expands the count 17 // out for a specific resource. 18 // 19 // This assumes that the count is already interpolated. 20 type ResourceCountTransformer struct { 21 Concrete ConcreteResourceInstanceNodeFunc 22 Schema *configschema.Block 23 24 Addr addrs.ConfigResource 25 InstanceAddrs []addrs.AbsResourceInstance 26 } 27 28 func (t *ResourceCountTransformer) Transform(g *Graph) error { 29 for _, addr := range t.InstanceAddrs { 30 abstract := NewNodeAbstractResourceInstance(addr) 31 abstract.Schema = t.Schema 32 var node dag.Vertex = abstract 33 if f := t.Concrete; f != nil { 34 node = f(abstract) 35 } 36 37 log.Printf("[TRACE] ResourceCountTransformer: adding %s as %T", addr, node) 38 g.Add(node) 39 } 40 return nil 41 }